我有一个关于x86汇编中32位寄存器小节的问题:寄存器的下部(使用时)是否像对应的32位寄存器的一部分一样?
ror cl,2 ror cl,2 push ecx pop eax
以上面的代码部分为例 - 因为CL
是ECX
寄存器的一个子部分,当我将寄存器的内容推送到堆栈时,执行CL
中的内容分段也被推入堆栈?或者他们是分开对待的?
假设我然后将堆栈弹出到EAX
寄存器,那么在进入CL
寄存器之前,EAX
寄存器中的内容是什么?
答案 0 :(得分:4)
ECX
寄存器的下半部分包含CX
,其中包含CH
和CL
,如下图所示。修改CL
中存储的值时,您还会更改CX
和ECX
,但不会更改CH
。
回答您的问题:
问: 当我将寄存器[ECX
]的内容压入堆栈时,CL
子节中的内容会被推送到堆栈中好?或者他们对待seperatley?
A:一气呵成。 CL
是ECX
的一部分。 CL
只是处理器提供的一种访问ECX
部分的方式。
问: 并且假设我然后将堆栈加到EAX
寄存器上,那么CL
寄存器中的内容就会进入{{1}注册?
A:是的。更准确地说,EAX
中的内容会进入CL
。
来源: A tutorial on Register Allocation by Puzzle Solving(在compilers.cs.ucla.edu上)