1. 程式人生 > >組合語言--32位暫存器詳解

組合語言--32位暫存器詳解

組合語言–32位暫存器詳解

1. 暫存器概述(16個):

  1. 4個數據(通用)暫存器:(EAX、EBX、ECX、EDX)。
    
  2. 6個段暫存器:(ES、CS、SS、DS、FS、GS)。
    
  3. 2個變址暫存器:(ESI、EDI)。
    
  4. 2個指標暫存器(ESP、EBP)。
    
  5. 1個指令指標暫存器:EIP。
    
  6. 1個標誌暫存器:  EFlags。
    

2.資料暫存器

32位CPU有4個32位通用暫存器:EAX、EBX、ECX和EDX。8086CPU下的16位暫存器分別為AX、BX、CX和DX。
這4個16位暫存器又可分割成8個獨立的8位暫存器(AX

: ah、al BX:bh、bl CX:ch、cl DX:dh、dl)。

  • AX和al通常稱為累加器,累加器可用於乘、除、輸入/輸出等操作, 它們的使用頻率很高。

  • BX稱為基地址暫存器,它可作為儲存器指標來使用。

  • CX稱為計數暫存器,在迴圈和字串操作時,要用它來控制迴圈次數;在位操作中,當移多位時,要用cl來 指明位移的位數。

  • DX稱為資料暫存器,在進行乘、除運算時,它可以為預設的運算元參與運算,也可用於存放I/O的埠地址。

    在16位CPU中,AX、BX、CX和DX不能作為基址和變址暫存器來存放儲存單元的地址,但在32位CPU中,其32位暫存器EAX、EBX、ECX和EDX不僅可傳送資料、暫存資料、儲存算術邏輯運算結果,而且也可作為指標暫存器,所以,這些32位暫存器更具有通用性。

3.段暫存器

32位CPU有6個段暫存器,分別如下:
CS:程式碼段暫存器 ES:附加段暫存器
DS:資料段暫存器 FS:附加段暫存器
SS:堆疊段暫存器 GS:附件段暫存器
在16位CPU系統中,只有4個段暫存器(CS、DS、ES、SS)。

4.變址暫存器

32位CPU有2個32位通用暫存器ESI和EDI,其低16位對應8086CPU中的SI和DI,對低16位資料的存取,不影響高16位的資料。
ESI、EDI、SI和DI稱為變址暫存器,它們主要用於存放儲存單元在段內的偏移量,用它們可實現多種儲存器。

5.指標暫存器

32位CPU有2個32位通用暫存器EBP和ESP,其低16位對應先前CPU中的BP和SP,對低16位資料的存取,不影響高16位的資料。
EBP、ESP、BP和SP稱為指標暫存器,主要用於存放堆疊記憶體儲單元的偏移量,用它們可實現多種儲存器。

  • BP為基指標暫存器,用它可直接存取堆疊中的資料。
  • SP為堆疊指標暫存器,用它只可訪問棧頂。

6.指令指標暫存器

32位CPU把指令指標擴充套件到32位,並記作EIP,EIP的低16位與先前CPU中的IP作用相同。
指令指標EIP、IP是存放下次將要執行的指令在程式碼段的偏移地址。

7.標誌暫存器

在這裡插入圖片描述

8、 32位地址的定址方式

注意:在用16位暫存器來訪問儲存單元時,只能使用基地址暫存器(BX和BP)和變址暫存器(SI和DI)來作為偏移地址的一部分,但在用32位暫存器定址時,不存在上述限制,所有32位暫存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、和ESP)都可以是偏移地址的一個組成部分。

比如,指令:mov ebx, [eax+edx*2+300]
eax就是基址暫存器,edx就是變址暫存器,300H就是偏移常量。

注意:

  1. 地址中暫存器的書寫順序決定該暫存器是基址暫存器還是變址暫存器。如:[ebx+ebp]中的ebx是基址暫存器,ebp是變址暫存器,而[ebp+ebx]中的ebp是基址暫存器,ebx是變址暫存器,可以看出,左邊那個是基址暫存器,另一個是變址暫存器。

  2. 預設段暫存器的選用取決於基址暫存器。

  3. 基址暫存器是ebp或esp時,預設的段暫存器是SS,否則,預設的段暫存器是DS。

  4. 在指令中,如果顯式地給出段暫存器,那麼顯式段暫存器優先。