我有一个Hello程序,用于MS,它使用int 21h进行系统调用。
mov dx,hello
mov ah,9
int 0x21
mov ah,0
int 0x21"hello“是字符串'hello,world',13,10,'$‘的地址。
这个程序很管用。
但是,当我将(第一个)“int0x21”替换为“调用5”时,程序会使计算机崩溃(即运行PTS的VirtualBox虚拟机)。在DOSbox上,它只是终止并返回到命令提示符。
我试着用不同的寄存器来记录地址和电话号码,但结果总是一样。
现在我在想..。
有什么想法吗?
更新:我接受了答案,因为根据文档,答案是正确的。它仍然不工作,但这可能是由于我的DOS版本或其他一些问题。
发布于 2013-05-21 12:03:30
有没有DOS的版本,你真的看到了CP/M“呼叫5”的工作?我从DOS 2.1开始,但确实为1.1编写了一些代码,我看到的唯一的CP/M兼容性是在FCB中。当然,我并没有明确的寻找它,但我不记得“呼叫5”报告说有人支持.
后续行动:
最新的PSP定义(在web上列出,所以YMMV)确实有支持的“调用5”接口。任何真正的DOS兼容环境都应该支持它。
发布于 2016-10-08 22:09:35
DOSBox不支持调用5。从它的源代码:
// lets hope nobody really uses this address
sSave(sPSP,cpm_entry,RealMake(0xDEAD,0xFFFF));发布于 2016-10-09 22:52:08
我不希望旧的“调用5”界面能与DOSBox一起工作,因为它只是试图模仿游戏中使用的东西,而且很可能没有MS游戏使用它。这种模糊界面的存在仅仅是为了使CP/M程序更容易移植到MS,而MS在最初的版本中基本上只是CP/M的克隆。同样,如果在其他模拟环境或MS克隆中不工作,我也不会感到惊讶,因为它们并不真正需要它。
如果你试图使用这种深奥的东西,你应该使用一个真正的MS版本。您还可能需要使用真正的PC,因为即使像VirtualBox这样的VM也忽略了人们实际使用它的程序所不需要的东西。
然而,即使在真实的MS上,在使用CALL 5兼容接口时也有一些限制:
https://stackoverflow.com/questions/16669352
复制相似问题