我正在尝试在MASM汇编程序中打开一个文本文件(稍后我想阅读)。必须使用int 21h, AH = 3Dh
中断完成此操作。我将0
推入AL
寄存器(打开文件为"只读")并在DX
中推送ASCII文件名。通常,文件句柄应该推送到AX
,但事实并非如此。我在AL中返回2
(这不是文件句柄,而是因为C = 1
而导致的错误),(在Internet上搜索之后)意味着文本文件不存在。有什么东西我不见了吗?该文件确实存在并与我的ASM文件位于同一文件夹中。
start:
sti
cld
push ds
pop es
code:
; Opening a file with file = ASCII path
mov ah, 3Dh
mov al, 0
lea dx, [file]
int 21h
; Save AX as our file handle
mov [handle], ax
; Put the handle in BX
mov bx, [handle]
; Close the file
mov ah, 3Eh
int 21h
; Stop the program
mov eax, 4c00h
int 21h
DATASEG
handle dw 0
file db 'abcd.txt', 0
答案 0 :(得分:0)
在玩了一下之后,我注意到如果我将文件名移到edx
而不是dx
,我的问题就解决了,我不太明白,因为每个其他来源我发现说文件名应该在dx
。问题是,为什么这有效?