Datei öffnen und Lesen bilden den Puffer in der Montage
hey ich bin ein Anfänger in der Montage ,, ich nicht, eine Datei zu öffnen und Lesen Sie den Wert "integer"
von Sie es und speichern Sie die ganze Zahl in den Puffer zu drucken, auf dem Bildschirm, das ist mein code, es funktioniert nicht
include inout.asm
.model small,c
.486
.stack
.data
org 100h ; .com memory layout
buf db ?
file db "c:\rtasm\bin\file.txt";the file name in bin
.code
mov dx, offset file ; address of file to dx
mov al,0 ; open file (read-only)
mov ah,3dh
int 21h ; call the interupt
mov bx,ax ; put handler to file in bx
mov ah,40h
mov bx,ax
mov cx,2h ;; how many bytes you want to read
mov dx,offset buf ;; where you want to store that data (see note on Offset above)
int 21h
call putchar,offset buf; print char on the screen
mov ah,3eh
mov bx,ax
int 21h
.exit
END
Du musst angemeldet sein, um einen Kommentar abzugeben.
Int 21h Funktion 3Dh ("ÖFFNEN VORHANDENER DATEI") erwartet einen null-terminierten string in
ds:dx
. Die Zeichenfolge, die Sie sind, die Versorgung nicht über einen null-terminator. Der Dateiname sollte erklärt werden, wiefile db "c:\rtasm\bin\file.txt",0
.Beiden Funktionen 3Dh und 40h return-Fehler-codes, wenn Sie Versagen. Sie sollten prüfen diese und informieren Sie den Benutzer (dich in diesem Fall), wenn ein Fehler aufgetreten ist, anstatt davon auszugehen, dass die Operationen, die immer erfolgreich sein wird.
Ein weiteres problem ist der folgende code:
Zweiten
mov bx,ax
ist überflüssig, dabx
enthält bereits die Datei-handle. In der Tat, es ist nicht nur unnötig, sondern auch falsch, da hast du überschrieben, der hohe Teil derax
(ah
) mit dem Wert 40h.Es gibt auch die Tatsache, dass Sie Lesen, zwei bytes in einen Puffer, der nur Raum für ein byte.
ax
Pflege seinen Wert, obwohl Sie den Wandel Teil derax
registrieren, oder die interrupt-call-Funktionen, ändernax
. Das ist offensichtlich nicht zur Arbeit gehen, daher schlage ich vor, Sie Lesen Sie, wie die Register zu arbeiten und zu studieren die interrupts, die Sie verwenden mehr gezielt.