組合語言從入門到精通 通用暫存器功能的說明

2022-02-21 21:36:15 字數 2585 閱讀 3343

1、資料暫存器

資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需占用匯流排和訪問儲存器的時間。

32位cpu有4個32位的通用暫存器eax、ebx、ecx和edx。對低16位資料的訪問,不會影響高16位的資料。這些低16位暫存器分別命名為:ax、bx、cx和dx,它和先前的cpu中的暫存器相一致。

4個16位暫存器又可分割成8個獨立的8位暫存器(ax:ah-al、bx:bh-bl、cx:ch-cl、dx:dh-dl),每個暫存器都有自己的名稱,可獨立訪問。程式設計師可利用資料暫存器的這種「可分可合」的特性,靈活地處理字/位元組的資訊。

暫存器ax和al通常稱為累加器(accumulator),用累加器進行的操作可能需要更少時間。累加器可用於乘、除、輸入/輸出等操作,它們的使用頻率很高;

暫存器bx稱為基位址暫存器(base register)。它可作為儲存器指標來使用;

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

暫存器dx稱為資料暫存器(data register)。在進行乘、除運算時,它可作為預設的運算元參與運算,也可用於存放i/o的埠位址。

在16位cpu中,ax、bx、cx和dx不能作為基址和變址暫存器來存放儲存單元的位址,但在32位cpu中,其32位暫存器eax、ebx、ecx和edx不僅可傳送資料、暫存資料儲存算術邏輯運算結果,而且也可作為指標暫存器,所以,這些32位暫存器更具有通用性。詳細內容請見第3.8節——32位位址的定址方式。

2、變址暫存器

32位cpu有2個32位通用暫存器esi和edi。其低16位對應先前cpu中的si和di,對低16位資料的訪問,不影響高16位的資料。

暫存器esi、edi、si和di稱為變址暫存器(index register),它們主要用於存放儲存單元在段內的偏移量,用它們可實現多種儲存器運算元的定址方式(在第3章有詳細介紹),為以不同的位址形式訪問儲存單元提供方便。

變址暫存器不可分割成8位暫存器。作為通用暫存器,也可儲存算術邏輯運算的運算元和運算結果。

它們可作一般的儲存器指標使用。在字串操作指令的執行過程中,對它們有特定的要求,而且還具有特殊的功能。具體描述請見第5.2.11節。

3、指標暫存器

32位cpu有2個32位通用暫存器ebp和esp。其低16位對應先前cpu中的sbp和sp,對低16位資料的訪問,不影響高16位的資料。

暫存器ebp、esp、bp和sp稱為指標暫存器(pointer register),主要用於存放堆疊內儲存單元的偏移量,用它們可實現多種儲存器運算元的定址方式(在第3章有詳細介紹),為以不同的位址形式訪問儲存單元提供方便。

指標暫存器不可分割成8位暫存器。作為通用暫存器,也可儲存算術邏輯運算的運算元和運算結果。

它們主要用於訪問堆疊內的儲存單元,並且規定:

bp為基指標(base pointer)暫存器,用它可直接訪問堆疊中的資料;

sp為堆疊指標(stack pointer)暫存器,用它只可訪問棧頂。

4、段暫存器

段暫存器是根據記憶體分段的管理模式而設定的。記憶體單元的實體地址由段暫存器的值和乙個偏移量組合而成的,這樣可用兩個較少位數的值組合成乙個可訪問較大物理空間的記憶體位址。

cpu內部的段暫存器:

cs——**段暫存器(code segment register),其值為**段的段值;

ds——資料段暫存器(data segment register),其值為資料段的段值;

es——附加段暫存器(extra segment register),其值為附加資料段的段值;

ss——堆疊段暫存器(stack segment register),其值為堆疊段的段值;

fs——附加段暫存器(extra segment register),其值為附加資料段的段值;

gs——附加段暫存器(extra segment register),其值為附加資料段的段值。

在16位cpu系統中,它只有4個段暫存器,所以,程式在任何時刻至多有4個正在使用的段可直接訪問;在32位微機系統中,它有6個段暫存器,所以,在此環境下開發的程式最多可同時訪問6個段。

32位cpu有兩個不同的工作方式:實方式和保護方式。在每種方式下,段暫存器的作用是不同的。有關規定簡單描述如下:

實方式:

前4個段暫存器cs、ds、es和ss與先前cpu中的所對應的段暫存器的含義完全一致,記憶體單元的邏輯位址仍為「段值:偏移量」的形式。為訪問某記憶體段內的資料,必須使用該段暫存器和儲存單元的偏移量。

保護方式:

在此方式下,情況要複雜得多,裝入段暫存器的不再是段值,而是稱為「選擇子」(selector)的某個值。段暫存器的具體作用在此不作進一步介紹了,有興趣的讀者可參閱其它科技資料。

5、指令指標暫存器

32位cpu把指令指標擴充套件到32位,並記作eip,eip的低16位與先前cpu中的ip作用相同。

指令指標eip、ip(instruction pointer)是存放下次將要執行的指令在**段的偏移量。在具有預取指令功能的系統中,下次要執行的指令通常已被預取到指令佇列中,除非發生轉移情況。所以,在理解它們的功能時,不考慮存在指令佇列的情況。

在實方式下,由於每個段的最大範圍為64k,所以,eip中的高16位肯定都為0,此時,相當於只用其低16位的ip來反映程式中指令的執行次序。

組合語言 通用暫存器

通用暫存器的主要用途 暫存器的分類 暫存器主 要 用 途 通 用暫存器 資料 暫存器 ax乘 除運算,字的輸入輸出,中間結果的快取 al位元組的乘 除運算,位元組的輸入輸出,十進位制算術運算 ah位元組的乘 除運算,存放中斷的功能號 bx儲存器指標 cx串操作 迴圈控制的計數器 cl移位操作的計數器...

組合語言 暫存器

乙個典型的cpu由運算器 控制器 暫存器等器件組成,這些器件靠內部匯流排相連。通用暫存器 ax bx cx dx 段位址暫存器 cs ds es ss 專用暫存器 bp sp si di 指令指標暫存器 ip 標誌暫存器 psw ah al ax accumulator 累加暫存器 bh bl bx...

組合語言 暫存器

乙個cpu由暫存器,運算器,控制器組成,暫存器負責儲存資料。通用暫存器 ax,bx,cx,dx。8086cpu的暫存器都是16位的,能存放兩個位元組。乙個暫存器又能分為兩個部分,乙個高位位元組如ah,還有乙個地位位元組如al。這兩個部分可以單獨看成乙個八位暫存器來用。當暫存器當整體來看時,它可以進行...