Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 x86子寄存器特定的汇编指令如何与整个指令交互?_Assembly_X86 - Fatal编程技术网

Assembly x86子寄存器特定的汇编指令如何与整个指令交互?

Assembly x86子寄存器特定的汇编指令如何与整个指令交互?,assembly,x86,Assembly,X86,主要是询问算术运算 例如: 假设32位硬件 eax存储0xff000000 如果调用sub al,0x10,则较高的字节/位是否会更改? 它是影响整个寄存器,还是将操作限制在该细分 其他操作add、sal、sar等是否具有一致的整个/子寄存器交互?您实际上可以阅读中的文档,其中描述了只有您在命令中寻址的寄存器部分才会更改 或者,您可以使用调试器自己执行快速测试,例如,如果您使用的是Windows 从下图可以看出,通过trace t命令执行sub al 0x10后,eax寄存器将通过转储寄存器命令

主要是询问算术运算

例如:

假设32位硬件 eax存储0xff000000

如果调用sub al,0x10,则较高的字节/位是否会更改? 它是影响整个寄存器,还是将操作限制在该细分


其他操作add、sal、sar等是否具有一致的整个/子寄存器交互?

您实际上可以阅读中的文档,其中描述了只有您在命令中寻址的寄存器部分才会更改

或者,您可以使用调试器自己执行快速测试,例如,如果您使用的是Windows

从下图可以看出,通过trace t命令执行sub al 0x10后,eax寄存器将通过转储寄存器命令r变为0xff0000f0。 根据寄存器特定下部的变化,如从nc进位到cy进位,相应地更新标志


希望这有帮助。尊敬的Ronald

不,其他位不受影响。是的,这是一致的,除了64位模式,其中32位操作清除顶部位。有点重复。问题本身就是这个问题的答案。是的,它实际上引用了英特尔手册中描述如何写入AX、AH和AL的部分,因此我将以dup的形式关闭该部分。在64位代码中,如果指令的目标是32位寄存器ie EAX,则结果将在整个64位寄存器RAX上进行零扩展。@MichaelPetch感谢您指出这一点。我将删除第二个例子,因为它具有误导性。谢谢