以下汇编命令会发生什么?

时间:2013-02-04 05:00:59

标签: assembly x86 dos

只是一个预防措施。我是一个完整的组装菜鸟。我唯一的问题是DOS中只有以下命令:

MOV  AH, 09
INT  21

MOV  AX, 4C01
INT  21

第二个中断是否仍然具有参数09意味着显示屏幕,或者AX是否会以某种方式改变它?

2 个答案:

答案 0 :(得分:3)

AHAL分别是AX的高半部分和低半部分。是的,设置AX更改AH

4C是“退出程序”。

答案 1 :(得分:3)

您需要搜索Ralf Brown's Interrupt List,它是这些旧DOS / Windows中断的权威指南。

调用INT 21h with AH = 09H会将位于$的{​​{1}}终止字符串输出到控制台。

使用DS:DX中的返回码(在这种情况下为01H)调用INT 21H with AH = 4cH退出程序。

第二个电话AL设置为AH,因为09H只是AH的高8位。设置AX时,第二个MOVAH设置为4cH

enter image description here


更详细(来自Wikipedia):

enter image description here


这个寄存器来自其他寄存器在英特尔有着悠久的历史:

  • AXaxah;
  • 组成
  • al由16位加上eax;
  • 中的其他16位组成
  • ax由32位加上rax中的另外32位组成。

以及其他通用寄存器特殊寄存器(如索引或基址寄存器)和堆栈指针的类似方法。

有趣的是,他们没有重复访问扩展寄存器的高半部分的能力,例如eaxeax和{{eah组成1}}(两者都是神话,但后者是eal的别名)。

这会给我们在更高模式下提供大量额外小寄存器的缓存,但我不确定成本会是多少(毫无疑问,英特尔/ AMD 知道成本和它可能被认为太贵了。