澄清32位寄存器x86的子部分

时间:2013-04-08 01:34:47

标签: assembly x86 stack cpu-registers

我有一个关于x86汇编中32位寄存器小节的问题:寄存器的下部(使用时)是否像对应的32位寄存器的一部分一样?

ror cl,2    
ror cl,2
push ecx
pop eax

以上面的代码部分为例 - 因为CLECX寄存器的一个子部分,当我将寄存器的内容推送到堆栈时,执行CL中的内容分段也被推入堆栈?或者他们是分开对待的?

假设我然后将堆栈弹出到EAX寄存器,那么在进入CL寄存器之前,EAX寄存器中的内容是什么?

1 个答案:

答案 0 :(得分:4)

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

回答您的问题:

问: 当我将寄存器[ECX]的内容压入堆栈时,CL子节中的内容会被推送到堆栈中好?或者他们对待seperatley?
A:一气呵成。 CLECX的一部分。 CL只是处理器提供的一种访问ECX部分的方式。

问: 并且假设我然后将堆栈加到EAX寄存器上,那么CL寄存器中的内容就会进入{{1}注册?
A:是的。更准确地说,EAX中的内容会进入CL

enter image description here

来源: A tutorial on Register Allocation by Puzzle Solving(在compilers.cs.ucla.edu上)