[Emu 8086]无法打开文件

时间:2014-01-18 19:47:00

标签: assembly emulation x86-16

程序应该打开文件,从中读取并打印前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
    

3 个答案:

答案 0 :(得分:4)

您正在使用模拟器。您的程序可以访问模拟的C:驱动器,该驱动器不是PC的真正C:驱动器。

正如http://www.emu8086.com/所说:

  

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文件中得到一个反斜杠。