MS-DOS 上的调用 5 接口

And*_*ehm 1 assembly dos system-calls

我有一个用于 MS-DOS 的 Hello, World 程序,它使用 int 21h 进行系统调用。

mov dx,hello
mov ah,9
int 0x21
mov ah,0
int 0x21
Run Code Online (Sandbox Code Playgroud)

“hello”是字符串“hello, world”,13,10,“$”的地址。

该程序有效。

然而,当我用“call 5”替换(第一个)“int 0x21”时,程序使计算机崩溃(即运行PTS-DOS的VirtualBox虚拟机)。在 DOSbox 上,它只是终止并返回到命令提示符。

我尝试使用不同的寄存器来存储地址和电话号码,但总是得到相同的结果。

现在我想知道...

  1. DOS 的更高版本不再支持 CP/M 兼容性调用 5 接口吗?
  2. PTS-DOS和DOSbox中的DOS不支持呼叫5吗?
  3. 我使用的接口错误吗?
  4. 我必须先配置段寄存器吗?(我尝试将所有段寄存器设置为零。)

有任何想法吗?

更新:我接受了答案,因为根据文档它是正确的。它仍然无法工作,但这可能是由于我的 DOS 版本或其他问题造成的。

joh*_*n_e 5

DOSBox不支持CALL 5。从其源代码来看:

// lets hope nobody really uses this address
sSave(sPSP,cpm_entry,RealMake(0xDEAD,0xFFFF));
Run Code Online (Sandbox Code Playgroud)