計(jì)算機(jī)組成原理與匯編語(yǔ)言課件第4章_第1頁(yè)
計(jì)算機(jī)組成原理與匯編語(yǔ)言課件第4章_第2頁(yè)
計(jì)算機(jī)組成原理與匯編語(yǔ)言課件第4章_第3頁(yè)
計(jì)算機(jī)組成原理與匯編語(yǔ)言課件第4章_第4頁(yè)
計(jì)算機(jī)組成原理與匯編語(yǔ)言課件第4章_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

4.3 80x86

CPU的指令系統(tǒng)80x86

CPU的指令集是在8086/8088

CPU的指令系統(tǒng)上發(fā)展起來(lái)的。8086/8088

指令系統(tǒng)是基本指令集,80286、80386、80486和Pentium指令系統(tǒng)是在基本指令集上進(jìn)行了擴(kuò)充。擴(kuò)充指令的一部分是增強(qiáng)的8086/8088基本指令和一些專用指令;另一部分是系統(tǒng)控制指令,即特權(quán)指令,它們對(duì)80286、80386、80486和Pentium保護(hù)模式的多任務(wù)、存儲(chǔ)器管理和保護(hù)機(jī)制提供了控制能力。80x86CPU采用了變字長(zhǎng)的機(jī)器指令格式,由1~15個(gè)字節(jié)組成一條指令。一般格式如下圖所示:本節(jié)先介紹80x86的尋址方式,然后著重介紹用于運(yùn)行應(yīng)用程序的80x86指令。4.3.1

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

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

AL,5MOV

AX,0B064HMOV

BX,"

AB

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

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

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

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

Factor)

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

基地址+(變址量·

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

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

1000H

]這條指令完成將當(dāng)前數(shù)據(jù)段偏移1000H個(gè)字節(jié)的字單元內(nèi)容

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

EA是1000H。“MOD

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

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

BX,VARMOV

DA_BYTE,0FHMOVCL,DA+3

;把由DA地址偏移3個(gè)字節(jié)的字節(jié)單元內(nèi)容送到CL中上述3條指令分別等價(jià)于:MOV

BX,DS:VARMOV

DS:DA_BYTE,0FHMOV

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

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

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

CH,[SI]MOV

[DI],BXMOV

AL,[BX]MOV

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

CH,DS:[SI]MOV

DS:[DI],BXMOV

AL,DS:[BX]MOV

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

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

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

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

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

AX,ARY[SI]可用來(lái)訪問(wèn)數(shù)組中的元素,指令中的符號(hào)地址ARY指向該數(shù)組的首址;變址寄存器SI的內(nèi)容表示所訪問(wèn)元素與數(shù)組首址之間的字節(jié)距離,則所訪問(wèn)元素的有效地址:EA=

ARY的偏移地址+(

SI)當(dāng)SI內(nèi)容為0時(shí),將訪問(wèn)ARY(0)元素;

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

Indexed

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

個(gè)地址分量之和:基址寄存器內(nèi)容、變址寄存器內(nèi)容與指令中的

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

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

AX,ARRAY[BP][SI];位移量為符號(hào)地址ARRAY的16位偏移地址,默認(rèn)段寄存器為SSMOV

[BP][DI],DL;位移量為0,EA=(BP)+(DI),默認(rèn)段寄存器為SS由于基址變址尋址方式中有兩個(gè)地址分量可以在程序執(zhí)行過(guò)程中進(jìn)行修改,因此常用來(lái)訪問(wèn)存放在主存中的二維數(shù)組?!纠?-8】如右圖所示,

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論