版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)化課程設(shè)計(jì)
- 二零二五版二零二五年度便利店連鎖經(jīng)營合同范本4篇
- 二零二五年度園林苗木種植與技術(shù)研發(fā)合同4篇
- 二零二五年房屋無證買賣及配套設(shè)施移交合同3篇
- 礦山井下爆破施工方案
- 2025年度智慧社區(qū)運(yùn)營承包協(xié)議4篇
- 2025年項(xiàng)目合作商業(yè)機(jī)密保密協(xié)議范本3篇
- 2025年度綠色生態(tài)大棚蔬菜種植與技術(shù)服務(wù)全面合作協(xié)議3篇
- 2025年度個人財(cái)產(chǎn)保險(xiǎn)合同范本下載包含意外傷害4篇
- 二零二五年度車輛抵押借款合同(含車輛交易監(jiān)管)4篇
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動化系統(tǒng)用戶操作及問題處理培訓(xùn)
- 家庭教養(yǎng)方式問卷(含評分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級語文下冊《蜘蛛開店》
- 鍋爐升降平臺管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
- 個體化健康教育記錄表格模板1
評論
0/150
提交評論