2013-04-08 92 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