寄存器各自的作用


寄存器的用途

  • 可將寄存器內的數據執行算術及邏輯運算。
  • 存於寄存器內的地址可用來指向內存的某個位置,即尋址。
  • 可以用來讀寫數據到電腦的周邊設備。

ESP EBP ESI EDI 它們可以像數據寄存器一樣在運算過程中存放操作數,但它們只能使用16位。其實他們通常的用途是在段內尋址時提供偏移地址。

寄存器 作用
EAX 累加器,算數運算的主要寄存器。
ECX 計數器,在循環指令和傳處理指令中當作計數器。
EDX 數據寄存器,一般在做雙字長運算時把 EDX 和 EAX 組合在一起放一個雙字長數,EDX用來存放高位數字。
EBX 通常作為內存偏移指針使用(相對於EAX、ECX、EDX)基址寄存器。
EBP

基址指針寄存器,可作為堆棧區中的基值地址以便訪問堆棧中的其他信息。這也是一個作為指針的寄存器。通常,它被高級語言編譯器用以建造‘堆棧幀’來保存函數或過程的局部變量

EBP:用來表示

  參數     [ebp+0x4*(n+1)] n表示第幾個參數

  局部變量   [ebp-0x4*n] n表示第幾個局部變量

ESP 堆棧指針寄存器,表示棧頂的偏移地址。記錄當前堆棧的使用情況(用到哪兒了)
ESI 變址寄存器,原地址指針寄存器,一般與 EDS配合使用,有自動增減量的功能。MOVS指令中的源地址指針
EDI 變址寄存器,目的地址指針寄存器,一般與 EDS 配合使用,有自動增減量的功能。MOVS指令中的目的地址指針
EIP 指向CPU當前執行的代碼位置
那現在來講講我們 脫殼時候經常看到了PUSHAD和POPAD
PUSHAD是將 8 個32位通用寄存器的內容順序入棧。入棧順序是EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
這時候入棧的ESP數據是執行PUSHAD之前的值。執行該指令后,ESP 值減 32 (十進制32)

POPAD是將當前堆棧內容順序彈出,ESP 也恢復原來的值,即加32。然后是PUSHA與POPA,其實都一樣,只不過就是16位的。
入棧順序是:AX,CX,DX,BX,SP,BP,SI,DI,執行完成后同樣SP 值減 16 (十進制16)POPA也是和32位一樣,只不過SP不是加32,而是加16。
 

6個段寄存器

6個段寄存器,分別是干什么的?
CS 代碼段(存放代碼段的段地址)
DS 數據段(存放數據段的段地址)
ES 附加數據段
SS 堆棧段(存放堆棧段的段地址)
FS 附加段
GS 附加段

標志寄存器

我們通常看他們的值來控制跳轉成功與否。他們受到比較與運算的影響來變換數值,從而讓跳轉成功或失敗。

C 進位標志,記錄運算結果的符號,結果為負數時則1,否則 0
P 奇偶標志,用來為機器中傳送信息時可能產生的代碼出錯情況聽歌檢驗條件。當結果操作數中 1 的個數為偶數時置 1,否則置 0
A 輔助進位標志位
Z 零標志,運算結果為 0 時 ZF 位置 1,否則置 0
S 符號標志,記錄運算結果的符號,結果為負時置 1,否則置 0
T 中斷允許標志位,由  CLI,STI 兩條指令來控制
D 向量標志位,由  CLD,STD  兩條指令來控制
O 溢出標志,在操作數超出了計算能表示的范圍稱為溢出

 尋址

然后我們說說“尋址”的那些事
立即尋址,這種尋址方式下,操作數以常量的形式出現在指令中
比如下圖,JMP Shark恆.00513426
意思是無條件跳轉到內存00513426處,其中00513426是立即數。這叫做立即尋址。

存儲器尋址分為直接尋址與間接尋址。
直接尋址是帶方括號的常量或是變量。DS是操作數默認的段寄存器。
如下圖所示,BA520073處的內容與ah寄存器相加后,結果給BA520073

寄存器間接尋址
下圖內容是DS為數據段段地址,edi寄存器的內容為偏移地址,與al做比較。

寄存器相對尋址
什么是相對尋址? 就是在間接尋址的基礎上和立即數做一個加法運算。請看下圖

基址變址尋址
也很容易理解,就是基址+變址在方括號里,如下圖
什么是基址,什么是變址,我們在剛才講過了,可以向上看。

相對基址變址尋址
這名字真長啊,不過也很好理解。
還記得剛才的寄存器相對尋址嗎?方括號內有個立即數與寄存器做加法,就叫寄存器相對尋址。如果沒有立即數做加法,那就叫寄存器間接尋址。
然后結合我們剛才的基址變址尋址,我們在與一個立即數做加法,請看下圖。

前面2個寄存器相加,我們學過了,叫基址變址尋址,然后又加上一個立即數,我們管他叫“相對”,那3個在一起,就是“相對基址變址尋址”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM