Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 以下汇编命令中会发生什么情况?_Assembly_X86_Dos - Fatal编程技术网

Assembly 以下汇编命令中会发生什么情况?

Assembly 以下汇编命令中会发生什么情况?,assembly,x86,dos,Assembly,X86,Dos,只是预防措施。我完全不懂组装。我唯一的问题是DOS中只有以下命令: MOV AH, 09 INT 21 MOV AX, 4C01 INT 21 第二个中断是否仍然有参数09表示显示屏,或者AX是否以某种方式改变了这一点?AH和AL分别是AX的高半部和低半部。所以是的,设置AX会改变AH 4C是“退出程序”。您需要搜索,它是这些旧DOS/Windows中断的最终指南 调用将位于DS:DX的以$结尾的字符串输出到控制台 调用将退出程序,返回代码为AL(本例中为01H) 第二次调用不会将A

只是预防措施。我完全不懂组装。我唯一的问题是DOS中只有以下命令:

MOV  AH, 09
INT  21

MOV  AX, 4C01
INT  21

第二个中断是否仍然有参数
09
表示显示屏,或者
AX
是否以某种方式改变了这一点?

AH
AL
分别是
AX
的高半部和低半部。所以是的,设置
AX
会改变
AH

4C
是“退出程序”。

您需要搜索,它是这些旧DOS/Windows中断的最终指南

调用将位于
DS:DX
的以
$
结尾的字符串输出到控制台

调用将退出程序,返回代码为
AL
(本例中为01H)

第二次调用不会将
AH
设置为
09H
,因为
AH
只是
AX
的上8位。第二个
MOV
AH
设置为
4cH
,作为设置
AX
的一部分:


更多详细信息(来自):


此寄存器由其他寄存器制成,在英特尔有着悠久的历史,包括:

  • ax
    ah
    al
    组成
  • eax
    由16位加上
    ax
    中的其他16位组成
  • rax
    由32位加上
    eax
    中的其他32位组成
以及其他通用寄存器和特殊寄存器(如索引或基址寄存器)和堆栈指针的类似方法

有趣的是,它们没有复制访问扩展寄存器高半部的能力,例如
eax
eah
eal
组成(两者都是虚构的,但后者是
ax
的别名)


在更高的模式下,这会给我们提供一个超大的超小型寄存器缓存,尽管我不确定成本是多少(毫无疑问,Intel/AMD确实知道成本,而且它可能被认为太贵了)。

如果是
MOV AX,4c01
INT
是中断调用。是的,应该感谢21:LOXY我知道int21是DOS的API调用。我完全不知道ah中的值是如何变化的,INT调用的参数是如何变化的。感谢链接到Ralf的网站惊人列表,现在我必须克服这几个小时对装配的误解。