我有一個關於x86程序集中的32位寄存器的子部分的問題:寄存器的低位部分(使用時)是否像對應的32位寄存器?澄清32位寄存器的子部分x86
ror cl,2 ror cl,2 push ecx pop eax
就拿上面的代碼段 - 因爲CL
是ECX
寄存器的小節中,當我推寄存器的內容壓入堆棧所做的是在CL
款被推到堆棧,以及?還是他們分開處理?
並假設如果我然後彈出堆棧到EAX
寄存器做什麼在CL
寄存器從之前進入EAX
寄存器?
我有一個關於x86程序集中的32位寄存器的子部分的問題:寄存器的低位部分(使用時)是否像對應的32位寄存器?澄清32位寄存器的子部分x86
ror cl,2 ror cl,2 push ecx pop eax
就拿上面的代碼段 - 因爲CL
是ECX
寄存器的小節中,當我推寄存器的內容壓入堆棧所做的是在CL
款被推到堆棧,以及?還是他們分開處理?
並假設如果我然後彈出堆棧到EAX
寄存器做什麼在CL
寄存器從之前進入EAX
寄存器?
的ECX
寄存器包含在其下部,它包含CH
和CL
如在下面的圖片表示CX
。修改存儲在CL
中的值時,還需要更改CX
和ECX
,但不更改CH
。
回答您的問題:
問:當我把寄存器[ECX
]的內容壓入堆棧確實是在CL
款得到什麼壓入堆棧呢?還是他們對待了獨立?
- 答:所有在一槍。 CL
是ECX
的一部分。 CL
只是處理器提供的訪問部分ECX
的一種方式。
問:再假設,如果我再POP操作堆棧到EAX
寄存器所做的是在CL
寄存器從之前進入EAX
註冊?
- 答:是的。更準確地說,CL
中的內容將進入AL
。
來源:A tutorial on Register Allocation by Puzzle Solving(上compilers.cs.ucla.edu)
優秀的答案,謝謝! – 2013-04-08 23:16:06
不客氣;) – Jean 2013-04-09 07:06:14
'CL'只是訪問ECX'的'數位的便捷方式,他們是相同的寄存器 – Linuxios 2013-04-08 01:37:55
推ECX將推動CL的8位。將它彈出到EAX中會將這8位複製到AL中。 – 2013-04-08 01:49:08
@Linuxios&Hans Passant - 好的歡呼傢伙我明白你的意思了。非常感謝 – 2013-04-08 01:52:47