Int 21h/ah=39h returns 目录创建时 AX=3

Int 21h/ah=39h returns with AX=3 upon directory creation

我正在尝试在 DOSBOX 中创建一个新目录。我在 Debian 上,通过 DOSBOX 使用 MASM。代码很简单,但是不行

我用debug执行了,returns错误3(执行后AX=0003h)。根据this,错误是因为路径不存在。我的 DOSBOX 将 C: 驱动器安装在 .asm 代码所在的目录中。

我不明白为什么会出现此错误。如果我从 DOSBOX 命令行 运行 mkdir C:\nuevo,它将毫无问题地创建目录 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

创建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 段。