第3章尋址方式及指令系統(tǒng)_第1頁
第3章尋址方式及指令系統(tǒng)_第2頁
第3章尋址方式及指令系統(tǒng)_第3頁
第3章尋址方式及指令系統(tǒng)_第4頁
第3章尋址方式及指令系統(tǒng)_第5頁
已閱讀5頁,還剩236頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章尋址方式及指令系統(tǒng)

3.1基本概念3.2尋址方式

操作數(shù)的尋址方式轉(zhuǎn)移指令的尋址方式3.3指令系統(tǒng)傳送指令算術(shù)運算指令位運算指令CPU控制指令I/O類指令串操作指令轉(zhuǎn)移類指令3.4常用DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用

DOS系統(tǒng)功能調(diào)用常用DIOS中斷

3.1基本概念一、指令及指令系統(tǒng)指令是CPU可以理解并執(zhí)行的操作命令。指令系統(tǒng)是CPU的所有指令的集合。指令的兼容性:同一系列機的指令都是兼容的。二、程序執(zhí)行的基本流程程序是為了解決某一問題而編寫的有限指令序列。指令的執(zhí)行過程主要有兩個階段:取指階段和分析執(zhí)行階段。圖3.1程序執(zhí)行流程圖三、指令的級別機器級和匯編級機器指令是指由二進制代碼構(gòu)成的可由CPU直接理解并執(zhí)行的指令;匯編指令實質(zhì)上是機器指令符號化的結(jié)果,它與機器指令是一對一的。例如:MOVAL,1(易于理解、記憶、書寫不易出錯)

1011000000000001(難理解、難記憶、書寫易出錯)四、指令格式指令中應(yīng)包含的信息:“做什么操作”“對什么操作”指令格式操作碼[操作數(shù)],[操作數(shù)]執(zhí)行何種操作參加操作的數(shù)據(jù)或數(shù)據(jù)存放的地址或操作數(shù)地址計算方法說明:①操作數(shù)的尋址方式是指尋找指令中操作數(shù)的方式。

操作數(shù)可能的存放方式:直接包含在指令中立即數(shù)立即尋址方式包含在某個寄存器中寄存器操作數(shù)寄存器尋址方式在內(nèi)存中存儲器操作數(shù)(內(nèi)存操作數(shù))存儲器尋址方式在端口中端口操作數(shù)端口尋址方式②操作數(shù)的分類:根據(jù)其在指令中的位置分為第一操作數(shù)和第二操作數(shù)以及隱含操作數(shù)(無操作數(shù),在指令中不會出現(xiàn)但會用到);根據(jù)操作數(shù)的作用分為源操作數(shù)(SRC)和目的操作數(shù)(DST);

例如:MOVAL,80根據(jù)操作數(shù)所對應(yīng)的操作對象的字節(jié)數(shù)(也叫數(shù)據(jù)類型)分為字節(jié)操作數(shù)(Byte)、字操作數(shù)(Word)(8088/86字長為兩個字節(jié))、雙字操作數(shù)(DoubleWord)、8字節(jié)操作數(shù)(Octalbyets,LongWord)、十字節(jié)操作數(shù)(TenBytes)。按操作數(shù)的個數(shù)將指令分為零地址指令(無操作數(shù))、一地址指令(只有一個操作數(shù))、二地址指令(有二個操作數(shù))、多地址指令(多于二個操作數(shù));按指令級別分為機器指令和匯編指令;按是否轉(zhuǎn)移分為轉(zhuǎn)移指令和順序指令;按功能分為七大類:傳送類、算術(shù)運算類、位操作類、I/O類、串操作類、CPU控制類、轉(zhuǎn)移類;按指令長度(即指令占用的字節(jié)數(shù))分為一字節(jié)指令、二字節(jié)指令等,8088/86指令長度是不同的,叫變字長,不同的指令有不同的指令長度,從一字節(jié)到六字節(jié)均有;按指令執(zhí)行期間取操作數(shù)是否需要與總線打交道分為內(nèi)部指令(不需)和外部指令(需要)。五、指令分類

3.2尋址方式與數(shù)據(jù)有關(guān)的尋址方式與轉(zhuǎn)移地址有關(guān)的尋址方式(轉(zhuǎn)移指令)與數(shù)據(jù)有關(guān)的尋址方式:以MOV

指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對基址變址尋址MOVAX,MASK[BX][SI]存儲器尋址3.2.1操作數(shù)的尋址方式操作數(shù)直接存放在指令中,緊跟在操作碼之后,作為指令的一部分,存放在代碼段里,這種操作數(shù)稱為立即數(shù)。例如:MOVAL,5MOVAX,3064H

圖例MOVAL,‘A’主要用來給REG或M賦初值。3.2.1.1立即尋址方式AH

AL

AXCS段…………操作碼存儲器例:MOVAX,3064HB8H64H30H∴(AX)=3064H例3.1:MOV

AL,5 ;5為十進制字節(jié)常數(shù)MOV

AX,5 ;5為十進制字常數(shù)MOVAX,300H ;300H為十六進制字常數(shù)MOV

CX,N;在此之前N已定義為常量MOV

AX,DATA ;DATA為段名MOV

AX,5+2*3;5+2*3=11為常數(shù)表達式注意:立即數(shù)可以是:各種進制的常數(shù)、字符常數(shù)、符號常量、地址(段名、段地址、偏移地址)、常數(shù)表達式等。立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。立即數(shù)的數(shù)據(jù)類型由指令本身決定。字節(jié)數(shù)據(jù)的取值范圍為-128-+255,字?jǐn)?shù)據(jù)的取值范圍為-32768-+65535。MOV40H,AL錯MOVAH,3064H錯3.2.1.2寄存器尋址方式指令中出現(xiàn)的寄存器名作為操作數(shù)的尋址方式叫寄存器尋址方式。操作對象是寄存器中的內(nèi)容。例3.2:MOV

AX,BXMOV

DH,CLMOV

DS,AX注意:匯編指令涉及到的寄存器名有20個。其中,字節(jié)寄存器只有

AHALBHBLCHCLDHDL寄存器尋址既可以作DST,也可以作SRC。源操作數(shù)和目的操作數(shù)的字長一致

圖例CS不能作為目的操作數(shù)如:MOVCS,AX錯例:MOVAX,BXAX

BX

若(AX)=1234H,(BX)=5678H,則CPU執(zhí)行上條指令后,(AX)=5678H,而(BX)不變。

又如:MOVCX,DL(語法錯誤)

錯誤原因:類型不一致。3.2.1.3存儲器尋址方式

指令中操作數(shù)是操作對象在內(nèi)存中的存放地址的尋址方式叫存儲器尋址方式。操作對象是內(nèi)存地址所對應(yīng)的存儲單元中的內(nèi)容。存儲器尋址方式分為五種:直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址變址尋址方式、相對基址變址方式。由段地址及段內(nèi)偏移地址確定內(nèi)存地址對應(yīng)的SR及EA1、直接尋址方式—有效地址EA由指令直接給出

例:MOVAX,[2000H]

*

隱含的段為數(shù)據(jù)段DS*

可使用段超越前綴

例:

MOVES:[2000H],AL*

操作數(shù)地址常數(shù)、常量或常數(shù)表達式加[]表示,也可由變量名(符號地址)或變量名加減常量表示。例如:MOVBX,[N] ;N為常量名

MOVBX,ES:[2+3*5] MOVDX,A ;A為變量名

MOV

SI,A+5

EA=N圖例圖例AXCS段操作碼例1:MOVAX,[2000H]若DS為3000H,則:AH

AL

32000H32001H30000H

+DS……

……存儲器數(shù)據(jù)段20H00HA1H2000H

PA=32000H

3050CS段操作碼例2:MOVES:[2000H],AL若ES為2050H,則:AL

22500H20500H

+ES………存儲器附加數(shù)據(jù)段20H00H2000H

PA=22500H

前綴碼2、寄存器間接尋址(簡稱間接尋址)—EA在基址寄存器(BX/BP)或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16(DS)+(BX)MOVAX,ES:[BX]PA=16(ES)+(BX)

MOVAX,[BP]PA=16(SS)+(BP)MOV

BP,[SI]PA=16(DS)+(SI)MOV

SP,SS:[DI]PA=16(SS)+(DI)

*不允許使用AX、CX、DX存放EAMOVAX,[CX]錯*BP默認(rèn)相對SS段,其它則默認(rèn)相對DS段。

EA=R

有效地址=(BX)(BP)(SI)(DI)+相對偏移量(8位或16位)3、寄存器相對尋址方式—EA為寄存器內(nèi)容加上一個相對偏移量

*相對偏移量可以是常數(shù)、常量、常數(shù)表達式以及變量名等EA=R+n例3.5:MOV

AX,[BX+6]MOV

BX,DS:[BP+N];N為常量名MOV

BP,A[SI];A為變量名,變量名常寫于“[”前MOV

SP,[DI][8];另一種書寫格式MOV

CX,8[DI];另一種書寫格式

例:MOVAX,COUNT[SI]

假設(shè)(DS)=3000H,(SI)=2000H,COUNT=3000H,PA=3000H×10H+(2000H+3000H)

則:PA=35000H

假設(shè)(35000H)=1234H,

那么(AX)=1234H

在相對偏移量為常數(shù)時,操作數(shù)所在單元的段地址以寄存器為準(zhǔn),若寄存器為BX、SI、DI,操作數(shù)默認(rèn)在DS段中。若寄存器為BP,操作數(shù)默認(rèn)在SS段中。在相對偏移量為變量時,操作數(shù)所在單元的段地址以變量為準(zhǔn),變量在哪個段定義的,就取該段的段地址。注意:例:若(DS)=1500H,TABLE為在DS段定義的一個字變量,且偏移地址為0004H,(BP)=0003H。

MOVAX,TABLE[BP]SRC的尋址方式為寄存器相對尋址。指令完成的操作為:

(AX)(DS:TABLE+(BP))PA=1500H×10H+(0004H+0003H)

則:PA=15007H4、基址變址尋址方式—EA為一個基址寄存器內(nèi)容加上一個變址寄存器的內(nèi)容*必須是一個基址寄存器和一個變址寄存器的組合

MOVAX,[BX][BP]錯

MOVAX,[SI][DI]錯*若用到BP則默認(rèn)相對SS段,其它則默認(rèn)相對DS段。有效地址=(BX)(SI)(BP)(DI)+EA=BR+IR例3.6

MOV

AX,[BX+SI]

MOV

BX,DS:[BP+SI]

MOV

DX,[BP][DI] ;另一種書寫格式

MOVAX,ES:[BX][SI]5、相對基址變址尋址方式—EA為一個基址寄存器內(nèi)容加上一個變址寄存器的內(nèi)容再加上一個相對偏移量默認(rèn)段地址來源,同寄存器相對尋找方式例3.7:MOV

AX,[BX+SI+19]MOV

BX,DS:[BP][SI][8];另一種書寫格式MOV

BP,[BP+DI+N] ;N為常量名MOV

A[BX][DI],DX ;A為變量名相對偏移量(8位或16位)

有效地址=(BX)(SI)(BP)(DI)++EA=BR+IR+n例:設(shè)DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量DISP=1618H。試判斷下列指令的尋址方式,并求出在各種尋址方式下的EA和PA,并說明指令執(zhí)行的結(jié)果。MOVAX,[0618H]直接尋址EA=0618H執(zhí)行結(jié)果:將數(shù)據(jù)段12618H和12619H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+0618H=12618H存儲器尋址實例(一)30MOVAX,[BX]寄存器間接尋址EA=BX=05A6H執(zhí)行結(jié)果:將數(shù)據(jù)段125A6H和125A7H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+05A6H=125A6H存儲器尋址實例(二)31MOVAX,[BP]寄存器間接尋址EA=BP=40A0H執(zhí)行結(jié)果:將堆棧段540A0H和540A1H兩單元的內(nèi)容取出送AX。PA=SS左移4位+EA=50000H+40A0H=540A0H存儲器尋址實例(三)32MOVAL,[DI+DISP]寄存器相對尋址EA=DI+DISP=3000H+1618H=4618H執(zhí)行結(jié)果:將數(shù)據(jù)段16618H單元的內(nèi)容取出送AL。PA=DS左移4位+EA=12000H+4618H=16618H存儲器尋址實例(四)MOVAX,[BX+DI]基址加變址尋址EA=BX+DI=05A6H+3000H=35A6H執(zhí)行結(jié)果:將數(shù)據(jù)段155A6H和154A7H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+35A6H=155A6H存儲器尋址實例(五)MOVAX,[BP+SI+DISP]基址變址相對尋址EA=BP+SI+DISP=40A0H+2000H+1618H=76B8H執(zhí)行結(jié)果:將堆棧段576B8H和576B9H兩單元的內(nèi)容取出送AX。PA=SS左移4位+EA=50000H+78B8H=576B8H存儲器尋址實例(六)圖3.3任一存儲單元可采用

五種存儲器尋址方式任一種

3.2.1.4端口尋址方式端口地址給出的方式有兩種:常數(shù)(端口直接尋址方式)

DX寄存器(端口間接尋址方式)端口直接尋址方式:指令直接提供8位端口地址。尋址范圍為0-255(00H--FFH),即一個字節(jié)的地址值。端口間接尋址方式:由DX寄存器給出16位端口地址。

DX的取值范圍為0-65535(0000H—FFFFH)。

例3.8: IN

AX,41H ;41H為端口直接尋址OUT

DX,AL ;DX為端口間接尋址

*端口操作數(shù)只能出現(xiàn)在I/O指令,即IN和OUT指令,端口操作數(shù)實質(zhì)上是指明端口的地址,操作對象是端口地址對應(yīng)的端口中的內(nèi)容。3.3指令系統(tǒng)按功能分為:數(shù)據(jù)傳送類算術(shù)運算類邏輯運算和移位類串操作類程序控制轉(zhuǎn)移類

I/O類處理器控制類重點關(guān)注:指令的助記符指令的匯編格式指令的基本功能指令支持的數(shù)據(jù)類型指令支持的尋址方式指令的執(zhí)行對標(biāo)志位的影響英文縮寫含義本書講解指令系統(tǒng)所用的一些英文縮寫如下:

SR:段寄存器N:立即數(shù)F:標(biāo)志位

UR:通用寄存器

UR8:8位通用寄存器,UR16:16位通用寄存器

M或[EA]:存儲器操作數(shù)

B:字節(jié),W:字,DW:雙字

DST:目的操作數(shù),SRC:源操作數(shù)

OD:操作數(shù)

傳送類指令(12條)一般傳送交換傳送堆棧傳送地址傳送標(biāo)志傳送POPF傳送類指令又可分為五小類:3.3.1.1一般傳送MOV(賦值)指令。助記符:MOV基本格式:MOV

DST,SRC數(shù)據(jù)類型:B/W功能:將第二操作數(shù)送給第一操作數(shù), 即DST←SRC對F影響:無尋址方式:注意:*DST不能是立即數(shù)和CS

*立即數(shù)不能直接送段寄存器

MOVDS,2000H錯

*DST、SRC不能同時為段寄存器

MOVDS,ES錯*DST、SRC不能同時為存儲器尋址

MOV

A,B錯注意:不能直接賦值可通過間接賦值來實現(xiàn)。例3.18:

MOV

AX,DATA

MOV

DS,AX ;實現(xiàn)將DATA段地址送DS

MOV

AX,CS

MOV

DS,AX ;實現(xiàn)將CS送DS

MOV

AL,A

MOV

B,AL;A、B為字節(jié)變量,實現(xiàn)將A的值送給BN→UR(注意數(shù)據(jù)表示范圍)例3.9:MOV

AL,80 ;AL=80=50HMOV

AX,80 ;AX=80=0050HMOV

BX,1200;BX=04B0HMOV

CX,N ;N為常量MOV

AX,DATA ;DATA為段名,段名代表段的段地址錯:MOV

CL,300 ;數(shù)據(jù)300超出字節(jié)表示范圍N→M

(注意類型明確)例3.10:MOV

A,8

;A為變量名,8的類型由A的變量類型決定MOV

BYTEPTR[BX],8;字節(jié)傳送MOVWORDPTR[BX],8;字傳送錯:MOV

[SI],8;類型不明確注:BYTEPTR和WORDPTR用來定義地址對應(yīng)單元的數(shù)據(jù)類型UR→UR(注意類型匹配)例3.11:MOV

AL,AHMOV

BH,DLMOV

SP,AXMOV

CX,CX錯:MOV

CX,BL;類型不匹配UR→SR

(注意CS不能為目的操作數(shù)及類型匹配)例3.12:MOV

DS,AXMOV

ES,DX錯:MOV

CS,AX

;CS不能作為目的操作數(shù)錯:MOV

SS,CL

;CL為字節(jié)類型,類型不匹配UR→M

(類型由UR決定,若變量與UR類型不一致,則需類型轉(zhuǎn)換)例3.13:MOV

[20H],ALMOV

[BX],BXMOV

ES:[BP],CXMOV

A,DX ;假設(shè)A為字變量錯:MOV

A,DL

;或改為MOVBYTE

PTRA,DLSR→UR(注意類型匹配)例3.14:MOV

AX,CSMOV

BX,SS錯:MOV

CL,DS;類型不匹配SR→M

(M的類型必須為字)例3.15:MOV

CS:[BX],DSMOV

[BP],SS錯:MOV

B,CS

;若B為字節(jié)變量,則類型不匹配M→UR(類似于UR→M,只是方向相反)例3.16:MOV

AL,[20H]MOVBX,[BX]M→SR(類似于SR→M,只是方向相反,而且SR不能是CS)例3.17:MOV

DS,SS:[20H]MOV

SS,[BP]3.3.1.2交換傳送交換傳送有二條指令:XCHG(互換)和XLAT(換碼)1、XCHG指令:助記符:XCHG基本格式:XCHG

OD1,OD2數(shù)據(jù)類型:B/W功能:將第二操作數(shù)與第一操作數(shù)的值互換,即OD1

OD2對F影響 無尋址方式:注意:*SR不能參加互換XCHGBX,ES錯

*立即數(shù)不能參加互換XCHGAX,1234H錯*

M與M不能互換XCHG

A,B錯例3.20:

XCHG

AX,BX

XCHG

AL,AH

XCHG

CL,[BX][DI]

XCHG

A[DI],DX例3.21:A

B(A、B為字節(jié)變量)

MOV

AL,A

XCHG

AL,B

MOV

A,AL2、XLAT換碼指令(查表指令):助記符XLAT基本格式 XLAT[代碼表的起始地址]數(shù)據(jù)類型隱含尋址方式隱含功能(BX+AL)→AL對F影響 無XLAT常用于將序號碼轉(zhuǎn)換成ASCII碼、鍵盤按鍵代碼、顯示代碼等其它碼元。實際使用時的基本格式:

MOVBX,OFFSET代碼表;將代碼表的首地址送BX MOVAL,序號 ;將需轉(zhuǎn)換的第幾個送AL XLAT ;將DS:(BX+AL)對應(yīng)存儲單元內(nèi)容送AL獲取操作對象的段內(nèi)偏移地址建立代碼轉(zhuǎn)換表:最大容量256字節(jié),將該表定位到內(nèi)存中某個邏輯段的一片連續(xù)地址中,并將表首地址的偏移量置入BX。

MOVBX,0030H例如:十進制數(shù)0~9的七段顯示碼表,被定位在當(dāng)前數(shù)據(jù)段中,其起始地址的偏移地址值為0030H,將AL中待轉(zhuǎn)換的十進制數(shù)5轉(zhuǎn)換成對應(yīng)的七段碼。CS=2000H,IP=007AH,DS=4000H。將待轉(zhuǎn)換的一個十進制數(shù)在表中的序號送入AL中。

MOVAL,5

執(zhí)行XLAT命令。

XLAT操作步驟:…D7……4079243019120278001020000HCS首地址2007AH40000HDS首地址40030H40031H40032H40033H40034H40035H40036H40037H40038H40039HBX+0BX+1BX+2BX+3BX+4BX+5BX+6BX+7BX+8BX+9+BX=0030HAL=5H查表指令例3.3.1.3堆棧傳送堆棧傳送有二條指令:PUSH(進棧)和POP(出棧)在程序調(diào)用、中斷調(diào)用的子程序中一般使用PUSH和POP指令實現(xiàn)現(xiàn)場信息的保護及恢復(fù)。堆棧是以后進先出(LIFO)的原則存取信息的一種存儲區(qū)域。堆棧的段地址存放在SS中,SP在任何時候都指向棧頂,進出棧后自動修改SP。在信息的存與取的過程中,棧頂是堆棧區(qū)的動端,而堆棧區(qū)的另一端則是固定不變的,這端稱為棧底。堆棧以字為單位進行壓入彈出操作。

8088/8086系統(tǒng)中,初始化后SP指向堆棧底+1單元的偏移地址。

堆棧:例如:若堆棧段定義空間大小為256字節(jié),則初始化后,(SP)=0100H(SP)=0100H……SS:0000HSS:00FFH256B的堆棧區(qū)棧底1、PUSH指令:助記符PUSH基本格式PUSH

SRC數(shù)據(jù)類型W,只能為字操作尋址方式SRC可以為SR、UR16、M16功能將SRC的內(nèi)容壓入棧頂,即①SP=SP-2②SRC→(SP)

對于8088分四步:①SP=SP-1②SRC高8位→(SP)③SP=SP-1④SRC低8位→(SP)對F影響無例:假設(shè)(AX)=2107H,執(zhí)行

PUSHAX********(SP)PUSHAX執(zhí)行前(SP)********07H21H低地址

高地址PUSHAX執(zhí)行后進棧方向例3.22:合法的例子如下:PUSH

CSPUSH

BXPUSH

A ;A為字變量PUSH

WORD

PTR

[BX]PUSH

[BX] ;一定為字操作,所以類型說明可省略非法的例子如下:PUSH

AL ;字節(jié)不能進棧PUSH

B ;若B為字節(jié)變量,則不對PUSH1000H ;立即數(shù)不能進棧*

PUSH指令只能對字操作,不能用立即尋址方式將常數(shù)壓入堆棧:MOVAX,OFFFFHPUSHAX2、POP指令:助記符POP基本格式POP

DST數(shù)據(jù)類型W,只能為字操作尋址方式DST可以為SR(除CS外)、UR16、M16功能將棧頂元素出棧給DST,即①(SP)→DST②SP=SP+2

對于8088分四步:①(SP)→DST低8位②SP=SP+1③(SP)→DST高8位④SP=SP+1對F影響無(SP)********07H21HPOPBX執(zhí)行前(SP)********07H21H低地址

高地址POPBX執(zhí)行后

(BX)=2107H例:POPBX出棧方向例3.23:合法的例子如下:POP

DSPOP

BXPOP

A ;A為字變量POP

WORD

PTR

[BX]POP

[BX];一定為字操作,所以類型說明可省略非法的例子如下:POP

AL ;字節(jié)不能出棧POP

B ;若B為字節(jié)變量,則不對POP

CS ;CS不能作為出棧對象*

POP指令只能是字操作,立即數(shù)、CS不能作為目的操作數(shù)例1:若(SS)=2000H,(SP)=0100H(AX)=1122H,(BX)=3344H,(CX)=5566H則CPU執(zhí)行以下指令:

PUSHAXPUSHBX

PUSH

CX;此時,棧頂單元的PA=

例1:若(SS)=2000H,(SP)=0100H(AX)=1122H,(BX)=3344H,(CX)=5566H則CPU執(zhí)行以下指令后,

POPAX;(AX)=

POPCX;(CX)=

POP

BX;(BX)=

;此時,(SP)=

例2:若CPU執(zhí)行

PUSHAXPUSHBX

PUSH

CX

指令組后,試將壓入堆棧的(AX)DX(用MOV指令實現(xiàn))。SS:SPMOVBP,SPMOVDX,[BP]+04HCLCHBLBHALAH+1+2+3+4BP例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進先出

POPBXPOPAX常見應(yīng)用:用PUSH和POP的組合也可實現(xiàn)兩數(shù)的互換例3.24(實現(xiàn)AX與BX的互換):PUSH

AX;①PUSH

BX;②POP

AX;③POP

BX;④圖3.6堆棧操作示意圖AXBX②①③SPSP④3.3.1.4地址傳送地址傳送有三條指令:LEA(送有效地址)LDS(置有效地址及DS段地址)LES(置有效地址及ES段地址)1、LEA指令:助記符LEA基本格式LEA

UR16,[EA]數(shù)據(jù)類型隱含功能將第二操作數(shù)存儲器操作數(shù)的偏移 地址送給第一操作數(shù)指定的16位通用寄存器,即EA→UR16。尋址方式包含在基本格式中對F影響無它傳送的不是操作數(shù)本身,而是操作數(shù)的有效地址。*源操作數(shù)必須是一個存儲器操作數(shù),目標(biāo)操作數(shù)通常是間址寄存器(一般用BX、BP、SI、DI)。例3.25:LEA

SI,[2000H]

;SI=2000H,等價于:MOV

SI,2000HLEA

BX,TABLE圖例;TABLE的偏移地址送BX,即BX指向TABLE

等價于:MOVBX,OFFSETTABLELEA

DI,[BP]

;DI=BP,等價于:與MOV

DI,BP等價LEABX,[BX+SI+0F62H]77H88HDS:0010H99H66HDAT1TABLE

那么,CPU執(zhí)行LEABX,TABLE指令完成的功能是:

BX

將TABLE變量所具有的EA

∴(BX)=0012H

◆上述指令完成的功能等效于:

MOVBX,OFFSETTABLE

而CPU執(zhí)行MOVBX,TABLE指令完成的功能是:

BX(TABLE)

∴(BX)=9988H

LEA指令在程序中的應(yīng)用例:將數(shù)據(jù)段中首地址為MEM1

的50個字節(jié)的數(shù)據(jù)傳送到同一邏輯段首地址為MEM2的區(qū)域存放。編寫相應(yīng)的程序段。LEA指令在程序中的應(yīng)用

開始取源地址取目標(biāo)地址送數(shù)據(jù)塊長度到CL傳送一個字節(jié)修改地址指針修改計數(shù)值計數(shù)值=0?結(jié)束NYLEA指令在程序中的應(yīng)用LEASI,MEM1LEADI,MEM2

MOVCL,50NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCLJNZNEXTHLT2、LDS與LES助記符LDS/LES基本格式 LDS/LES

UR16,[EA]數(shù)據(jù)類型隱含功能將存儲器操作數(shù)的第一字送給第一操作數(shù)指定的16位通用寄存器,并將存儲器操作數(shù)的第二字送給操作碼部分指明的段寄存器DS/ES。即(EA)→UR16

(EA+2)→DS/ES尋址方式包含在基本格式中對F影響無LDS/LES不但使指定的通用寄存器值發(fā)生變化,而且DS/ES也會發(fā)生變化。例如:LDS

BX,[SI]

;BX=(SI),DS=(SI+2)BXDSSIDS圖3.7

LDS

BX,[SI]的功能40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H;(DS)=3000HLESBX,TABLE;(BX)=0040H;(ES)=3000H注意:*SRC必須為存儲器尋址方式*DST是UR16間址寄存器例如:例:數(shù)M所在單元的地址指針在POINT雙字單元存放著,試將數(shù)MAL中。LDSBX,POINTMOVAL,[BX]20H01HPOINT15H1500H:0120H00H≈≈BXDSDS:BXM3.3.1.5標(biāo)志傳送

標(biāo)志傳送有四條指令:LAHF(PSW低8位送AH)SAHF(AH送PSW低8位)PUSHF(PSW進棧)POPF(出棧給PSW)1、LAHF/SAHF指令:助記符LAHF/SAHF基本格式LAHF/SAHF功能

PSW低8位→AH/AH→PSW低8位對F影響無/影響除OF外的其余5個狀態(tài)標(biāo)志SF、ZF、

AF、PF和CF,AH的對應(yīng)位去填充各標(biāo)志位。SFZF

AFPFCF01234567AH圖3.8

LAHF的功能SFZF

AFPFCF01234567AH圖3.9

SAHF的功能注:這一對指令主要用于除OF外5個狀態(tài)標(biāo)志位的保護和恢復(fù)。2、PUSHF/POPF指令:助記符PUSHF/POPF基本格式PUSHF/POPF功能

SP=SP-2,PSW→(SP)/(SP)→PSW,SP=SP+2對F影響無

/影響所有狀態(tài)標(biāo)志(SF、ZF、AF、

PF、OF和CF)及所有控制標(biāo)志(IF、

TF和DF),彈出的棧頂元素對應(yīng)位去填充各標(biāo)志位。注:PUSHF/POPF指令主要用于標(biāo)志位的保存和恢復(fù),PUSHF用于保存所有標(biāo)志位到棧中,POPF用于從棧中恢復(fù)所有標(biāo)志位。

標(biāo)志傳送舉例例3.26設(shè)置SF=1,ZF=0,AF=0,PF=1,CF=0。

分析:要置5個狀態(tài)標(biāo)志位可用SAHF指令,先按對應(yīng)位填充一個立即數(shù)送AH,再用SAHF實現(xiàn)將AH

送PSW的低8位。;無關(guān)位一般填0,即84H解:MOVAH,10000100B

SAHF例3.27設(shè)置OF=1,DF=0,IF=1,TF=0,SF=1,ZF=0,AF=0,PF=1,CF=0。分析:要置9個狀態(tài)標(biāo)志位可用POPF指令,先按對應(yīng)位填充一個立即數(shù)送AX,再將AX進棧,而后再用POPF實現(xiàn)將棧頂元素出棧送PSW,即N→AX→?!鶳SW。解:MOVAX,0000101010000100B;即0A84HPUSHAX

POPF3.3.5I/O類指令(2條指令)

I/O指令只有兩條指令:輸入IN指令,輸出OUT指令。IN AL/AX,PORT/DX ;“/”代表或的關(guān)系,所以可一分為四

OUT

PORT/DX,AL/AX ;“/”代表或的關(guān)系,所以可一分為四

累加器專用傳送指令(只限使用AX或AL)

輸入指令I(lǐng)N(I/OCPU)

長格式:INAL,PORT(字節(jié))

INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))

(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))

INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))

(AX)((DX)+1,(DX))(字)

端口直接尋址:其取值范圍為0-255即00H-FFH端口間接尋址:其取值范圍為0-65535即0000H-FFFFH輸出指令OUT(CPUI/O)長格式:OUTPORT,AL(字節(jié))

OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))

(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))

OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))

((DX)+1,(DX))(AX)(字)注意:*不影響標(biāo)志位*前256個端口號00H~FFH可直接在指令中指定(長格式)*如果端口號256,端口號

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL

3.3.2算術(shù)運算類指令(20條)算術(shù)運算類指令可分為三小類:加減運算乘除運算BCD修正3.3.2.1加減運算(8條)1、單目運算指令三條:

INC(加1)、DEC(減1)、NEG(求補):助記符INC/DEC/NEG基本格式INC/DEC/NEGOD數(shù)據(jù)類型B/W尋址方式OD可以為UR及M功能OD=OD+1/OD=OD-1/OD=0-OD對F影響INC、DEC對CF標(biāo)志位無影響,對其余

5個狀態(tài)標(biāo)志位均有影響;NEG對6個狀態(tài)標(biāo)志位均有影響。不能是段寄存器或立即數(shù)例3.26:INC

BX;BX=BX+1DEC

AL

;AL=AL-1INCBYTEPTR[BX]

;DS:BX對應(yīng)的內(nèi)存字節(jié)單元加1DEC

WORDPTR[BP]

;SS:BP對應(yīng)的內(nèi)存字單元減1例3.29理解下面的程序段,并填充結(jié)果。

;設(shè)CF=0

MOV AL,0

MOV AH,1

DEC AL

;AX=

H,CF=

。解:AL=00H-1=FFH,AH=01H,CF不變,所以AX=01FFH,CF=0。(其他5個標(biāo)志位為:OF=0,SF=1,ZF=0,AF=1,PF=1)注:INC或DEC常用于循環(huán)程序中修改地址指針或循環(huán)計數(shù)等場合(如前例)。例:NEG

DL分析: NEG(求補)功能為:0-DL=-DL設(shè):DL原始值為5,則執(zhí)行后DL為-5,即FBH(-5的補碼);6個標(biāo)志位:

SF=1,PF=0,ZF=0,OF=0,CF=1,AF=1。注意:NEG實質(zhì)在對操作數(shù)按位取反后加1

(即求補操作)對標(biāo)志位影響的規(guī)律總結(jié):INC加1指令只是當(dāng)對7FH或7FFFH加1時OF=1。DEC減1指令只是當(dāng)對80H或8000H減1時OF=1。NEG求補指令只有當(dāng)對80H(8位,即-128)或8000H(16位,即-32768)求補時OF=1,其它情況下OF=0;只有當(dāng)對0求補時CF=0,其它情況下CF=1。2、雙目運算指令5條:

ADD(加)、ADC(帶CF加)、SUB(減)、

SBB(帶CF減)、CMP(比較)基本格式

ADD/ADC/SUB/SBB/CMPDST,SRC功能

DST=DST+SRC/

DST=DST+SRC+CF/

DST=DST-SRC/DST=DST-SRC-CF/DST-SRC數(shù)據(jù)類型B/W尋址方式:源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器對F影響這5條指令對6個狀態(tài)標(biāo)志位均有影響。影響的填充方法按通用填充方法填充。

提示:

目的操作數(shù)不能為立即數(shù);源操作數(shù)和目的操作數(shù)不能同時為存儲器;段寄存器不能作操作數(shù)。例3.30:ADD

AX,BX

;AX=AX+BX設(shè)指令執(zhí)行前AX=35C9H,BX=726DH,則執(zhí)行后AX=A836H,BX不變,SF=1,PF=1,ZF=0,OF=1,CF=0,AF=1例3.31:ADC

BH,DL

;BH=BH+DL+CF設(shè)指令執(zhí)行前BH=96H,DL=6DH,CF=1,則執(zhí)行后BH=04H,DL不變,SF=0,PF=0,ZF=0,OF=0,CF=1,AF=1注:

ADC指令多用于多字節(jié)數(shù)相加,使用前要先將CF清零。例:完成雙字相加,被加數(shù)存放在DX(高)與AX(低)中,加數(shù)放在BX(高)和CX(低)中,和放在DX與AX中。程序段如下:

ADDAX,CXADCDX,BX

;高位運算時要考慮低位的進位例3.32:SUB

CX,[BX]

;CX=CX-(BX),字操作設(shè)指令執(zhí)行前CX=1296H,DS=2000H,BX=100H,(20100H)=3DH,(20101H)=28H,則(BX)=283DH,執(zhí)行后CX=EA59H,BX、(BX)不變,SF=1,PF=1,ZF=0,OF=0,CF=1,AF=1例3.33:SBB

[DI],BL

;(DI)=(DI)-BL-CF,字節(jié)操作設(shè)指令執(zhí)行前DS=2000H,BL=76H,DI=6DH,(2006DH)=B2H,CF=1,則(DI)=B2H,執(zhí)行后(2006DH)=3BH,DI、BL不變,SF=0,PF=0,ZF=0,OF=1,CF=0,AF=1例3.34:CMP

AL,10H

;AL-10H,不保存結(jié)果,但影響標(biāo)志,可用于數(shù)據(jù)大小比較。設(shè)指令執(zhí)行前AL=96H,則執(zhí)行后AL不變,AL-10=86H。SF=1,PF=0,ZF=0,OF=0,CF=0,AF=0注:用于比較兩個數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件判斷兩個數(shù)大?。簾o符號數(shù):根據(jù)借位標(biāo)志CF判斷。

ZF=1,AX=BX;ZF=0,AXBXCF=0,表示無借位,即AX

BX;

CF=1,表示有借位,即AX<BX;

有符號數(shù):根據(jù)溢出標(biāo)志OF和符號標(biāo)志SF兩者的異或運算結(jié)果來判斷。

OFSF=0

(OF和SF狀態(tài)相同)時,則AXBX;

OFSF=1(OF和SF狀態(tài)相異)時,則AX<BX;通常,比較指令后面跟一條條件轉(zhuǎn)移指令,檢查標(biāo)志位的狀態(tài)決定程序的轉(zhuǎn)向。

假設(shè)執(zhí)行比較指令:CMPAX,BX比較指令例例3.35理解下面的程序段,并填充結(jié)果。

MOV AX,’愛’

MOV BX,’AI’

CMP AX,BX;SF⊕OF=

,CF=

。分析:主要要理解ASCII碼、漢字內(nèi)碼,以及無符號數(shù)、有符號數(shù)的大小比較。ASCII碼最高位為0,漢字內(nèi)碼最高位為1,所以作為無符號數(shù)漢字比英文字符大,作為有符號數(shù)漢字比英文字符要小。解:SF⊕OF=1,CF=0。3.3.2.2乘除運算乘除運算共有六條指令:

MUL(無符號數(shù)乘)、IMUL(有符號數(shù)乘)、DIV(無符號數(shù)除)、IDIV(有符號數(shù)除)、CBW(字節(jié)擴展成字)、CWD(字?jǐn)U展成雙字)。1、MUL、IMUL指令:助記符MUL/IMUL基本格式MUL/IMUL

SRC數(shù)據(jù)類型B/W功能與SRC的數(shù)據(jù)類型有關(guān),SRC若為字節(jié)則為 AL*SRC送AX;SRC若為字則為AX*SRC送 DX、AX,DX保存高16位,AX保存低16位。尋址方式SRC只能是UR或M,不能為N或SR。對F影響對6個狀態(tài)標(biāo)志均有影響,但只有CF、OF有定義,其填充方法為若字節(jié)乘字節(jié)未超過字節(jié)表示范圍或字乘字未超過字范圍則CF=0、OF=

0,否則CF=1、OF=1。乘數(shù)對乘法指令主要注意:一是隱含操作數(shù):被乘數(shù)一定為AL或AX,積為AX或DX、AX,不需在指令中另行指明;二是對CF、OF的填充:無符號數(shù)只要判斷高位段是否為全0,若是則未超出范圍,有符號數(shù)只要判斷高位段是否為低位的符號位擴展,若是則未超出范圍。三是模擬計算:無符號數(shù)直接相乘即可,有符號數(shù)則需先用絕對值相乘,而后再加符號位(同號得正、異號得負(fù))。例3.36:若AL為05H、BL為F7H則MUL

BL指令執(zhí)行后AX=?CF、OF=?無符號數(shù)乘法直接相乘,所以AX= 05*F7H=04D3H、CF=1、OF=1。例3.37:若AL為05H、BL為F7H則IMUL

BL指令執(zhí)行后AX、CF、OF=?有符號數(shù)乘法先用絕對值相乘、再加符號位,所以AX=-(05*09H)=-2DH

=FFD3H、CF=0、OF=0。例:(AX)=16A5H,(BX)=0611H

(1)IMULBL

;(AX)(AL)*(BL);A5*11-(5B*11)=-060BHF9F5H;(AX)=F9F5HCF=OF=1(2)MULBX;(DX,AX)(AX)*(BX);16A5*0611=00895EF5;(DX)=0089H(AX)=5EF5HCF=OF=12、DIV、IDIV指令:助記符DIV/IDIV基本格式DIV/IDIV

SRC數(shù)據(jù)類型B/W功能與SRC的數(shù)據(jù)類型有關(guān),SRC若為字節(jié)則為AX/SRC的商送AL、余數(shù)送AH;SRC若為字則為DX、AX/SRC的商送AX、

余數(shù)送DX。尋址方式SRC只能是UR或M,不能為N或SR。對F影響對6個狀態(tài)標(biāo)志均有影響,但均無定義。指令要求被除數(shù)是除數(shù)的雙倍字長對除法指令主要注意:一是隱含操作數(shù),被除數(shù)一定為AX或DX、AX,商為AL或AX,余數(shù)為AH或DX,不需在指令中另行指明;二除法不允許出現(xiàn)除數(shù)為0或商溢出(除字節(jié)時,商超出AL或除字時,商超出AX范圍),若發(fā)生除數(shù)為0或商溢出則其結(jié)果沒有意義,并引起中斷。三是模擬計算,無符號數(shù)直接相除即可,有符號數(shù)則需先用絕對值相除,而后再加符號位商的符號為同號得正、異號得負(fù),余數(shù)的符號則與被除數(shù)相同。例3.38:若AX為1005H、BL為17H則DIV

BL指令執(zhí)行后AX=?無符號數(shù)除法直接相除,所以1005H/17H=4101/23,商為178(176+2),余數(shù)為7,即AL=B2H、AH=07H,因此AX=07B2H。例3.39:若AX為FF05H、BL為17H則IDIV

BL指令執(zhí)行后AX=?有符號數(shù)除法先用絕對值相除、再加符號位,F(xiàn)F05H的絕對值為0-FF05H=FBH=251,251/23的商為10,余數(shù)為21,商的符號為負(fù),余數(shù)的符號也為負(fù),所以AL=-10=F6H,AH=-21=EBH,因此AX=EBF6H。例3.41理解下面的程序段,并填充結(jié)果。

MOV AL,200

MOV AH,-1

MOV BL,10

IDIV BL;AX=

H,商十進制為

。AX=FFC8H=-56,BL=10,商為-5即FBH,余數(shù)為-6即FAH解:AX=FAFBH,商十進制為-5。3、CBW和CWD指令:助記符CBW/CWD基本格式CBW/CWD數(shù)據(jù)類型隱含功能CBW為將AL有符號擴展成AX/CWD為將AX有符號擴展成DXAX尋址方式隱含對F影響對標(biāo)志位無影響MOVAL,64H

;AL=64H(機器數(shù)),表示10進制數(shù)100(真值)CBW

;將符號0擴展,AX=0064H,仍然表示100MOVAX,0FF00H

;AX=FF00H,表示有符號10進制數(shù)-256CWD

;將符號位“1”擴展,DX.AX=FFFFFF00H

;仍然表示-256例:例3.40:設(shè)A,B,C,D為字節(jié)變量,且A除B不會溢出,試編寫無符號數(shù)或有符號數(shù)A/B商送C,余數(shù)送D。

;無符號數(shù)除;有符號數(shù)除MOV

AL,A

MOV

AL,AMOV

AH,0

CBWDIV

B

IDIV

BMOV

C,AL

MOV

C,ALMOV

D,AH

MOV

D,AH例:x,y,z,v均為16位帶符號數(shù),計算

(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余數(shù)→(DX)3.3.2.3

BCD修正BCD修正共有六條指令,可分為壓縮BCD碼修正指令和非壓縮BCD碼修正指令。壓縮BCD碼修正指令有:

DAA(加法修正)、DAS(減法修正)。非壓縮BCD碼修正指令有:

AAA(加法修正)、AAS(減法修正)、

AAM(乘法修正)、AAD(除法修正)。復(fù)習(xí):BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)

例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼

DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010…

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論