gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:14:44 24 4
gpt4 key购买 nike

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

我已经通过调试执行了它,它返回错误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

您的程序无法工作的原因是因为没有正确初始化,您的 int 21h/ah=39hDS:DX 组合指向了错误的内存,并且因此走错了路。

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

关于assembly - Int 21h/ah=39h 在创建目录时返回 AX=3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33872531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com