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