計算機組成原理與匯編語言課件第4章_第1頁
計算機組成原理與匯編語言課件第4章_第2頁
計算機組成原理與匯編語言課件第4章_第3頁
計算機組成原理與匯編語言課件第4章_第4頁
計算機組成原理與匯編語言課件第4章_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

4.3 80x86

CPU的指令系統80x86

CPU的指令集是在8086/8088

CPU的指令系統上發展起來的。8086/8088

指令系統是基本指令集,80286、80386、80486和Pentium指令系統是在基本指令集上進行了擴充。擴充指令的一部分是增強的8086/8088基本指令和一些專用指令;另一部分是系統控制指令,即特權指令,它們對80286、80386、80486和Pentium保護模式的多任務、存儲器管理和保護機制提供了控制能力。80x86CPU采用了變字長的機器指令格式,由1~15個字節組成一條指令。一般格式如下圖所示:本節先介紹80x86的尋址方式,然后著重介紹用于運行應用程序的80x86指令。4.3.1

80x86尋址方式指令中的尋址方式是用來確定操作數地址以找到指令所需的操作數。在80x86CPU中,8086和80286的字長是16位,一般情況下只處理8位和16位操作數,只是在乘、除指令中才會有32位操作數;80386及其后繼機型的字長為32位,因此它除可處理8位和16位操作數外,還可處理32位操作數,在乘、除法情況下可產生64位操作數。本節下面所述例子中,如處理的是32位操作數,則適用于80386及其后繼機型。1.立即尋址方式和寄存器尋址方式(1)立即尋址方式(Immediate

Addressing)立即數尋址是指指令所需的操作數直接在指令代碼中,隨著取指令一起取到CPU中。這種操作數稱為立即數。立即數可以是8位或16位的。對于80386及其后繼機型則可以是8位或32位的。這種尋址方式如下圖所示:【例4-1】下述匯編指令的源操作數都采用立即尋址方式。;將8位立即數05H送入AL中MOV

AL,5MOV

AX,0B064HMOV

BX,"

AB

"立即數用來表示常數,它經常用于給寄存器賦初值,并且只能用于源操作數字段,不能用于目的操作數字段,且源操作數長度應與目的操作數長度一致。在匯編指令中,立即數若是數值常數可直接書寫,若是字符常數則應加上引號。在匯編指令中,立即數若是以A~F開始的十六進制數,則必須在數前面加上0,如上述第二條指令,否則匯編程序會將立即數當作符號處理。寄存器尋址是指指令所需的操作數存放在CPU的寄存器(通用寄存器或段寄存器)中,通過指令中的寄存器地址去找到操作數。在匯編指令中,寄存器地址直接用寄存器名表示,如用AX、

BX、AL、BH、EAX、EBX、DS、ES等,這些寄存器可以是8位的、16位的或32位的。這種尋址方式如下圖所示:(2)寄存器尋址方式(Register

Addressing)【例4-3】MOVMOVMOVBL,AL;將AL中的內容送到BL中DS,AXECX,EDX【例4-2】指令“MOVAX,BX”的源和目的操作數都采用寄存器尋址方式,該指令完成將BX中的內容送到AX中。如指令執行前(AX)=3064H,(BX)=1234H;則指令執行后,(AX)=1234H,(BX)保持不變。2.存儲器尋址方式在匯編語言程序中,一個存儲單元的地址采用邏輯地址來表示,其形式為:段基值(或選段擇器):偏移地址操作數地址(物理地址)是根據段基值(或段選擇器)和偏移地址通過一定的方法得到。段基址在實模式和保護模式下可從不同的途徑取得。偏移地址是指存放操作數的存儲單元與段起始地址(段基址)之間的字節距離。在80x86里,把按尋址方式計算出來的操作數偏移地址稱為有效地址EA(Effective

Address)。存儲器操作數的尋址方式不同,則形成有效地址EA的方法就不同。有效地址EA可以由4個地址分量的某種組合求得,它們分別是:①位移量它是指令代碼中的一個8位、16位或32位二進制數,但它不是立即數,而是一個地址量。在源程序中,位移量通常以符號地址(變量名或標號)的形式出現,也可以是常數,經匯編后,這些符號地址的偏移地址或常數就轉換為指令代碼中的位移量。②基地址即基址寄存器或基址指針的內容。③變址量即變址寄存器的內容。④比例因子(Scale

Factor)

它是80386及其后繼機型新增加的尋址方式中的一個術語,其值可為1,2,4或8。在含比例因子的尋址方式中,可用變址寄存器的內容乘以比例因子來取得變址值。地址分量16位尋址32位尋址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通用寄存器(包括ESP)變址寄存器SI,DI除ESP以外的32位通用寄存器比例因子無1,2,4,88086/80286只能使用16位尋址,而80386及其后繼機型則既可用32位尋址,也可用16位尋址。在這兩種情況下,對以上4個地址分量的組成有不同的規定,如下表所示:16/32位尋址時有效地址4種分量的組成對不同的存儲器尋址方式,構成其有效地址EA的地址分量是不同的,但這些尋址方式的有效地址的計算都可以用下式表示:EA=

基地址+(變址量·

比例因子)+位移量:上式中的每一個地址分量均可空缺,但比例因子只能與變址寄存器同時使用。下面具體討論6種存儲器尋址方式。(1)直接尋址方式(Direct

Addressing)直接尋址是指指令所需的操作數存放在存儲單元中,操作數的有效地址EA直接由指令代碼中的位移量提供,即EA只包含位移量這一種地址分量。此時,位移量的值就是操作數的有效地址,如下圖所示①用數值地址表示EA在采用直接尋址方式的匯編指令中,如用數值表示操作數的有效地址,則操作數所在段的段寄存器必須指明,不能省略。例如,傳送指令源操作數的有效地址用數值地址表示:MOV BX,DS:[

1000H

]這條指令完成將當前數據段偏移1000H個字節的字單元內容

1234H送入BX中,如上圖所示,其中源操作數的有效地址

EA是1000H。“MOD

R/M”是指令代碼中的尋址字段。②用符號地址表示EA

在源程序中,常用符號地址表示存放操作數的存儲單元,因此在匯編指令中,可用符號地址表示的直接尋址方式來存取操作數。操作數如果存放在數據段中,則指令中不必給出數據段寄存器名(即默認使用DS);如果操作數不是存放在數據段中,則必須給出段寄存器名。例如:;將VAR指向的字單元內容送到BX中;將立即數0FH置入DA_BYTE指向的字節單元MOV

BX,VARMOV

DA_BYTE,0FHMOVCL,DA+3

;把由DA地址偏移3個字節的字節單元內容送到CL中上述3條指令分別等價于:MOV

BX,DS:VARMOV

DS:DA_BYTE,0FHMOV

CL,DS:DA+3(2)寄存器間接尋址方式(Register

IndirectAddressing)寄存器間接尋址是指指令所需的操作數在存儲單元中,操作數的有效地址EA直接從基址寄存器或變址寄存器中獲得,即

EA是包含基址寄存器內容(或變址寄存器內容)的一個地址分量。這種尋址方式如下圖所示:這種尋址方式實際上是將有效地址事先存放在一個寄存器中,因此這個寄存器就如同一個地址指針。由于用寄存器作為地址指針,因此在程序中只要修改間址寄存器的內容,就可以用同一條指令訪問不同的存儲單元。這種尋址方式的使用格式如下:MOV

CH,[SI]MOV

[DI],BXMOV

AL,[BX]MOV

CX,[BP]上述指令分別等價于:MOV

CH,DS:[SI]MOV

DS:[DI],BXMOV

AL,DS:[BX]MOV

CX,SS:[BP]寄存器尋址方式在16位尋址時可用的寄存器是BX、BP、SI和DI;在32位尋址時可用EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI等8個通用寄存器。凡使用BP、ESP和EBP時,其默認段為SS段。其他寄存器的默認段為DS寄存器。(3)寄存器相對尋址方式(Register

RelativeAddressing)(也稱變址尋址方式或基址尋址方式)指令所需的操作數在存儲單元中,操作數的有效地址EA是兩個地址分量之和:基址寄存器(或變址寄存器)的內容與指令中指定的位移量之和。這種尋址方式如下圖所示:這種尋址方式若使用的是變址寄存器稱為變址尋址方式;若使用的是基址寄存器稱為基址尋址方式。它所允許使用的寄存器及與其對應的默認段情況與寄存器間接尋址方式中所說明的相同。在匯編指令中,位移量部分可用數值表示,也可用符號地址表示(此時用符號地址的偏移地址作為位移量),其尋址方式的使用格式如下:MOV

AX,10H[SI];位移量為8位常數,EA=10H+(SI),默認段寄存器DSMOV

TAB1[BP],CL;位移量為符號地址TAB1的16位偏移地址,默認段寄存器是SS寄存器相對尋址方式常用來訪問順序存放在主存中的一維數組、表、字符串等。其典型用法是將指令中不能修改的位移量作為基準地址,而將變址或基址寄存器內容作為修改量。例如數組的起始單元位置是固定的,因此由指令中的位移量給出;而被訪問的數組元素相對其起始單元的距離由變址或基址寄存器提供,通過修改寄存器的內容就可以訪問數組中不同的元素。【例4-4】如右圖所示,一維數組ARY存放在主存的數據段中,數組的每個元素長度相同且都占2個字節單元。從數組的首址起依次存放各數組元素ARY(0)、

ARY(1)、ARY(2)…、ARY(i)、…。傳送指令:MOV

AX,ARY[SI]可用來訪問數組中的元素,指令中的符號地址ARY指向該數組的首址;變址寄存器SI的內容表示所訪問元素與數組首址之間的字節距離,則所訪問元素的有效地址:EA=

ARY的偏移地址+(

SI)當SI內容為0時,將訪問ARY(0)元素;

SI內容為1*2時訪問ARY(1)元素;SI內容為i*2時訪問ARY(i),即通過修改SI的內容可以訪問數組中任何一個元素。右圖給出了訪問數組元素ARY(2)的尋址過程。用寄存器相對尋址方式訪問一維數組(4)基址變址尋址方式(Based

Indexed

Addressing)指令所需的操作數在主存單元中,操作數的有效地址EA是三

個地址分量之和:基址寄存器內容、變址寄存器內容與指令中的

位移量(0位、8位、16位或32位)之和,稱為基址變址尋址方式,如下圖所示:基址變址尋址方式的位移量可用數值或符號地址表示,其使用格式如下:MOV

AX,200H[BX][SI];位移量為16位常數,EA=200H+(BX)+(SI),默認段寄存器為DSMOV

AX,ARRAY[BP][SI];位移量為符號地址ARRAY的16位偏移地址,默認段寄存器為SSMOV

[BP][DI],DL;位移量為0,EA=(BP)+(DI),默認段寄存器為SS由于基址變址尋址方式中有兩個地址分量可以在程序執行過程中進行修改,因此常用來訪問存放在主存中的二維數組。【例4-8】如右圖所示,

ARRAY數組是10行、10列的二維數組,按行存放在主存堆棧段中。從數組的首址ARRAY起依次存放各數組元素:第0行元素為ARRAY(0,0)~ARRAY(0,9)共10個,第1行元

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論