在创建目录时,Int 21h/ah = 39h返回AX = 3

Ben*_*laa 3 assembly masm dosbox create-directory x86-16

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

我已经用debug执行了它,它返回错误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
Run Code Online (Sandbox Code Playgroud)

Mic*_*tch 5

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

mov ax, @data 
mov ds, ax
Run Code Online (Sandbox Code Playgroud)

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

你的程序无法工作的原因是因为没有正确的初始化你的DS:DX组合int 21h/ah=39h指向错误的内存,因而错误的路径.

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