基本汇编代码崩溃DOS模拟器

时间:2014-11-03 15:26:48

标签: assembly

我是一个非常新的汇编编码器,其中大部分对我来说仍然是陌生的。我的代码如下

0100: mov ah, 09
0102: mov dx, 010A
0105: int 21h
0107: int 20h
010A: db "Hello World!$"

在我的DOS模拟器(DosBox)中运行此代码会导致模拟器窗口生成" Hello World!"消息并继续冻结并最终给予"程序没有响应"错误。

1 个答案:

答案 0 :(得分:1)

因为您没有正确退出应用程序而冻结。试试这个:

mov ah, 4C00h; 
int 21;

应该做的伎俩。 至于对此处发生的事情的解释,我们必须获取INT 20INT 21的参考。正如您所看到的,它们都旨在终止应用程序,但是INT 20是传统的方法,后来被替换为21,4c。两者之间的主要区别在于INT 20只是终止进程,而INT 21,4C也返回适当的返回代码(所有现代应用程序都需要这样做)。

从构造本身开始,通过将“4C00h”(你应该只能使用“4Ch”)移动到注册表AH,我们告诉INT 21我们感兴趣的功能。因为不像INT 20,它有只有一个目的,INT 21 has a long list of them,并通过在注册管理机构中设置适当的值,INT 21知道对它的期望。