2

我有一个关于 x86 汇编中 32 位寄存器的子部分的问题:寄存器的较低子部分(使用时)是否被视为相应 32 位寄存器的一部分?

r cl,2    
r cl,2
推送 ecx
流行音乐

以上面的代码部分为例 - 因为CLECX寄存器的一个小节,当我将寄存器的内容推送到堆栈时,该CL小节中的内容是否也被推送到堆栈中?还是分别对待?

并且假设如果我然后将堆栈弹出到EAX寄存器中,那么CL之前寄存器中的内容是否会进入EAX寄存器?

4

1 回答 1

5

ECX寄存器在其CX下部包含CHCL如下图所示。修改存储在 中的值时CL,您也会更改CXand ECX,但不会更改CH

要回答您的问题:

问: 当我将寄存器 [ ECX] 的内容压入堆栈时,该CL小节中的内容是否也被压入堆栈?或者他们被单独对待?
答:一枪搞定。CL是的一部分ECXCL只是处理器提供的一种访问ECX.

问: 假设如果我随后将堆栈弹出到EAX寄存器中,那么CL之前寄存器中的内容是否会进入EAX寄存器?
答:是的。更准确地说,里面的东西CL会进入AL.

在此处输入图像描述

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

于 2013-04-08T09:17:37.307 回答