澄清 32 位寄存器 x86 的各个部分

问题描述 投票:0回答:1

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

错误 cl,2
罗尔 cl,2
推送ECX
流行的eax

以上面的代码部分为例 - 因为

CL
ECX
寄存器的一个子部分,当我将寄存器的内容推入堆栈时,
CL
子部分中的内容也被推入堆栈?还是分开对待?

假设如果我随后将堆栈弹出到

EAX
寄存器中,那么之前
CL
寄存器中的内容会进入
EAX
寄存器吗?

assembly x86 stack cpu-registers
1个回答
5
投票

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

回答您的问题:

问: 当我将寄存器 [

ECX
] 的内容压入堆栈时,
CL
小节中的内容也会被压入堆栈吗?还是分开治疗?
.
A: 一击即成。
CL
ECX
的一部分。
CL
只是处理器提供的一种访问
ECX
的一部分的方式。

问:假设如果我将堆栈弹出到

EAX
寄存器中,那么之前
CL
寄存器中的内容就会进入
EAX
寄存器吗?
.
答: 是的。更准确地说,
CL
中的内容将进入
AL

来源:通过解谜进行寄存器分配的教程(在compilers.cs.ucla.edu)

© www.soinside.com 2019 - 2024. All rights reserved.