只是一个预防措施。我是一个完整的组装菜鸟。我唯一的问题是DOS中只有以下命令:
MOV AH, 09
INT 21
MOV AX, 4C01
INT 21
第二个中断是否仍然具有参数09
意味着显示屏幕,或者AX
是否会以某种方式改变它?
答案 0 :(得分:3)
AH
和AL
分别是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
时,第二个MOV
将AH
设置为4cH
:
更详细(来自Wikipedia):
这个寄存器来自其他寄存器在英特尔有着悠久的历史:
AX
由ax
和ah
; al
由16位加上eax
; ax
由32位加上rax
中的另外32位组成。以及其他通用寄存器和特殊寄存器(如索引或基址寄存器)和堆栈指针的类似方法。
有趣的是,他们没有重复访问扩展寄存器的高半部分的能力,例如eax
由eax
和{{eah
组成1}}(两者都是神话,但后者是eal
的别名)。
这会给我们在更高模式下提供大量额外小寄存器的缓存,但我不确定成本会是多少(毫无疑问,英特尔/ AMD 做知道成本和它可能被认为太贵了。