我有一个关于 x86 汇编中 32 位寄存器的子部分的问题:寄存器的较低子部分(使用时)是否被视为相应 32 位寄存器的一部分?
错误 cl,2 罗尔 cl,2 推送ECX 流行的eax
以上面的代码部分为例 - 因为
CL
是 ECX
寄存器的一个子部分,当我将寄存器的内容推入堆栈时,CL
子部分中的内容也被推入堆栈?还是分开对待?
假设如果我随后将堆栈弹出到
EAX
寄存器中,那么之前 CL
寄存器中的内容会进入 EAX
寄存器吗?
ECX
寄存器的下部包含CX
,其中包含CH
和CL
,如下图所示。修改 CL
中存储的值时,您还会更改 CX
和 ECX
,但不会更改 CH
。
回答您的问题:
问: 当我将寄存器 [
ECX
] 的内容压入堆栈时,CL
小节中的内容也会被压入堆栈吗?还是分开治疗?.CL
是 ECX
的一部分。 CL
只是处理器提供的一种访问ECX
的一部分的方式。
问:假设如果我将堆栈弹出到
EAX
寄存器中,那么之前CL
寄存器中的内容就会进入EAX
寄存器吗?.CL
中的内容将进入 AL
。
来源:通过解谜进行寄存器分配的教程(在compilers.cs.ucla.edu)