Ich versuche, ein einfaches Programm in Assembly zu schreiben, in dem ich eine vorhandene Datei öffnen, und ich schreibe eine Nachricht darin, eine Nachricht, die ich in meinem Datensegment definieren. Das Problem tritt auf, wenn ich in meine Datei schreiben möchte. Das AX-Register enthält 5, nachdem ich versucht habe, es zu schreiben, und der Norton Expert Guide sagt, dass es sich um einen Fehlercode "Zugriff verweigert" handelt. Irgendwelche Ideen, was ich falsch mache? Tut mir leid, wenn diese Frage ziemlich einfach ist, ich versuche nur, eine Assembly für einen kommenden Test zu lernen. Ich verwende TASM, um meinen Code zu kompilieren. Die Datei, in die ich schreiben möchte, existiert (daher kein Fehler, wenn ich sie öffne) und sie ist leer.Probleme beim Schreiben in Datei in Assembly
Hier ist mein Code:
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