只是一个预防措施。我是一个完全的组装菜鸟。我唯一的问题是在 DOS 中只有以下命令:
MOV AH, 09
INT 21
MOV AX, 4C01
INT 21
第二个中断是否仍然有参数 09
表示显示屏幕,或者 AX
是否以某种方式改变了它?
最佳答案
您需要搜索Ralf Brown's Interrupt List ,它是这些旧 DOS/Windows 中断的权威指南。
调用 INT 21h with AH = 09H将位于 DS:DX
的以 $
结尾的字符串输出到控制台。
调用 INT 21H with AH = 4cH使用 AL
中的返回码退出您的程序(在本例中为 01H)。
第二次调用不会将AH
设置为09H
,因为AH
只是高8位AX
。第二个 MOV
将 AH
设置为 4cH
作为设置 AX
的一部分:
更详细(来自 Wikipedia ):
这种由其他寄存器制成的寄存器在英特尔有着悠久的历史:
ax
由ah
和al
组成;eax
由 16 位加上来自ax
的其他 16 位组成;rax
由 32 位加上来自eax
的其他 32 位组成。
以及用于其他通用寄存器和特殊寄存器(如索引或基址寄存器)以及堆栈指针的类似方法。
有趣的是,它们没有复制访问扩展寄存器高半部分的能力,例如 eax
由 eah
和 eal
(都是虚构的,但后者是 ax
的别名)。
这会在更高模式下为我们提供超小寄存器的大缓存,但我不确定成本是多少(毫无疑问英特尔/AMD 确实知道成本并且它可能被认为太贵了)。
关于assembly - 以下汇编命令会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14680634/