微處理器原理及應(yīng)用- 第三章 尋址方式與指令系統(tǒng)教材_第1頁
微處理器原理及應(yīng)用- 第三章 尋址方式與指令系統(tǒng)教材_第2頁
微處理器原理及應(yīng)用- 第三章 尋址方式與指令系統(tǒng)教材_第3頁
微處理器原理及應(yīng)用- 第三章 尋址方式與指令系統(tǒng)教材_第4頁
微處理器原理及應(yīng)用- 第三章 尋址方式與指令系統(tǒng)教材_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章尋址方式與指令系統(tǒng)3.1數(shù)據(jù)類型及其存儲規(guī)則3.1.1基本數(shù)據(jù)類型及存儲

一個(gè)存儲單元——一個(gè)字節(jié)占用內(nèi)存的一個(gè)地址?;緮?shù)據(jù)類型:字、雙字、四字、雙四字字——兩個(gè)相鄰字節(jié)組成的16位二進(jìn)制;雙字——4個(gè)相鄰字節(jié)組成的32位二進(jìn)制數(shù);四字——8個(gè)相鄰字節(jié)組成的64位二進(jìn)制數(shù);雙四字——16個(gè)相鄰字節(jié)組成的128位二進(jìn)制數(shù)。高低高字低字高雙字低雙字字節(jié)字雙字四字高四字低四字雙四字707015815

031

1631

063

3263

0127

64NNN+1NN+2NN+4NN+8圖3.1基本數(shù)據(jù)類型的結(jié)構(gòu)形式9CH48H2BH6AH7AH1AHC3H23H72H92H8BH3AHABHA2H12H45H…NN+1N+2N+3N+4N+5N+6N+7N+8N+9N+10N+11N+12N+13N+14N+15單元地址圖3.2基本數(shù)據(jù)類型存儲規(guī)律

3.1.2數(shù)字?jǐn)?shù)據(jù)類型數(shù)據(jù)類型包含:無符號整數(shù)、帶符號整數(shù)和浮點(diǎn)數(shù)。1.無符號整數(shù)(范圍:0~2n-1)2.帶符號整數(shù)(范圍:-2n-1~+2n-1-1)帶符號整數(shù)是用2的補(bǔ)碼表示的二進(jìn)制值。規(guī)定操作數(shù)的最高位為符號位。3.浮點(diǎn)數(shù)浮點(diǎn)數(shù)據(jù)類型可分為三種:單精度浮點(diǎn)、雙精度浮點(diǎn)和雙 擴(kuò)展的精度浮點(diǎn)。

3.1.3指針數(shù)據(jù)類型在實(shí)方式下有兩種類型的指針:近指針(16位)和遠(yuǎn)指針(32 位)偏移Near指針310偏移段選擇子Far指針或邏輯地址3104732(a)(b)圖3.3指針數(shù)據(jù)類型(虛擬方式)3.1.4字符串、位及位串?dāng)?shù)據(jù)類型字符串包括字節(jié)串、字串和雙字串。它們分別是字節(jié)、字和雙字的相鄰序列。707070150150150310310310字節(jié)串字串雙字串NN+1N+MNN+2N+2MNN+4N+4M………圖3.4字節(jié)、字、雙字字符串?dāng)?shù)據(jù)類型3.2計(jì)算機(jī)指令格式指令包括兩部分:指令操作碼部分和地址碼部分。指令操作碼部分是給出該指令應(yīng)完成何種操作。地址碼部分是用來描述該指令的操作對象。指令格式可分為:零地址指令、一地址指令、二地址指令和三地址指令。零地址指令:只有操作碼部分,而沒有操作數(shù)的指令;一地址指令:只有目的操作數(shù)的單操作數(shù)指令;二地址指令:有兩個(gè)地址指出兩個(gè)操作數(shù)的地址;三地址指令優(yōu)點(diǎn):操作結(jié)束后,原兩個(gè)操作數(shù)的內(nèi)容均未被破壞;缺點(diǎn):增加一個(gè)地址后,使得指令碼加長,增加了存儲空間,取指時(shí)間變長。

3.2.1指令的助記符格式助記符格式可用以下通式表示:L:opD1,D2,D3其中:L是標(biāo)號,在標(biāo)識符后面跟有冒號(:)

op是助記符,具有相同功能的指令操作碼的保留名例如:

MOV

AX,[BX]操作碼的助記符目的操作數(shù)源操作數(shù)3.2.280x86指令編碼格式指令編碼格式包含操作碼和操作數(shù)兩部分。操作碼表示計(jì)算機(jī)執(zhí)行什么操作。操作數(shù)指明參與操作的數(shù)的本身,或規(guī)定了操作數(shù)的地址。圖3.58086CPU指令編碼的一般形式1)操作碼字節(jié)它是指令的第一字節(jié),規(guī)定指令的操作類型,是指令的必選字節(jié),字節(jié)內(nèi)容如下:

D7D6D5D4D3D2D1D0

操作碼字節(jié)尋址方式字節(jié)偏移量字節(jié)(1/2)立即數(shù)字節(jié)(1/2)OPDW

OP:表示指令操作碼,

D:表示指令中數(shù)據(jù)傳送的方向。

W:表示操作數(shù)類型。

2)尋址方式字節(jié)。它是指令的第二字節(jié),規(guī)定操作數(shù)的尋址方式。是指令的可選字節(jié),字節(jié)內(nèi)容如下:

D7D6D5D4D3D2D1D0

MOD:表示方式域,D7、D6位能表示4種不同的方式。

REG:表示寄存器域,D5、D4、D3位能表示8種不同的寄存器。

R/M:表示寄存器/存儲器域,D-2、D1、D0位能表示8種不同的寄存器/存儲器。MODREGR/M表3-1mod與r/m域所組合的尋址方式

MODR/M存儲器尋址寄存器尋址邏輯地址的計(jì)算公式W=0W=1MOD=00B

MOD=01BMOD=10BMOD=11B000001010011100101110111DS:[BX+SI]DS:[BX+DI]SS:[BP+SI]SS:[BP+DI]DS:[SI]DS:[DI]DS:[disp16]Ds:[BX]DS:[BX+SI+disp8]DS:[BX+DI+disp8]SS:[BP+SI+disp8]SS:[BP+DI+disp8]DS:[SI+disp8]DS:[DI+disp8]DS:[disp16+disp8]Ds:[BX+disp8]DS:[BX+SI+disp16]DS:[BX+DI+disp16]SS:[BP+SI+disp16]SS:[BP+DI+disp16]DS:[SI+disp16]DS:[DI+disp16]DS:[disp16+disp16]Ds:[BX+disp16]ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDI3)

偏移量字節(jié)是指令的第三、四字節(jié),是指令的可選字節(jié),給出了存儲器操作數(shù)的偏移量。4)

立即數(shù)字節(jié)是指令的可選字節(jié),給出了指令的立即數(shù)。3.38086CPU的尋址方式

尋址方式——尋找指令或操作數(shù)存放地址的方法。兩種尋址方式:一種是用來對操作數(shù)進(jìn)行尋址;另一種是 用來對轉(zhuǎn)移地址或調(diào)用地址進(jìn)行尋址,即 對指令地址進(jìn)行尋址。3.3.1操作數(shù)的尋址方式1、立即尋址立即數(shù)尋址特點(diǎn):指令執(zhí)行速度快。立即數(shù)只能是整數(shù),且只能作為源操作數(shù)。圖3-6立即數(shù)尋址過程代碼段1234┇MOVAX,3412H的指令代碼34AXAH

AL操作碼122、寄存器尋址方式寄存器尋址方式的優(yōu)點(diǎn):不但可以減少指令碼的長度,而且由 于操作數(shù)已存于寄存器中,執(zhí)行速度 較快。寄存器既能作為源操作數(shù),又能作為目的操作數(shù)。例如:MOVAX,CX

該指令將CX(源操作數(shù))的內(nèi)容傳送到AX寄存器(目的操作數(shù))中,其中源操作數(shù)CX,目的操作數(shù)AX都是寄存器尋址方式。

3、存儲器尋址指令給出了操作數(shù)在數(shù)據(jù)區(qū)中的地址信息。五種不同的存儲器尋址方式:(1)直接尋址方式例如:MOVAX,[7834H]

該指令將有效地址EA=8064H單元中的內(nèi)容傳送到AX寄存器中。若(DS)=2000H,則該指令源操作數(shù)的存儲單元的物理地址為20000H+7834H=27834H。代碼段操作碼34數(shù)據(jù)段┇2000DS20000+783427834

34

12AXMOVAX,[7834H]指令代碼┇78┇┇1234圖3-7直接尋址方式尋址過程(2)寄存器間接尋址操作數(shù)存放在存儲單元中。注意兩點(diǎn):一是寄存器中的內(nèi)容是操作數(shù)的有效地址,而不是 操作數(shù)本身; 二是只能用CPU中的基址寄存器BX、BP或變址寄存器 DI、SI來間接尋址。如果指令前面沒有用前綴指令指明操作數(shù)在哪一段,則通常默認(rèn)段寄存器為DS。即:物理地址=[DS]×10H+EA=[DS]×10H+或物理地址=[SS]×10H+[BP]例如:MOVAX,[DI]代碼段操作碼數(shù)據(jù)段1234┇┇1

2

3

4DS2

4

6

8BX12340+2468147A83412AXMOVAX,[BX]指令代碼┇圖3-8寄存器間接尋址示意圖(3)寄存器相對尋址操作數(shù)存放在存儲單元中物理地址=[DS]×10H+EA=[DS]×10H+或物理地址=[SS]×10H+[BP]例如:MOVBX,[DI+10H]基址尋址——用BX、BP為基址寄存器進(jìn)行尋址變址尋址——用SI、DI為變址寄存器進(jìn)行尋址代碼段操作碼24數(shù)據(jù)段267868┇1

2

3

4DS2

7

3

2BX12340

27321B2967826AXMOV

AX,[BX+6824H]指令代碼┇+6824┇圖3-9寄存器相對尋址操作過程(4)基址加變址尋址方式操作數(shù)存放在存儲單元中物理地址=[DS]×10H+EA=[DS]×10H+或物理地址=[SS]×10H+例如:ADDAX,[BX+SI]+1026

003412340代碼段操作碼數(shù)據(jù)段7856┇┇1

2

3

4DS1

0

2

6SI1339A5678AXMOVAX,[BX+SI]指令代碼┇0

0

3

4BX圖3-10基址加變址尋址方式操作過程(5)相對的基址和變址尋址方式操作數(shù)存放在存儲單元中物理地址=[DS]×10H+EA=[DS]×10H+或物理地址=[SS]×10H+例如:MOVAH,[BX+SI+2468H]MOVAH,[BX+SI+2468H]指令代碼

0110

010020000代碼段操作碼68數(shù)據(jù)段2623┇2

0

0

0DS0

11

0SI2267826AH┇0

1

0

0BX+246824┇圖3-11相對的基址和變址尋址方式操作過程過程4、I/O端口尋址操作數(shù)在I/O端口中。兩種編址方式:與存儲器統(tǒng)一編址方式獨(dú)立的I/O空間編址方式與存儲器統(tǒng)一編址方式,上述五種存儲器尋址方式均可采用。獨(dú)立的I/O空間編址方式則對I/O端口有兩種尋址方式:(l)直接端口尋址方式端口地址的尋址范圍是0~0FFH,端口地址直接由指令給出。(2)間接端口尋址方式端口地址的尋址范圍是0~0FFFFH,端口地址由DX寄存器給出。

3.3.2指令地址的尋址方式指令地址的尋址方式以下4種:(1)段內(nèi)直接尋址方式轉(zhuǎn)移的指令地址是由當(dāng)前的IP內(nèi)容和指令中規(guī)定的8位或16位偏移量之和給出。

+2101

0121

12340代碼段操作碼操作碼0121┇┇1

2

3

4CS14562段內(nèi)直接轉(zhuǎn)移指令代碼┇0

1

2

1IP目標(biāo)指令代碼圖3-12段內(nèi)直接尋址方式過程(2)段內(nèi)間接尋址方式轉(zhuǎn)移的指令地址是由用寄存器或一個(gè)字存儲單元的內(nèi)容給出。代碼段操作碼操作碼數(shù)據(jù)尋址方式┇┇CS段內(nèi)間接轉(zhuǎn)移指令代碼┇根據(jù)數(shù)據(jù)尋址方式計(jì)算EAIP目標(biāo)指令代碼Σ圖3-13段內(nèi)間接尋址方式過程(3)段間直接尋址方式轉(zhuǎn)移的指令地址是由指令碼字節(jié)直接給出。

3412+78560代碼段操作碼操作碼1234┇┇7856CS7B972段間直接轉(zhuǎn)移代碼┇3412IP目標(biāo)指令代碼5678圖3-14段間直接尋址過程(4)段間間接尋址方式轉(zhuǎn)移的指令地址由一個(gè)雙字存儲單元的內(nèi)容給出。

圖3-15段間間接尋址方式過程代碼段操作碼操作碼數(shù)據(jù)尋址方式┇┇段間間接轉(zhuǎn)移指令代碼┇目標(biāo)指令代碼DSCSIPΣΣ數(shù)據(jù)段┇12345678┇根據(jù)數(shù)據(jù)尋址方式計(jì)算EA3.48086指令系統(tǒng)指令系統(tǒng)按功能可分為6類:①數(shù)據(jù)傳送類指令;②算術(shù)運(yùn)算類指令;③邏輯運(yùn)算與移位類指令;④字符串指令;⑤控制轉(zhuǎn)移類指令;⑥處理器控制類指令。3.4.1數(shù)據(jù)傳送類指令分為4種:①通用數(shù)據(jù)傳送指令②累加器專用傳送指令③地址傳送指令④標(biāo)志傳送指令。1.通用數(shù)據(jù)傳送指令(1)最基本的傳送指令格式:MOV

目的操作數(shù),源操作數(shù)舉例:①M(fèi)OVBL,AL②

MOVDS,AX③

MOVDL,[DI]④MOV[BX],AX⑤

MOVDX,[1000]⑥

MOVBH,120⑦

MOVDX,1234H(2)堆棧操作指令堆棧是一種數(shù)據(jù)結(jié)構(gòu),是在內(nèi)存中開辟了一個(gè)比較特殊的存儲區(qū),這個(gè)區(qū)域中數(shù)據(jù)的存取采用“后進(jìn)先出”的原則。1000SS0018SP┇605040302010┇100181001A棧頂棧底1000SS0016SP┇605040302010┇ABCD100181001A棧頂棧底1000SS001ASP┇40302010┇1001A棧頂棧底10016圖3.16

8086系統(tǒng)椎棧及其操作(a)堆棧原始狀態(tài)(b)執(zhí)行pushAX(c)執(zhí)行POPAX

(AX)=CDABHPOPBX后的狀態(tài)(a)(b)(c)堆棧段——8086CPU在存儲器分段管理時(shí),劃分了一個(gè)專門的 堆棧區(qū)。格式:PUSH源操作數(shù)

POP目的操作數(shù)舉例:①PUSHBX②PUSHES③PUSHDS④PUSH[SI]⑤POPAX⑥POPBX⑦POSH[DI]

(3)交換指令實(shí)現(xiàn)兩個(gè)操作數(shù)之間進(jìn)行直接交換,方便程序的編寫。格式:XCHG目的操作數(shù),源操作數(shù)舉例:①XCHGAH,BL②

XCHGDX,BX③

XCHG[505H],AX2.累加器專用傳送指令累加器是8086CPU進(jìn)行數(shù)據(jù)傳輸?shù)暮诵摹S袃深愔噶睿孩佥斎耄敵鲋噶睥趽Q碼指令(1)輸入/輸出指令——工業(yè)控制中常用的指令格式:INAC,源操作數(shù)

OUT目的操作數(shù),AC舉例:①INAL,20H②OUTDX,AX

(2)換碼指令該指令用來將一個(gè)代碼值轉(zhuǎn)換成相應(yīng)的另一種代碼值,格式:XLAT代碼段D779數(shù)據(jù)段┇40┇780

3

0

0BX07

03008030707ALXLAT指令代碼┇+80000┇┇8

0

0

0DS803008030180307圖3-17

XLAT指令執(zhí)行過程舉例:若要將十進(jìn)制數(shù)0~9轉(zhuǎn)換成共陽極LED顯示的字形代碼,則列表如表3-2所示。十進(jìn)制數(shù)(BCD碼)字形代碼040H179H224H330H419H512H602H778H800H918H表3-2十進(jìn)制數(shù)0~9轉(zhuǎn)換成LED顯示的字形代碼

3.地址傳送指令它包括3條指令:①取有效地址指令LEA;②將地址指針裝入DS指令LDS;③將地址指針裝入ES指令LES。格式:LEA寄存器,源操作數(shù)

LDS寄存器,源操作數(shù)

LES寄存器,源操作數(shù)舉例:①LEAAX,[DI+1000]②LEAAX,[3721H]③LDSSI,[2130H]④LESDI,[SI]

代碼段C578數(shù)據(jù)段┇5600201

0

0

0DS初值+2130121307856SILDSSI,[2130H]指令代碼┇┇┇36213010000圖3-18

LDS指令執(zhí)行過程2

0

0

0DS終值4.標(biāo)志傳送指令標(biāo)志傳送指令包括4條指令:①標(biāo)志讀取指令LAHF②標(biāo)志設(shè)置指令SAHF③標(biāo)志寄存器壓入堆棧指令PUSHF④標(biāo)志寄存器從堆棧彈出指令POPF格式:LAHFSAHFPUSHFPOPF舉例:①PUSHF

②POPBX③

PUSHCX④

POPF

OFDFIFTFSFZFAF

PFCF15

11109876543210FLAGSLAHFSAHFAH圖3-19LAHF和SAHF指令傳送操作3.4.2算術(shù)運(yùn)算類指令1.加法指令格式:ADD目的操作數(shù),源操作數(shù)

ADC目的操作數(shù),源操作數(shù)

INC目的操作數(shù)舉例:①ADDBL,15H

②ADDBX,SI

③ADCCX,[BX]④INCDX

2.減法指令格式:SUB

目的操作數(shù),源操作數(shù)

SBB

目的操作數(shù),源操作數(shù)

DEC

目的操作數(shù)

NEG

目的操作數(shù)

CMP

目的操作數(shù),源操作數(shù)舉例:①SUBAX,BX

②SUBAH,110

③SBB

[BX],AX④DECBX

3.乘法指令格式:MUL

源操作數(shù)

IMUL

源操作數(shù)舉例:

①M(fèi)ULDL②

IMULBX

AL操作數(shù)乘積AH

ALAX操作數(shù)乘積DX

AX(a)(b)圖3-20乘法運(yùn)算操作數(shù)及其運(yùn)算結(jié)果間關(guān)系(a)字節(jié)操作數(shù)(b)字操作數(shù)4.除法指令格式:DIV

源操作數(shù)

IDIV

源操作數(shù)

CBW

CBD舉例:①DIVDL②

IDIVBX③

MOVAL,72H④

CBW⑤

MOVAX,8600H

⑥CWDALAH商余數(shù)操作數(shù)AX8位16位AXDX商余數(shù)操作數(shù)DXAX16位32位(a)(b)圖3-21除法運(yùn)算操作數(shù)及其運(yùn)算結(jié)果存放關(guān)系(a)字節(jié)操作數(shù)(b)字操作數(shù)5.BCD碼運(yùn)算的調(diào)整指令分為兩類:組合式BCD碼和分離式BCD碼格式:DAAAAADASAASAAMAAD舉例:①ADCAL,[SI]②

DAA③

ADDAL,[DI]④

AAA⑤SUBAL,[BX]

⑥D(zhuǎn)AS

⑦M(jìn)ULDL

⑧AAM

⑨AAD⑩

DIVBL3.4.3邏輯運(yùn)算和移位指令兩組處理指令:邏輯運(yùn)算指令和移位指令。1.邏輯運(yùn)算指令指令格式:AND目的操作數(shù),源操作數(shù)

OR目的操作數(shù),源操作數(shù)

NOT目的操作數(shù)

XOR目的操作數(shù),源操作數(shù)

TEST目的操作數(shù),源操作數(shù)舉例:①ANDBL,0FH②ORCX,[BX+DI]③XORAX,0FF00H④TESTBX,8000H⑤NOTDH2.移位指令分為兩大類:非循環(huán)移位指令和循環(huán)移位指令。(1)非循環(huán)移位指令指令格式:SAL目的操作數(shù),計(jì)數(shù)值

SHL目的操作數(shù),計(jì)數(shù)值

SAR目的操作數(shù),計(jì)數(shù)值

SHR目的操作數(shù),計(jì)數(shù)值舉例:①SALAX,1②SHLAX,CL③SARWORDPTR[SI],1④SHRDI,1CF0MSBLSBCFCFMSBLSBMSBLSB0(a)(b)(c)圖3-22非循環(huán)移位指令操作示意圖(a)SHL/SAL算術(shù)左移(b)SHR

邏輯右移(c)SAR算術(shù)右移(2)循環(huán)移位指令指令格式:ROL目的操作數(shù),計(jì)數(shù)值

ROR目的操作數(shù),計(jì)數(shù)值

RCL目的操作數(shù),計(jì)數(shù)值

RCR目的操作數(shù),計(jì)數(shù)值舉例:①ROLAX,1②RORAH,CL③RCLBYTEPTR[BX],1④RCRBX,1圖3.23循環(huán)移位移位指令操作示意圖(a)ROL不帶進(jìn)位循環(huán)左移(b)ROR不帶進(jìn)位循環(huán)右移(c)RCL帶進(jìn)位循環(huán)左移(d)RCR帶進(jìn)位循環(huán)右移CFMSBLSBCFCFMSBLSBMSBLSB(a)(b)(d)CFMSBLSB(c)3.4.4串操作指令串操作指令-----用一條指令實(shí)現(xiàn)對一串字符或數(shù)據(jù)的操作。串操作指令的特點(diǎn):①通過加重復(fù)前綴來實(shí)現(xiàn)串操作,規(guī)定CX寄存器存放要處理的字符串的元素個(gè)數(shù),即:字節(jié)數(shù)或字?jǐn)?shù)。②可以對字節(jié)串進(jìn)行操作,也可以對字串進(jìn)行操作。③串操作時(shí),SI和DI的增減規(guī)定由方向標(biāo)志DF設(shè)定,當(dāng)DF=1時(shí),SI和DI作自動減量修改,當(dāng)DF=0時(shí),SI和DI作自動增量修改,對字節(jié)串操作增減量為1,對字串操作增減量為2。④重復(fù)的字符串處理過程可以被中斷。5條串操作指令:串傳送指令MOVS、串比較指令CMPS、串檢索指 令SCAS、LODS串裝入指令和串存儲指令STOS。3條重復(fù)前綴:重復(fù)前綴REP、相等時(shí)重復(fù)REPE和不相等時(shí)重復(fù)REPNE。1.指令的重復(fù)前綴格式:REP串操作指令

REPE串操作指令或REPZ串操作指令

REPNE串操作指令或REPNZ串操作指令2.字符串指令(1)字符串傳送指令指令格式:MOVSBMOVSW舉例:①M(fèi)OVDS,2000H②

MOVES,3000H③

CLD④

MOVCX,20⑤

MOVSI,200H⑥

MOVDI,100H⑦

REPMOVSW

(2)字符串比較指令指令格式:CMPSBCMPSW舉例:編程比較從邏輯地址2000H:100H開始的10個(gè)字節(jié)與邏輯地址4000H:200H開始的10個(gè)字節(jié)是否對應(yīng)相等,相等則轉(zhuǎn)DONE。

MOVDS,2000H

MOVES,4000H

MOVDI,200H

MOVSI,100H

CLDMOVCX,10REPZCMPSBJZDONERETDONE┇(3)字符串檢索指令指令格式:SCASW

SCASB功能:SCASB/SCASW在字符串中查找一個(gè)與已知數(shù)值相同或不同的元素。舉例:從邏輯地址9000H:100H開始的10個(gè)單元中如果有一個(gè)單元的內(nèi)容為2CH,則BX加1。MOVES,9000HMOVDI,100HCLDMOVCX,10MOVAL,2CHREPNZSCASBJNZAAAINCBXAAA:┇(4)取字符串指令指令格式:LODSBLODSW舉例:將100H:20H單元開始10個(gè)字節(jié)的內(nèi)容均加5。CLD;方向標(biāo)志清0,SI遞增MOVCX,10;置計(jì)數(shù)初值10MOVDS,100H;置DS為100H

MOVSI,20H;置SI為20,作為初始地址指針LL1:

LODSB;取1個(gè)字節(jié)到AL中,并使SI增1

ADDAL,5;加5處理MOV[SI],AL;處理結(jié)果送回

DECCX;計(jì)數(shù)值減1JNZLL1;如未處理完,轉(zhuǎn)LL1HLT;暫停(5)存字符串指令指令格式:STOSB

STOSW舉例:將100H:20H開始的128個(gè)單元清0。CLD;清除方向標(biāo)志,DI遞增MOVCX,0080H;置計(jì)數(shù)初值128MOVES,100H;置ES為100HMOVDI,20H;置DI為20H,作為初始地址指針XORAL,AL;AL清0REPSTOSB;將128個(gè)字節(jié)清03.4.5控制轉(zhuǎn)移類指令5種轉(zhuǎn)移指令:無條件跳轉(zhuǎn)指令條件跳轉(zhuǎn)指令循環(huán)控制指令子程序調(diào)用和返回指令中斷指令

1.無條件跳轉(zhuǎn)指令指令格式:JMP

目標(biāo)地址舉例:①JMPSHORTMULTI②JMPNEARPRTMULT2③JMPCX④JMPFARPTRMULT3⑤

JMPDWORDPTR[SI]2.條件跳轉(zhuǎn)指令(1)簡單條件跳轉(zhuǎn)指令指令格式:JC目標(biāo)地址

JNC目標(biāo)地址

JZ目標(biāo)地址

JNZ目標(biāo)地址

JS目標(biāo)地址

JNS目標(biāo)地址JO目標(biāo)地址

JNO目標(biāo)地址

JP目標(biāo)地址

JNP目標(biāo)地址

JCXZ目標(biāo)地址舉例:用條件跳轉(zhuǎn)指令實(shí)現(xiàn)程序的循環(huán)

MOVSI,1000HMOVDI,2000HMOVCX,100KKK:MOVSBDECCXJNZKKK┇(2)帶符號數(shù)條件跳轉(zhuǎn)指令指令格式:JG/JNLE目標(biāo)地址

JGE/JNL目標(biāo)地址

JL/JNGE目標(biāo)地址

JLE/JNG目標(biāo)地址舉例:設(shè)有2個(gè)互不相等的帶符號字節(jié)數(shù)存放在以100H單元為首地址的數(shù)據(jù)緩沖區(qū)中,試編程把較大的數(shù)送200H單元中。

(3)無符號數(shù)條件跳轉(zhuǎn)指令指令格式:JB/JNAE目標(biāo)地址

JNB/JAE目標(biāo)地址

JA/JNBE目標(biāo)地址

JNA/JBE目標(biāo)地址

MOVSI,100H;首址100H送SIMOVAL,[SI];取第一個(gè)數(shù)據(jù)CMPAL,[SI+1];與第二個(gè)數(shù)相比較JGL1;如果比第二個(gè)數(shù)大,轉(zhuǎn)L1MOVAL,[SI+1];取第二個(gè)數(shù)L1:MOVSI,200H;將較大的數(shù)送至200HMOV[SI],AL3.循環(huán)控制指令指令格式:LOOP目標(biāo)地址

LOOPZ/LOOPE目標(biāo)地址

LOOPNZ/LOOPNE目標(biāo)地址舉例:編程求1+2+3+4+…+100MOVCX,100;置循環(huán)計(jì)數(shù)初值100MOVAX,0;求和寄存器AX清0,SUM:ADDAX,CX;把CX計(jì)數(shù)值累加入AXLOOPSUM;CX=CX-1,當(dāng)CX≠0時(shí)再循環(huán)RET;返回,結(jié)果在AX中

4.子程序調(diào)用和返回指令指令格式:CALL目標(biāo)地址

RETRET參數(shù)舉例:①CALL200H②

CALLBX③

CALL500H:600H④

CALLDWORDPTR[BX]⑤RET4主程序┇MOVAL,3AHCALLPROGMOVBX,AX┇CALLPROGMOVDX,AX┇子程序PROG:MOVBL,AL┇┇

RET圖3-24調(diào)用子程序的過程5.中斷指令3.4.6處理器控制類指令1.標(biāo)志操作指令指令格式:STC

CLC

CMC

STD

CLD

STI

CLI

2.8086CPU與外部事件同步指令指令格式:HLT

WAIT

ESC外部操作碼,源操作數(shù)

LOCK指令3.空操作指令指令格式:NOP3.580X86的尋址方式及新增的指令

3.5.1虛地址方式下的尋址方式1.立即數(shù)尋址方式例如:MOVEAX,12345678H

2.寄存器尋址方式

例如:MOVEAX,ECX

3.存儲器尋址方式偏移量可以由下列公式計(jì)算得到:

EA=基址十變址×比例因子十位移量基址——任何通用寄存器都可作為基址寄存器,其內(nèi)容即為基址。位移量——在指令操作碼后面的32位、16位或8位的數(shù)。變址——除了ESP寄存器外,任何通用寄存器都可以作為變址寄存器,其內(nèi)容即為變址值。比例因子——變址寄存器的值可以乘以一個(gè)比例因子,比例因子可以是1,2,4或8。屬性CS段界限值段基地址屬性DS段界限值段基地址屬性ES段界限值段基地址屬性FS段界限值段基地址屬性GS段界限值段基地址屬性SS段界限值段基地址描述符寄存器選擇子CSDSESFSGSSS基址寄存器變址寄存器比例因子1、2、4或8位移量存儲器┇┇目標(biāo)地址┇┇目標(biāo)地址┇┇圖3-25尋址計(jì)算圖解9種存儲器尋址方式(1)直接尋址方式例如:INCWORDPTR[1234567H](2)寄存器間接尋址方式例如:MOVEBX,[EAX]MOVAX,[ECX]MOVBL,[CX]

(3)基址尋址方式例如:MOVECX,[EAX+124]

MOVDX,[EBP+12345H]與8086CPU不同之處:①位移量可以是32位,②任何一個(gè)通用寄存器均可(4)變址尋址方式例如:MOVEAX,CNT[EBP]MOVEDX,CNT[EAX]與8086CPU不同之處:①位移量可以是32位,②任何一個(gè)通用寄存器均可看成基址寄存器(5)帶比例因子的變址尋址方式

EA=變址寄存器內(nèi)容*比例因子+位移量其中:比例因子可以為1、2、4或8例如:MOVEAX,CNT[ESI*4]

MOVEAX,VAR[EDI*2](6)基址加變址尋址方式EA=基址寄存器內(nèi)容+變址寄存器內(nèi)容例如1:MOVEAX,[EBX][EDI]MOVEAX,[ESP][EBP]例如2:MOVEAX,[EDX][EBP]MOVEAX,EBP][EDX]

(7)帶比例因子的變址再加基址尋址方式

EA=變址寄存器內(nèi)容*比例因子+基址例如:MOVEBX,[EDX*8][EBP]MOVEAX,EDX][EBP*2](8)帶位移量的基址加變址尋址方式

例如:ADDEDX,[EDI][EBP+123H]

EA=基址寄存器內(nèi)容+變址寄存器內(nèi)容+位移量(9)帶比例因子的變址加基址加位移量的尋址方式

例如:MOVEAX,[ESI*8][EBP+180H]EA=基址寄存器內(nèi)容+(變址寄存器內(nèi)容×比例因子)+位移量注意:在實(shí)模式下,操作數(shù)和地址的默認(rèn)長度是16位。3.5.280286CPU新增指令新增指令包括兩個(gè)方面,一是增加了一些新功能指令,二是對一些原有指令增強(qiáng)了其功能。80286CPU新增指令見表3-3.3-4。下面就其中一些常用指令進(jìn)行介紹1.?dāng)?shù)據(jù)傳送類指令指令格式:PUSH源操作數(shù)

PUSHA

POPA舉例:PUSH-5

2.算術(shù)運(yùn)算類指令指令格式:①IMUL寄存器,立即數(shù)②IMUL寄存器1,寄存器2或存儲器,立即數(shù)舉例:

IMULBX,50IMULDI,[BX+TABLE],3IMULBX,CX,345H

3.移位和循環(huán)移位指令指令格式:SHL目的操作數(shù),COUNT

SAL目的操作數(shù),COUNTSHR目的操作數(shù),COUNTSAR目的操作數(shù),COUNTROL目的操作數(shù),COUNTROR目的操作數(shù),COUNTRCL目的操作數(shù),COUNTRCR目的操作數(shù),COUNT舉例:

SHLDX,94.串輸入/輸出指令指令格式:INSBINSWOUTSBOUTSW舉例:要從端口地址為125H的外設(shè)端口中輸入200個(gè)字節(jié),存放在以邏輯地址2000H:100H為首址的內(nèi)存單元中,則可采用如下串輸入指令:

CLDMOVES,2000HLEADI,100HMOVCX,200MOVDX,125HREPINSB5.高級語言類指令指令格式:BOUND寄存器,存儲器地址

ENTER立即數(shù)1,立即數(shù)2LEAVE3.5.380386/80486CPU新增指令1.?dāng)?shù)據(jù)傳送類指令指令格式:MOVSX目的操作數(shù),源操作數(shù)

MOVZX目的操作數(shù),源操作數(shù)舉例:

MOVDX,0FB20HMOVSXEAX,DXMOVCL,0FBHMOVZXAX,CL2.算術(shù)運(yùn)算類指令格式:XADD目的操作數(shù),源操作數(shù)3.邏輯運(yùn)算與移位指令指令格式:

SHRD第一操作數(shù),第二操作數(shù),第三操作數(shù)

SHLD第一操作數(shù),第二操作數(shù),第三操作數(shù)

舉例:設(shè)CX中有內(nèi)容為1234H,DX中有內(nèi)容為5678H,則SHLDCX,DX,

7指令是把DX左移

7位,移入

CX中,結(jié)果(CX)=1A2BH4.位操作類指令指令格式:BT第一操作數(shù),第二操作數(shù)

BTC第一操作數(shù),第二操作數(shù)

BTR第一操作數(shù),第二操作數(shù)

溫馨提示

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

評論

0/150

提交評論