2013-04-08 99 views
1

我有一个关于x86程序集中的32位寄存器的子部分的问题:寄存器的低位部分(使用时)是否像对应的32位寄存器?澄清32位寄存器的子部分x86

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

就拿上面的代码段 - 因为CLECX寄存器的小节中,当我推寄存器的内容压入堆栈所做的是在CL款被推到堆栈,以及?还是他们分开处理?

并假设如果我然后弹出堆栈到EAX寄存器做什么在CL寄存器从之前进入EAX寄存器?

+0

'CL'只是访问ECX'的'数位的便捷方式,他们是相同的寄存器 – Linuxios 2013-04-08 01:37:55

+1

推ECX将推动CL的8位。将它弹出到EAX中会将这8位复制到AL中。 – 2013-04-08 01:49:08

+0

@Linuxios&Hans Passant - 好的欢呼家伙我明白你的意思了。非常感谢 – 2013-04-08 01:52:47

回答

4

ECX寄存器包含在其下部,它包含CHCL如在下面的图片表示CX。修改存储在CL中的值时,还需要更改CXECX,但不更改CH

回答您的问题:

问:当我把寄存器[ECX]的内容压入堆栈确实是在CL款得到什么压入堆栈呢?还是他们对待了独立?
- 答:所有在一枪。 CLECX的一部分。 CL只是处理器提供的访问部分ECX的一种方式。

问:再假设,如果我再POP操作堆栈到EAX寄存器所做的是在CL寄存器从之前进入EAX注册?
- 答:是的。更准确地说,CL中的内容将进入AL

enter image description here

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

+0

优秀的答案,谢谢! – 2013-04-08 23:16:06

+0

不客气;) – Jean 2013-04-09 07:06:14