我有一个关于 x86 汇编中 32 位寄存器的子部分的问题:寄存器的较低子部分(使用时)是否被视为相应 32 位寄存器的一部分?
r cl,2 r cl,2 推送 ecx 流行音乐
以上面的代码部分为例 - 因为CL是ECX寄存器的一个小节,当我将寄存器的内容推送到堆栈时,该CL小节中的内容是否也被推送到堆栈中?还是分别对待?
并且假设如果我然后将堆栈弹出到EAX寄存器中,那么CL之前寄存器中的内容是否会进入EAX寄存器?
我有一个关于 x86 汇编中 32 位寄存器的子部分的问题:寄存器的较低子部分(使用时)是否被视为相应 32 位寄存器的一部分?
r cl,2 r cl,2 推送 ecx 流行音乐
以上面的代码部分为例 - 因为CL是ECX寄存器的一个小节,当我将寄存器的内容推送到堆栈时,该CL小节中的内容是否也被推送到堆栈中?还是分别对待?
并且假设如果我然后将堆栈弹出到EAX寄存器中,那么CL之前寄存器中的内容是否会进入EAX寄存器?
ECX寄存器在其CX下部包含CH,CL如下图所示。修改存储在 中的值时CL,您也会更改CXand ECX,但不会更改CH。
要回答您的问题:
问: 当我将寄存器 [ ECX] 的内容压入堆栈时,该CL小节中的内容是否也被压入堆栈?或者他们被单独对待?
答:一枪搞定。CL是的一部分ECX。CL只是处理器提供的一种访问ECX.
问: 假设如果我随后将堆栈弹出到EAX寄存器中,那么CL之前寄存器中的内容是否会进入EAX寄存器?
答:是的。更准确地说,里面的东西CL会进入AL.

资料来源:Puzzle Solving 的寄存器分配教程(在 compilers.cs.ucla.edu 上)