程序应该打开文件,从中读取并打印前4个字符。
我无法弄清楚问题是什么。我甚至自己在那里创建了文件,但仍然无法打开文件。
org 100h
jmp start
filename db "C:\f1.txt",0
errormessage: db "Ndodhi nje gabim gjate ekzekutimit$"
Buffer db 50h dup(?)
start:
lea dx,filename
mov ah,3Dh
mov al,0
int 21h
jc error
mov bx,ax
mov ah,3Fh
mov cx,4
lea dx,Buffer
int 21h
jmp end
error:mov dx,offset errormessage
mov ah,09h
int 21h
end: ret
答案 0 :(得分:4)
您正在使用模拟器。您的程序可以访问模拟的C:
驱动器,该驱动器不是PC的真正C:
驱动器。
dos文件系统在\ vdrive \ folder
中模拟
换句话说,将文件f1.txt
放在文件夹c:\emu8086\vdrive\c
中;您的程序会在出现的文件中看到C:\
。
如果您在c:\emu8086
以外的文件夹中安装了emu8086,那么显然您必须在那里寻找vdrive
。
答案 1 :(得分:0)
您应该将数据(所有db
内容)放在.data
指令下,以及.code
下的代码。在旧式.com
文件中,无关紧要,但在.exe
中,数据段(ds
)和代码段(cs
)不同,你应该告诉汇编者属于哪里。
说明:DOS函数要求文件名在地址ds:dx
上,但很可能,那里没有任何东西(可能只是NUL字符,它被解释为空字符串)因为文件名在地址{ {1}}。
答案 2 :(得分:0)
如果错误消息打印正确,您可以确定DS段寄存器设置正确,问题必须在第一个“int 21h”之前。
您应该使用十六进制编辑器打开文件,并检查字符串“c:\ f1.txt”是否真的存在。有些汇编程序处理像C这样的字符串中的反斜杠,所以你必须写两个反斜杠(“c:\\ f1.txt”)才能在.COM文件中得到一个反斜杠。