3

我正在尝试在DOSBOX中创建一个新目录。我在 Debian 上,通过DOSBOX使用MASM。代码非常简单,但它不起作用。

我已经通过调试执行了它,它返回错误 3(执行后 AX=0003h)。据此错误是因为路径不存在。我的DOSBOX将 C: 驱动器安装在 .asm 代码所在的目录上。

我不明白为什么我会收到这个错误。如果我mkdir C:\nuevoDOSBOX命令行运行,它将毫无问题地创建nuevo目录

.model small
.stack
.code
  mov dx, offset filepath
  mov ah, 39h
  int 21h
  mov ah, 4ch
  int 21h

  ret
  filepath db "C:\nuevo", 0
end
4

1 回答 1

5

创建 DOS EXE程序时, DSES指向DOS PSP段,而不是您的实际数据段。使用EXE,您需要初始化DS,使其指向您自己的数据段。要使用TASM/MASM执行此操作,请在程序开头使用如下代码:

mov ax, @data 
mov ds, ax

这会将data段值移动到AX中,然后设置DS

您的程序无法运行的原因是因为没有正确初始化您的DS:DX组合int 21h/ah=39h指向了错误的内存,因此指向了错误的路径。

如果您正在创建 COM 程序CS = DS = ES ,则 不需要设置DS。这是因为当您的 COM 程序启动时,所有的段寄存器都被初始化为同一个 64k 段。

于 2015-11-23T17:18:06.867 回答