8086指令系統(tǒng)教學(xué)課件_第1頁
8086指令系統(tǒng)教學(xué)課件_第2頁
8086指令系統(tǒng)教學(xué)課件_第3頁
8086指令系統(tǒng)教學(xué)課件_第4頁
8086指令系統(tǒng)教學(xué)課件_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第二章8086的指令系統(tǒng)

第二章

8086指令系統(tǒng)

第二章8086的指令系統(tǒng)

第三章)卵86的指令系統(tǒng);1/

/x概達(dá)7/

72.1數(shù)據(jù)收送類指夕人■/

'2.2算術(shù)運(yùn)算類指令\B/

2.3位操作類指令\/

12.4控制轉(zhuǎn)移類】旨令\

|2.5串操作類指令\

12.6處理機(jī)控制類指令

要點(diǎn)與習(xí)題分析

第二章8086的指令系統(tǒng)

卜概£頭/\//

①8086的指令系統(tǒng)按功能分類可以分成六組,本章

分類逐條講解。

其在匯編語言中,指令.一屆格式為/

/標(biāo)號:]指令助記符日加操作菽,源操作數(shù)[:注釋]

其中括弧括起的部分不是必需的,為可選項(xiàng)。“標(biāo)號”

通三章詳細(xì)介紹。/\

③后面講解指令時,除前一章介紹的符號外,本書

用AX,BX…形式表示寄存器的內(nèi)容。

④學(xué)習(xí)一條指令應(yīng)掌握的內(nèi)容:指令的功能操作

數(shù)的尋址方式指令對標(biāo)志的影響避免非法指令…

3返回第二章

第二章8086的指令系統(tǒng)

2.1數(shù)據(jù)傳送指令

2.1.1麗號據(jù)傳送指令

MOV/XCHG/XLAT

卜\,2堆棧操備指令/\

PUSH/POP

/2.L3標(biāo)志傳送指令/

LAHF/SAHF/PUSHF/POPF

2.L4地址傳送指令

LEA/LDS/LES

2.1.5輸入輸出指令I(lǐng)

IN/OUT

4返回第二章

第二章8086的指令

2.1.1通用數(shù)據(jù)傳送指令

LMOV類指令V

?MOVreg/mem,imm;

?MOVseg/reg/mem,reg;

?MOVseg/reg,mem;

?MOVreg/mem,seg

2.交換指令XCHGI

3.換碼指令XLAT

52.1節(jié)目錄

第二章8086的指令系統(tǒng)

1.MOV類指令

格式1:MOVreg/mem,imm

MOVAX,2050H/MOVCL,58H

MOVBYTEPTR[BX],55H/MOVWORDPTR[BX],55H

MOVBYTEPTR[SI+05],55H''

M0VBYTIMOVBYTEPTR[BX],55H

MOVBYTE

MOVBYTEMOVWORDPTR[BX],55H

①M(fèi)OV55H,AL②MOVDH,385③MOVBX,55HV

④MOV[BX],55H—⑤MOVDS,2000H

第二章8086的指令系統(tǒng)

格式2:MOVseg/reg/mem,reg

MOVDS,AX/MOVES,AX/MOVSS,AXcs不能做目的操作數(shù)

MOVAX,BX/MOVSP,AX/MOVDH,CL/MOVAL,BH

MOV[2050H],AX/MOV[2050H],BL

MOV[BX+SI+2000H],DX/MOV2005H[BP][DI],CL

MOVDS,AL/MOVCS,AX

MOVDL,AX/MOVBX,CL/MOVSI,CH/MOVBL,DI

7

第二章8086的指令系統(tǒng)

記?。篊S不能作

目的操作數(shù)

MOVDS,[BX]/MOVES,[BP+SI+25H]

MOVAX,[2050H]AMOVAL,[2050H]

注意:MOVmem,mem形式的指令是非法指令,也就是

說,如果一條指令有兩個操作數(shù),不允許兩個操作數(shù)都

是存儲器數(shù),如下列指令為非法指令:

MOV[BX],[2050H]/MOV[2050H],[BX+SI]

該項(xiàng)規(guī)定不僅適用于“MOV”類指令,也適用于其他各

類指令(串操作除外)。

8

第二章8086的指令系統(tǒng)

CS可以作源操作數(shù)

格式4:MOVreg/mem,seg

MOVAX,DS/MOVBX,ES/MOVAX,CS

MOV[SI],DS/MOV[BX+SI],C£MOV[BX]「[2050H]

“MOV”類指令小結(jié):/

①立即數(shù)只能作源操作數(shù),且要與目,作數(shù)匹配。

②兩個操作數(shù)類型要匹配。i/

③如匯編程序無法確定操作類型,要;口類型說明符。

④CS一般不能作目的操作數(shù)(用轉(zhuǎn)移口令改變)。

⑤如果指令有兩個操作數(shù),不允許兩個都是存儲器數(shù)。

⑥上述四類格式以外的指令必定是非法指令。

⑦所有“MOV”類指令均不影響標(biāo)志。

9返回2.1.1

第二章8086的指令系統(tǒng)

2.交換指令XCHG___________

;將操作數(shù)格式“mem,menT排除在外!

例:XCHGAX,BX/XCHGDH,CL

XCHGCX,[2000H]/XCHG[BX+SI],AL

交換指令不影響標(biāo)志。

3.換碼指令XLAT_______________

指令格式:XLAT;ALTDSX16+BX+AL]

該指令的操作數(shù)是隱含的(AL),且尋址方式可

理解為寄存器相對尋址,偏移量在AL中。

該指令又稱“查表指令”,通常用于編寫查表程序。

換碼指令不影響標(biāo)志。

10

第二章8086的指令系統(tǒng)

查表示意圖

查表步驟(求某數(shù)的平方)

①在內(nèi)存中建立數(shù)據(jù)表格;

②將表格的首地址送入BX中;

25③假定要求“3”的平方,將3送

16

寄存器AL中;

09④執(zhí)行指令XLAT;

04

表格首地址⑤執(zhí)行:ALTBX+3](DS)

01執(zhí)行結(jié)束:AL=9o

XXXXH00AL中的內(nèi)容被“換碼”!

112.1節(jié)目錄

第二章8086的指令系統(tǒng)

2.1.2堆棧操作指令

.能夠?qū)崿F(xiàn)“后進(jìn)先出(先進(jìn)后出)的存儲器組織

(或存儲器塊)稱為堆棧。

引入堆棧:以三層子程序嵌套為例,逐級進(jìn)入子程

序時,A、B、C三點(diǎn)都有斷點(diǎn)和現(xiàn)場需要保護(hù),順序?yàn)?/p>

A-B-C;當(dāng)子程序sub3執(zhí)行結(jié)束,逐級返回時,

最后被保護(hù)的C點(diǎn)數(shù)據(jù)應(yīng)

最先恢復(fù),最先保護(hù)的A

點(diǎn)數(shù)據(jù)應(yīng)最后恢復(fù)。為此,

通常在內(nèi)存中開辟一段區(qū)

域,結(jié)合軟硬件技術(shù),使

其具有保護(hù)數(shù)據(jù)和后進(jìn)先

出的功能。此為堆棧。

12

第二章8086的指令系統(tǒng)

8086堆棧管理:8086使用段寄存器SS和指針寄

存器SP管理堆棧,SS決定了堆棧區(qū)的首地址,SP的初始

值決定了堆棧區(qū)的末地址,堆

棧區(qū)的最大長度隨之而定。數(shù)

據(jù)入棧時,SP做減量調(diào)整,SP

SS:SP

腹示的單元稱為“棧頂”,即

數(shù)據(jù)入棧

堆頂向下延伸;SP永遠(yuǎn)指向剛剛

:區(qū)入棧的數(shù)據(jù)。數(shù)據(jù)出棧時,SP

做增量調(diào)整,即棧頂向上延伸

fp永遠(yuǎn)指向?qū)⑵?/p>

SS:OOOOH

數(shù)據(jù)出棧

完,SP恢復(fù)初始值。

13

第二章8086的指令系統(tǒng)

“rl6/ml6/seg”作為源操作數(shù),

jg\\f/

棧中的存儲單元作為目的操作數(shù),指令操作如下:

①SP-SPT,SS:[SP]-src高8位

②SP-SPT,SS:[SP]-src低8位

例LPUSIL1BXL(設(shè)DS:[BX]字單元料用力?5AAH)

SS:[SP]xxH1xxH

xxH55H

xxHSS:[SP]AAH

指令執(zhí)行前指令執(zhí)行后

14

第二章8086的指令系統(tǒng)

2.POPrl6/ml6/seg“rl6/ml6/seg”應(yīng)看作目的操作

致,

堆棧中的單元看作源操作數(shù),指令操作如下:

①dest低8位—SS:[SP],SP-SP+1/

②dest高8位-SS:[SP],SP-SP+1

例2:POPBX;設(shè)接在例1后執(zhí)行。

xxH55AAH

55HBX

SS:[SP]—>AAH

指令執(zhí)行前

15

第二章8086的指令系統(tǒng)

使用堆棧指令:

①堆棧操作是字操作指令,不要寫出“PUSHAL”等。

②在“POP”指令中,“POPCS戰(zhàn)令。

③堆棧中的數(shù)據(jù)彈出后,數(shù)扼PUSHBXF棧中消失,

PUSHDS

除非壓入新數(shù)據(jù),畫圖時5

④堆棧操作指令不影響標(biāo)志:

④使用堆棧指令保護(hù)和恢復(fù)1POPDS注意指令的

POPBX

排列順序,如:POPAX

162.1節(jié)目錄

第二章8086的指令

2.1.3標(biāo)志傳送指令

1.標(biāo)志寄存器傳將

;AH-標(biāo)志寄存器低8位,即SF/ZF/AF

;PF/CF送AH相應(yīng)位,不影響標(biāo)志。

;標(biāo)志寄存器低8位一AH,該條指令影

;響前五個標(biāo)志。\

|;標(biāo)志寄存器入棧,不影響標(biāo)志。

;標(biāo)志寄存器一SS:[寄],SP-SP+2;

;該指令影響標(biāo)志。

17

第二章8086的指令系統(tǒng)

2.標(biāo)志杼\//

(1)CF標(biāo)志

CLC;CF-0STC;CF-1CMC;CF-CF-

(2)』F標(biāo)志(串操作指令使向)\/

CLD;DF-0STD;DF-1

(3)IF標(biāo)志(控制可屏蔽中斷能否被響應(yīng))

CLI;IF-0STI;IF-1

注釋:對其他標(biāo)志沒有提供直接修改的指令,但是

如果必要,可以用前述的四條標(biāo)志傳送指令結(jié)合邏輯運(yùn)

算指令進(jìn)行修改。

182.1節(jié)目錄

第二章8086的指令系統(tǒng)

2.1.4地址傳送指令

1.有效地址傳送指令LEA

r16-mem所指單元的偏移地址

例:設(shè)取二0400H,si=003CH

LEABP,[2050h];執(zhí)行后BP=2050H

LEABP,[SI];執(zhí)行后_BP=003CH

LEABX,[BX+SI];執(zhí)行后BX=043CH

LEABX,[BX+SI+0F62H];執(zhí)行后BX=139EH

備注:①指令中一16”常用的寄存器是BX、BP、SI、Dio

一般不使用其他寄存器。

②指令中源操作數(shù)常用的是變量名,而不是上面

例子中例舉的形式,如:LEABX,W0RD_VARo所以,本

條指令常被描述為“取變量的偏移地址,,屬常用指令。

19

DSxl604000H

BX0100H

SI+0200H

DSSI

04300H

?04300H

示意圖:LDSSI,[BX+SI]

20

第二章8086的指令系統(tǒng)

3.指針傳送指令LES

LESrl6,mem;rl6-mem,ES^mem+2

操作解釋:基本與“LDS”指令相同,不同的是把段寄存

器/\/\/

DS換成ES。

其他問題:①“LEA”指令的作用為取偏移地址,

注意與“MOV”指令區(qū)別:2050H

設(shè)SF2050H,DS:[2050H](DS:

則“LEABX,[SI]”執(zhí)行后,BX,3AAM

“MOVBX,[SI]”執(zhí)行后,BX=

②“LDS”的rl6常用SI;“LES”中,rl6常用DI。

③地址傳送指令不影響標(biāo)志。

212.1節(jié)目錄

第二章8086的指令系統(tǒng)

2.1.5輸入輸出指令

1.輸入指令

?INAL,i8字節(jié)輸入,AL一端Di8

?INAX,i8字輸入,AL一端口18,AH一端口18+1

?INAL,DX字節(jié)輸入,AL一端口中乂]

?INAX,DX字輸入,AL一端口[。乂],AH-DDX+1]

注釋:①“i8”從形式上來說是立即數(shù),實(shí)際上是端口

址,因而指令的尋址方式為直接尋址。

②"MOV”指令中,直接尋址要加中括號,輸入輸出指令

不加。(MOVAL,[2000H];INAL,25H)

③第三、四兩條指令為寄存器間接尋址,但對DX不加中

括號。(moval,[bx];inal,dx)

22

第二章8086的指令系統(tǒng)

2.輸出指令

?OUTi8,AL字為輸出,端Dig-AL/

?OUTi8,AX字輸出,端Dig-AL,端Dig+l-AH

?OUTDX,AL字節(jié)濡出,端口回]71/

?OUTDX,AX字輸出\端口加乂]一人1[DX+L-AH

注釋:①輸入輸出指令從尋址方式來說分成兩種:

直接尋址和寄存器DX間接尋址。如果要訪問的端口地址

在0?255之間,既可以用直接尋址,也可以用DX間接尋

址;如果要訪問的端口地址2256,則只能用DX間接尋

址。②另外,輸入輸出指令中可用的數(shù)據(jù)寄存器只能是

AL和AX,其他寄存器不可使用。③不影響標(biāo)志。

23

第二章8086的指令系統(tǒng)

例題:(對錯混合)

1.INAL,205H(X)7.MOVAX,55AAH

2.INAX,2OHMOVDX,3FCH

3.INAL,25HOUT[DX],AX

4.INAH,OFFH(X)8.MOVAH,86

5.MOVDX,2050HOUT25H,AH

OUTDX,AL9.INAL,25H

6.MOVDX,2050HMOVBL,AL

INBX,DX(X)INAL,36H

(OUTDX,BX)(X)MOVBH,AL.

242.1節(jié)目錄

第二章8086的指令系統(tǒng)

2.2算術(shù)運(yùn)算指令\//

2.2.1加法承令V/

ADD/ADC/INC./

,2.2.2減法指令/\1/

'SUB/SBB/DEC/NEG/CMP\

I2.2.3乘法指令MUL/IMRB

I2.2.4除法指令_______DIV/IDIV\■

I2.2.5符號擴(kuò)展指令CBW/CWDI

I2.2.6十進(jìn)制調(diào)整指令

(BCD)/DAA/DAS/AAA/AAS/AAM/AAD

返回第二章

25

第二章8086的指令

2.2.1加法指令

1.ADD

;dest#dest+src

;排除操作數(shù):mem,mem

2.ADC

指令格式同ADD;dest-dest+srcHSB

3.INC

INCreg/mem;reg/mem-reg/mem+1

26

第二章8086的指令系統(tǒng)

注釋:\//

①加法指令對標(biāo)志的影響:ADD和ADC指令對所有的6

個狀態(tài)標(biāo)志都有影響,INC指令不影響CF,影響其他五

個標(biāo)志。學(xué)習(xí)加減法指令要會設(shè)置標(biāo)志、使用標(biāo)志。

②加減法運(yùn)算要注意OF和CF的意義不同,用法不同。

例題:(對錯混排)

ADDAL,25HADDBYTEPTR[BX],05

ADDAL,125HADDWORDPTR[BX],05

ADDAX,2500HADD[BX],2050H

ADDAX,05ADDAL,BL

ADD[BX],05ADDCH,DL

第二章8086的指令系統(tǒng)

前面所有指令都可以換成

ADDBH,CXADCo對于多字節(jié)加法,最低字

ADDAX,DX節(jié)(字)可以用ADD,剩下的應(yīng)

ADDSI,BP使用ADC。如用xax)+(sidi)

ADDAX,DI;低16位相加

ADDBX,[BX+SI]ADCDX,SI;高16位相加+CF

ADDDX,[BX+DI]

INC25H

ADDAX,[BX+BP]INCAL"\.

ADAAX、「SI+DI]

INCCX

ADDINC[BX+SI]

[BP+DI+205H],ALINCBYTEPTR[BX+SI]

ADD[BP+SI],CXINCWOREPTR[BX+DI+25]

ADD[BX],GSI+05H]

28

第二章8086的指令系統(tǒng)

?:?加法指令標(biāo)志設(shè)置

,設(shè)AL=76H\ADDAL,65H

01110110

+01100101

11011011

AL=0DBH,0F=l,SF=l,ZF=0

AF=0,PF=0,CF=0

OF=1:I只對有符號數(shù)運(yùn)算有意義??醋饔蟹枖?shù)

是+118+101,應(yīng)等于+219,大于+127,因而溢出。

CF=0:只對無符號數(shù)運(yùn)算有意義。118+101=219,

219<255,無進(jìn)位。

29

第二章8086的指令系統(tǒng)

加法指令OF設(shè)置方法:

①(正+負(fù))或(負(fù)+正)永遠(yuǎn)不會溢出,0F二0。

②正+正,結(jié)果為正(符號位為0),0F=0o

結(jié)果為負(fù)(符號位為1),0F=lo

③負(fù)+負(fù),結(jié)果為負(fù)(符號位為1),0F=0o

結(jié)果為正(符號位為0),0F=lo

計(jì)算OFCH+0FBH

11111100

+11111011

111110111

看作有符號數(shù)運(yùn)算:(-4)+(-5)=(-9)A0F=0

看作無符號數(shù)運(yùn)算:252+251=503,CF=1

30返口2.2

第二章8086的指令

2.2.2減法指令

1.SUB

SUBreg/mem,imm;dest-dest-src

ireg/mem,reg/mem

;dest-dest-src

;排除操作數(shù):mem,mem

2.SBB

指令格式同SUB;dest-dest一src一典

3.DEC

DECreg/mem;reg/mem-reg/mem-1

31

第二章8086的指令系統(tǒng)

減法指令用法//

①SUB、SBB、DEC三條指令的指令格式以及基本

用法與ADD、ADC、INC相同。

產(chǎn)SUB和SBB影響所有六個狀春志:

/AF為半借位,CF為曲;\

/其余4個標(biāo)志的含義向加法指令。\

③DEC不影響CF標(biāo)志,影響其他五個標(biāo)志。

32

第二章8086的指令系統(tǒng)

OF和CF標(biāo)段置:\//

I①OF僅僅對有符號數(shù)運(yùn)算有意義。/

(正數(shù)sub正數(shù))或(負(fù)數(shù)sub負(fù)數(shù))OF=0

正數(shù)sub負(fù)數(shù),結(jié)果的符號位為0,OF=0

結(jié)果的符號位為1,OF=1

負(fù)數(shù)sub正數(shù),結(jié)果的符號位為1,OF=0

結(jié)果的符號位為0,OF=1

/②CF設(shè)置:(借位標(biāo)僅僅對無符號數(shù)運(yùn)算有意

義,對有符號數(shù)運(yùn)算無意義。)

夠減CF=0;不夠減CF5

33

第二章8086的指令系統(tǒng)

4.NEG求補(bǔ)指令

NEGreg/mem;reg/mem-0—reg/mem

①”求補(bǔ)運(yùn)算”一般表達(dá)為“取反加一”,與“零減”

等同。例如,將8位二進(jìn)制數(shù)表示為XXXXXXXXB,

O-XXXXXXXXB=(1111HUB+1)-XXXXXXXXB即

11111111X=01-X=1

X=11-X=O

即i-x=r

結(jié)論:0-X=X+1(x為二進(jìn)制數(shù))

34

第二章8086的指令系統(tǒng)

②NEG相當(dāng)于減法指令,標(biāo)志設(shè)置與減法指令相同;

(只有對零求補(bǔ),CF=0,其他情況CF=1)

(設(shè)字長為8位,對-128求補(bǔ)時,QF=1,其它OF=0)

例1:設(shè)AL=10101010B執(zhí)行NEGAL;

AL=0101O1O1B+1=O1O1O11OB

例2:設(shè)DS:[BX]二(-4)補(bǔ)二Uli1100

執(zhí)行NEGBYTEPTR[BX]后

則DS:[BX]=OOOO0100=+4(-4的絕對值);

結(jié)論:對一個負(fù)數(shù)的補(bǔ)碼求補(bǔ),得到該負(fù)數(shù)的絕

對值。

(其實(shí),反過來也一樣,對+4執(zhí)行NEG指令,將得

到-4的補(bǔ)碼。)

35

第二章8086的指令系統(tǒng)

5.CMP

CMPreg/mem,imm;dest-src

CMPreg/mem,reg/mem

;排除操作數(shù):mem,mem

;dest-src

與減法指令不同的是不保留運(yùn)算結(jié)果,即不改變目

的操作數(shù),只根據(jù)運(yùn)算結(jié)果設(shè)置標(biāo)志。

該指令常用來比較兩數(shù)大小。執(zhí)行CMPdest,src

無符號數(shù)比較:CF=Odest三src

CF二]dostsrc

有符號數(shù)比較,情況較為復(fù)雜,在條件轉(zhuǎn)移指令介紹。

36

第二章8086的指令系統(tǒng)

2.2.3乘法指令

L無符號數(shù)乘法指令!

岫||■陋晤A(yù)X-ALXr8/m8,字節(jié)乘

MULrl6/ml6;DX,AX-AXXrl6/ml6,字乘

注釋:①指令指定的是乘數(shù),被乘數(shù)是隱含的。如乘

數(shù)類型為字節(jié),則被乘數(shù)為AL,16位乘積用AX;如乘數(shù)

類型為字,則被乘數(shù)為AX,32位乘積用DX,AXo

②影響CF、OF標(biāo)志:如果乘積的高一半為零,則

CF=0F=0,否則,CF=0F=lo對其他標(biāo)志無定義。

37

第二章8086的指令系

例題:無符號數(shù)0B4H與HH相乘

MOVAL,0B4H;180D

MOVBL,HH;17D

MULBL;AX=3060D,CF=OF=1(乘積高8位不為零)

用兩條指令是否可以?

MOVAL,0B4H;

MUL@YTRPT2[BX+SI]

MULHH

其他指令:MULWORDPTEIBX+SI]

MUL[BX+SI]

;當(dāng)乘數(shù)為存儲器操作數(shù)

38

第二章8086的指令系統(tǒng)

2.有符號數(shù)乘法指令

IMULr8/m8;AX-ALXr8/m8

IMULrl6/ml6;DX,AXAXXrl6/ml6

①指令用法與“MUL”指令基本相同,只是專用于有符號

數(shù)的相策。

②CF=OF=0,乘積的高,半為低二手的符號擴(kuò)展(不

是有效乘積);CF=OF=1,則乘積的高一半為乘積的一

部分。對其他狀態(tài)標(biāo)志無定義。

③相同的二進(jìn)制數(shù),看作無符號數(shù)相乘與看作有符號數(shù)

相乘,結(jié)果是不同的。如OB4H與11H相乘,使用“MUI?

指令,結(jié)果為OBF4H(無符號數(shù)3060);如使用IMUL指令,

則結(jié)果為0FAF4H,將其看作補(bǔ)碼,真值為-1292。

39返回2.2

第二章8086的指令系統(tǒng)

L2.2.4除法揖令/X//

1.無符號數(shù)底法才聆DIV\J/

TVr8/m8;■-AX+r8/m8的商,AH―余數(shù)

IVrl6/ml6;1-DXAX+rl6/ml6的商,DX―余數(shù)

①指令指定的是除數(shù),被除數(shù)是隱含的;除數(shù)為字節(jié),

則稱為“字節(jié)除”,被除數(shù)使用AX;除數(shù)為字,稱為

“殳除”,被除數(shù)使用我AX。\

②操作數(shù)的格式與乘法指令相同。

③指令對狀態(tài)標(biāo)志無定義。

40

S1=S2S3=l與高8位被除

數(shù)對應(yīng)的商

2.有符號數(shù)ES1>S2S3>1

IDIVr8/m8:ALS3

IDIVrl6/ml6:A

①專用于有符號婁

8位除數(shù)高8位低8位

②除法指令的溢HS2S1

除數(shù)為零

字節(jié)除時,被除數(shù)的高8位之除數(shù)(商>8位)

字除時,被除數(shù)的高16位之除數(shù)(商>16位)

有符號數(shù)情況類似。當(dāng)產(chǎn)生除法溢出,CPU自動產(chǎn)

生“0號”中斷,運(yùn)行相應(yīng)中斷服務(wù)程序。程序設(shè)計(jì)時,

應(yīng)避免產(chǎn)生除法溢出。

41返回2.2

第二章8086的指令系統(tǒng)

2.2.5符封展指令\//

1.字節(jié)擴(kuò)展為字?WX/

將的若號位擴(kuò)展到

CBW;ALAH/

2.字?jǐn)U展為雙字CWD/\/

將的符號位擴(kuò)展到

CWD;AXDX\

注釋:①注意符號擴(kuò)展涉及的對象是AL和AH以及AX

和DX,與其他寄存器無關(guān)。

②用來為有符號數(shù)除法準(zhǔn)備被除數(shù)(16位被除數(shù)和32

位被除數(shù))。

③為無符號數(shù)除法準(zhǔn)備被除數(shù).......

42

第二章8086的指令系統(tǒng)

符號擴(kuò)展說明

例如,ALVBL,由于CPU使用AX作被除數(shù),故必須

將AL中的被除數(shù)擴(kuò)展到AX中。如果做有符號數(shù)除法,應(yīng)

使用符號擴(kuò)展指令CBW;如果做無符?數(shù)除法,/應(yīng)使AH為

0(xorah,ah或andah,0/movah,0等)。

做AX+BX,應(yīng)使用同樣的方法處理被除數(shù),即將符

號擴(kuò)展到DX,或使DX中為0。

/除法指令舉例:/\

divbl/divbyteptr[bx_

idivex/idivwordptr[bp+si_

div2050h(X)div[bx](X)

43返回2.2

第二章8086的指令系統(tǒng)

2.2.6十進(jìn)制(BCD碼運(yùn)算)調(diào)整指令

①壓縮的BCD碼:一個字節(jié)存放兩位BCD碼,如“0110

1001”(69H),如看成壓縮的BCD碼,即為十進(jìn)制數(shù)

69o一個字節(jié)的壓縮BCD碼可表示的數(shù):00?99。

②非壓縮的BCD碼:一個字節(jié)存放一位BCD碼,該字節(jié)

低4位為合法的BCD碼,高4位未定義。如“01101001”,

看成壓縮的BCD碼,是69;看成非壓縮的BCD碼,是9。

另外:※高4位通常用0表示。(00001001)

派0?9的ASCII碼也可看成非壓縮的BCD碼。

00110000,00110001...............00111001

44

第二章8086的指令系統(tǒng)

補(bǔ)充:調(diào)整原理做BCD碼運(yùn)算9+9

做BCD碼運(yùn)算9+6、00001001

00001001■+^ML001001

+00000110I非法BCD00010010

00001111-0000110

+/0000110o\)i1B00

/oooi0101

9+6應(yīng)該等于15,即應(yīng)為;正確結(jié)果應(yīng)等于18,即

00010101,現(xiàn)得到一個非i00011000,現(xiàn)等于00010010,

誥咆強(qiáng);/安物%6,i試做加6調(diào)整,得正確結(jié)果。

加6后,倚到了市確結(jié)巢。:

45

第二章8086的指令系統(tǒng)

BCD碼加核運(yùn)算,當(dāng)\//

.結(jié)果大于9叫或AF或CF等于14

聲要做加6調(diào)“。/

原因:用二進(jìn)制數(shù)運(yùn)算規(guī)律進(jìn)行十進(jìn)制數(shù)運(yùn)算。一

位十進(jìn)制數(shù)逢十進(jìn)一,四位二進(jìn)制數(shù)逢十六進(jìn)一,力口6

是為了1)強(qiáng)迫進(jìn)位;2)補(bǔ)充進(jìn)位多帶走的6。

BCD碼減法運(yùn)算:夠減時不需要調(diào)整;AF或CF為

1時(有借位),需要做減6調(diào)整,抵消多借的6。

46

第二章8086的指令系統(tǒng)

1.壓縮BC四調(diào)整指令、//

①加法調(diào)整DAA\/

DAA;判斷AL中的結(jié)果(低4位和高4位)是否需

要調(diào)整,若需要,做加6調(diào)整;若不需要,做下一條指

令。

注釋:

?:?如果做BCD碼加法運(yùn)算,ADD、ADC指令后

應(yīng)緊跟DAA指令,以保證結(jié)果正確。

。調(diào)整對象只能是AL寄存器(BCD碼運(yùn)算只能

使用以AL寄存器為目的操作數(shù)的8位數(shù)運(yùn)算

指令)。

對OF標(biāo)志無定義,設(shè)置其他標(biāo)志。

47

第二章8086的指令系統(tǒng)

②減法調(diào)整DAS

DAS:判斷AL中的結(jié)果(低4位和高4位)是否需

要調(diào)整,若需要,做減6調(diào)整;若不需要,做下一條指

令。

注釋:.\/\■/

。如果做BCD碼減法運(yùn)算,SUB、SBB指令后

應(yīng)緊跟DAA指令,以保證結(jié)果正確。

。調(diào)整對象只能是AL寄存器(BCD碼運(yùn)算只能

使用以AL寄存器為目的操作數(shù)的8位數(shù)運(yùn)算

指令)。

。對OF標(biāo)志無定義,設(shè)置其他標(biāo)志。

(關(guān)于BCD碼符號問題省略)

48

第二章8086的指令系統(tǒng)

2.非壓縮BCD碼調(diào)整指令

⑴加法調(diào)整AAA

AAA;操作如下:

①(AL低4位s9)且AF=O,不需要調(diào)整,將AL高4

位清零,置CF=AF=O,結(jié)束指令。

②如(OAHwAL低4位)或AF=L貝ljAL+6(調(diào)整),

AH+1(將進(jìn)位記到高位),將AL高4位清0,置

CF=AF=1,結(jié)束指令。

設(shè)AH=06,AL=08,BL=09執(zhí)行下列指令

ADDAL,BL;AH=06H,AL=11H,AF=1,CF=O

AAA;AH=07H,AL=07H,AF=1,CF=1

49

第二章8086的指令系統(tǒng)

⑵減法調(diào)整AAS

AAS;操作如下:

①(AL低4位w9)且AF=O/不需要調(diào)整,將AL高4

位清零,置CF=AF=O,結(jié)束指令。

②如果AF=L則AL-6,AH-1,AL高4位清0,

gAF=CF=lo/\

設(shè)AX=0608HBL=09H執(zhí)行下列指令

SUBAL,BL;AH=06,AL=OFFH,AF=1,CF=1

AAS;AH=05,AL=09;AF=1,CF=1

A0608H-09H-68—9=59。

只有AF=1,AL在A?F間

50

第二章8086的指令系統(tǒng)

⑶乘法調(diào)塞設(shè)AL=07H,BL=09H執(zhí)行指令:

AAM;3MULBL;AH=O,AL=3FH(63)

;

注釋:①只能4AAMAH=06H,AL=03H

;AX=0603H:63的非壓縮BCD碼

②相乘的兩彳

③相乘后先得到二進(jìn)制數(shù)乘積(最大9x9=81),在

寄點(diǎn)器AL中(低4位);/\

④調(diào)整:將AL中的數(shù)小OAH,商放入AH,余數(shù)保

存在AL中,在AX寄存器即得到結(jié)果的非壓縮BCD碼。

⑤本指令根據(jù)AL內(nèi)容設(shè)置SF\ZF\PF,其余無定義。

例題:

51

第二章8086的指令系統(tǒng)

(4)除法調(diào)\//

AAD;AX一將AX中的非壓BCD碼變成二進(jìn)制數(shù),即

;AL<-AHX10+AL,AH—0

注w其他調(diào)整指令先運(yùn)算介詞整;除法調(diào)整是先

調(diào)整/后運(yùn)算。\\/

MOVAX,0608H;68的非壓縮BCD碼,被除數(shù)

MOVBL,09H;除數(shù),非壓縮BCD碼9

AAD;AH=0,AL=10X6+8=68=44H

;AX=0044H:變成二進(jìn)制數(shù)的被除數(shù)

DIVBL;AL=07(商);AH=05(余數(shù))

52返回2.2

第二章8086的指令系統(tǒng)

2.3位操作指令

^^3.1邏輯運(yùn)算指令、

/AND/OR/X(^/N(WTEST

2.3.2移位指令

SHL/SHR/SAL/SAR

■2.3.3循環(huán)移位指令

ROL/ROR/RCL/RCR

53返回第二章

第二章8086的指令系統(tǒng)

23」…邏輯運(yùn)算指金

1.與運(yùn)算指令A(yù)ND

ANDreg/mem,imm

ANDreg/mem,reg/mem排除操作數(shù)”mem,mem”

注釋:①操作數(shù)格式同加減法指令;

②設(shè)置CF=OF=0,影響SF、ZF、PF,對

AF無定義。

2.或運(yùn)算指令OR

JR.K注JBLJR.釋JVLJ:BLJKJK.JR指.JKKJR.K令JKJVLdJ格VL;JBLKJ式K.—、標(biāo)志設(shè)置同AND指令。?

3.異或運(yùn)算指令XOR

■■■■■■■■■■■■MMWaHMMaMaBaflBMBMBMaMM'MMkmWWBMMMMBMBaaBMBMBMBMBMMMaaM

注釋:指令格式、標(biāo)志設(shè)置同AND指令。

54

第二章8086的指令系統(tǒng)

4.測試指令TEST

注釋:指令格式及運(yùn)算均與AND指令相同,'但是不

保留運(yùn)算結(jié)果,即不影響目的操作數(shù),只根據(jù)運(yùn)算結(jié)果

設(shè)置標(biāo)志。\/\1

5.非運(yùn)算指令NOT/■\

NOTreg/mem

注釋:不影響任何標(biāo)志。

下面舉例說明邏輯運(yùn)算指令的應(yīng)用O

55

第二章8086的指令系統(tǒng)

①屏蔽若干位0—C常用指令入//

ANDAL,01H;屏蔽AL的D7?DL保留DO

A'DAL,0FH;\^蔽AL高4叫保留低4位

②使套干位置1(常由指令)/\/

ORBL,0F0H;使BL高4位置L低4位不變

③清除CF、OF或設(shè)置標(biāo)志

■?-W?W*W?W*W?W?-a>?-W?-M?W*-W?-W?-W?W?W?W?-M?W?-W?-W?-W?w?w?w?w*w?w*w?w?w?w?w*w?w?w?w*

ANDAL,AL(ANDAL,OFFH;ORBL,BL;........)

;類似指令沒有改變目的操作數(shù),但使CF=OF=0,也

可能純粹以設(shè)置其他標(biāo)志(ZF)為目的。

56

第二章8086的指令

④求反NOPAL/NOTWORDPTR[BX+DI]

⑤對指定位求反

XORAL,OFH;AL高4位不變,低4位求反

XORCL,55H;CL偶數(shù)位求反,奇數(shù)位不變

3清除寄存器及CF(常話指令)\

XORAX.AX/XORBX,BX

XORBYTEPTR[BX],BYTEPTR[BX]X

57

第二章8086的指令系統(tǒng)

⑦不改變操作數(shù),測試操作數(shù)或操作數(shù)的指定位

TESTAL,OFFH;由ZF標(biāo)志判斷AL是否為零

」也可以用CMP指令。/

TESTAL,01;由ZF標(biāo)志判斷AL的DO是否為零,

;ZF=1,則AL.D0=0

;ZF=O,則AL.DO=1

ANDAL,01;也可完成上述功能,但是改變了目

;的操作數(shù)

58返回2.3

第二章8086的指令系統(tǒng)

共四條指令,分成邏輯左移、算術(shù)左移、邏輯右移

和算術(shù)右移,其中兩條左移指令對應(yīng)同一條機(jī)器指令,

所以,從機(jī)器指令的角度來說,移位指令只有三條。

SHL/SALCF?MSB>LSBP0

符號位不變

SAR

59

第二章8086的指令系統(tǒng)

1.左移指令(邏輯左移、算術(shù)左移:一條指令)

2.右移指令(邏輯右移SHR;算術(shù)右移SAR)

-—JKJK.X-JKJKJKiJrjarjaraKr

;位數(shù),最高位不變,最低位進(jìn)CF。

60

第二章8086的指令系統(tǒng)

,注粽//

①標(biāo)志設(shè)量V\//

AF:對AF無定義;

CF:按移入的值最為0或?yàn)?;\/

根據(jù)移位后的結(jié)果設(shè)置SF、ZF、PF;'

OF:當(dāng)移動一位時,移位后如果符號位發(fā)生變化,

則OF=1,符號位不發(fā)生變化,則OF=0,移位次數(shù)大于一

時,OF不定。

②操作數(shù)左移一位,相當(dāng)于乘2(對有符號數(shù)同理,

只要OF=0,結(jié)果就對)。

61

第二章8086的指令系統(tǒng)

③操作數(shù)邏輯右移(SHR)二位,相當(dāng)于無符號

數(shù)除以5;藻祚教真采云花(SAR)一位,相當(dāng)才有符

號數(shù)除以2。\/

指令舉例

SHLAX,1/

SARBYTEPTR[BP+SI],1

SHRBH,1

SARAL,3

MOVCL,3

SARAL,CL

62返回2.3

第二章8086的指令系統(tǒng)

小循環(huán)(不帶進(jìn)位)左移(ROL)和右移(ROR)

JH.JK.JX..".?,?.?■.JR.J>CJBg

大循環(huán)(帶進(jìn)位)左移(RCL)和右移(RCK)

ROL

ROR

RCL

RCR

63

第二章8086的指令系

1.小循環(huán)移位指令ROL、ROR

ROLreg/mem,1/CL;左移

RORreg/mem,1/CL;右移

2.大循環(huán)移位指令RCL、RCR

RCLreg/mem,1/CL;左移

RCRreg/mem,1/CL;右移

例L將DX,AX中的32位數(shù)左移一位。

SHLAX,1DXAX

n

RCLDX,1U

移位指令和循環(huán)移位指令結(jié)合,可實(shí)現(xiàn)32位數(shù)乘2除2。

64返回2.3

第二章8086的指令系統(tǒng)

2.4控制轉(zhuǎn)移類

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論