1. 程式人生 > >X86的通用暫存器簡要說明

X86的通用暫存器簡要說明

1.EAX暫存器也成為累加器,用於協助執行一些常見的運算操作以及用於傳遞函式呼叫的返回值。在X86指令集中很多經過優化的指令會有限將資料寫入或讀出EAX暫存器,,在對資料進行進一步運算操作。大多數運算如:加法,減法和比較運算都會藉助使用EAX暫存器來打到指令優化的效果。還有一些特殊的指令如:乘法和除法則必須在EAX暫存器中進行。

2.EDX是一個數據暫存器。這個暫存器可以被認為是EAX暫存器的延伸部分,用於協助一些更為複雜的運算指令,如:乘法和除法,EDX被用於儲存這些指令操作的額外資料結果。EDX也可以用於通用的目的的資料儲存,但最常見的用法還是和EAX一起使用,用於協助複雜的運算。

3.EXC被成為計數器,用於支援迴圈操作。儲存一個字串或者進行計數就是典型的迴圈操作。需要特別注意的是ECX暫存器通常是反響計數的,而非是正向計數。

4.ESI被成為源變址暫存器,這個暫存器儲存這輸入資料流的位置資訊。EDI暫存器則指向相關資料操作存放的位置,我們稱其為目的變址暫存器。這2個暫存器主要涉及到資料處理的迴圈操作。可以簡記為ESI用於“讀”,EDI用於“寫”。在資料操作中使用源變址暫存器和目的變址暫存器可以極大的提高程式執行效率。

5.ESP和EBP暫存器分別被成為棧指標和基址指標。這些暫存器用於控制函式呼叫和相關棧操作。當一個函式被呼叫時,呼叫引數連同函式的返地址將先後被壓入函式棧中。ESP暫存器始終指向函式棧的最頂端,有由此不難推出在呼叫函式過程中的某一時刻,ESP指向了函式的返回地址。EBP暫存器被用於指向函式棧的最低端。在某些情況下,編譯器為了指令優化的目的可能會避免將EBP暫存器棧幀指標。在這種情況下,被“釋放”出來的EBP暫存器可以想其他暫存器一樣另作他用。

6.EBX是唯一一個沒有被指定特殊用途的暫存器。

7.最後一個應該提及的是EIP暫存器。這個暫存器始終指向了當前正在執行的指令。當CPU穿行於二進位制程式碼中時,EIP暫存器中的值隨之更新以時時反映當前程式碼鎖執行到的位置。

PS:原文來自《Python》灰帽子~