我有一个关于 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
,您也会更改CX
and ECX
,但不会更改CH
。
要回答您的问题:
问: 当我将寄存器 [ ECX
] 的内容压入堆栈时,该CL
小节中的内容是否也被压入堆栈?或者他们被单独对待?
答:一枪搞定。CL
是的一部分ECX
。CL
只是处理器提供的一种访问ECX
.
问: 假设如果我随后将堆栈弹出到EAX
寄存器中,那么CL
之前寄存器中的内容是否会进入EAX
寄存器?
答:是的。更准确地说,里面的东西CL
会进入AL
.
资料来源:Puzzle Solving 的寄存器分配教程(在 compilers.cs.ucla.edu 上)