2016-12-26 3 views
-2

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 

Antwort

2

Okay, sorry für diese Frage eigentlich, aber ich dachte, es endlich heraus. Als ich die Datei öffnete, tat ich

mov al, 0 

was bedeutet, ich öffnete die Datei mit Lesezugriff. Was ich tun musste, war

Sorry für die Mühe Jungs, ich bin nur froh, dass ich endlich herausgefunden habe.

Verwandte Themen