Ben*_*laa 3 assembly masm dosbox create-directory x86-16
我正在尝试在DOSBOX中创建一个新目录.我在Debian上,通过DOSBOX使用MASM.代码非常简单,但不起作用.
我已经用debug执行了它,它返回错误3(执行后AX = 0003h).根据这个,这个错误是因为该路径不存在.我的DOSBOX将C:驱动器安装在.asm代码所在的目录中.
我不明白为什么我会收到这个错误.如果我mkdir C:\nuevo从DOSBOX命令行运行,它将创建目录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)
创建DOS EXE程序时,DS和ES指向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段.