2016-12-26 5 views
-2

私は、既存のファイルを開き、そこにメッセージを書きます。私はデータセグメントで定義したメッセージをアセンブリに書き込もうとしています。この問題はファイルに書き込むときに発生します。私がそれに書き込もうとすると、AXレジスタには5が入り、ノートンエキスパートガイドには「アクセス拒否」エラーコードが表示されます。私が間違っていることに関するアイデアは?申し訳ありませんが、この質問が簡単なのであれば、今後のテストのためのアセンブリを学ぼうとしています。私は自分のコードをコンパイルするためにTASMを使用しています。私が書きたいファイルが存在するので(それを開いたときにエラーがない)、それは空です。アセンブリのファイルへの書き込みの問題

は、ここに私のコードです:

assume cs:code, ds:data 
data segment 
    errorMsg db 'Error at opening $' 
    errorMsg2 db 'Error at writing $' 
    msg db 'File name: $' 
    maxFile db 12 
    fileLength db ? 
    fileName db 12 dup(?) 
    buffer db 100, '$' 
    text db "Here $" 
    handle dw ? 

data ends 
code segment 
start: 
    mov ax, data 
    mov ds, ax 

    ;print 'File name: ' message on screen 
    mov ah, 09h 
    mov dx, offset msg 
    int 21h 

    ;enter name of file 
    mov ah, 0ah 
    mov dx, offset maxFile 
    int 21h 

    ; transform file name in an asciiz string which ends in 0 
    mov al, fileLength 
    xor ah, ah 
    mov si, ax 
    mov fileName[si], 0 

    ;open file 
    mov ah,3dh 
    mov al, 0 
    mov dx, offset fileName 
    int 21h 
    mov handle, ax; saving the file handle 

    jc openError;jump if carry, will print 'error at opening' 


    ;write in file 
    mov ah, 40h 
    mov bx, handle 
    mov cx, 4 ;number of bytes to write 
    mov dx, offset text 
    int 21h 

    jc openError2 ;jump if carry, will print 'error at writing' 
    ;!!! here is where I get the error, my program jumps to openError2 label!!!; 

    ;close file 
    mov ah, 3eh 
    mov bx, handle 
    int 21h 

    jmp endPrg;jump over errors if it reached this point 

    openError: 
     mov ah, 09h 
     mov dx, offset errorMsg 
     int 21h 

    openError2: 
     mov ah, 09h 
     mov dx, offset errorMsg2 
     int 21h 

    endPrg: 
     mov ax,4c00h 
     int 21h 
code ends 
end start 

答えて

2

さてさて、申し訳ありません実際にこの質問のために、私はついにそれを考え出しました。私がファイルを開いたときに、私はした

mov al, 0 

私は読み取り専用アクセスでファイルを開いたことを意味します。私は何をするために必要なことは、私は、私はついにそれを考え出しただけでうれしい、わざわざ男性のための

mov al, 1 (write-only access) or 
mov al, 2 (read+write access). 

申し訳ありませんでした。

関連する問題