lec08 算術(shù)邏輯運(yùn)算類指令_第1頁(yè)
lec08 算術(shù)邏輯運(yùn)算類指令_第2頁(yè)
lec08 算術(shù)邏輯運(yùn)算類指令_第3頁(yè)
lec08 算術(shù)邏輯運(yùn)算類指令_第4頁(yè)
lec08 算術(shù)邏輯運(yùn)算類指令_第5頁(yè)
已閱讀5頁(yè),還剩24頁(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)介

1、第第 08 講講 8086 / 8088指令系統(tǒng)指令系統(tǒng) 算術(shù)運(yùn)算算術(shù)運(yùn)算&邏輯運(yùn)算類指令邏輯運(yùn)算類指令1.數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令2.算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令3.邏輯運(yùn)算邏輯運(yùn)算類類指令指令4.串處理串處理類類指令指令5.控制轉(zhuǎn)移控制轉(zhuǎn)移類類指令指令6.處理機(jī)控制指令處理機(jī)控制指令8086/8088的指令系統(tǒng)的指令系統(tǒng)重點(diǎn)關(guān)注重點(diǎn)關(guān)注: 指令的指令的匯編格式匯編格式 指令的指令的基本功能基本功能 指令指令支持的尋址方式支持的尋址方式 指令的執(zhí)行指令的執(zhí)行對(duì)標(biāo)志位的影響對(duì)標(biāo)志位的影響 指令的指令的特殊要求特殊要求算術(shù)運(yùn)算類指令:算術(shù)運(yùn)算類指令: 加法指令加法指令 ADD、ADC

2、、INC 減法指令減法指令 SUB、SBB、DEC、NEG、CMP 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 DAA、DAS、 AAA、AAS、AAM、AAD 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (SRC) + (DST) 帶進(jìn)位加法指令:帶進(jìn)位加法指令: ADC DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 執(zhí)行操作:執(zhí)行操作: (OPR) (OPR) + 1注意注意: * 都影響狀態(tài)標(biāo)志位

3、,但都影響狀態(tài)標(biāo)志位,但 INC指令指令不影響不影響CF標(biāo)志位。標(biāo)志位。 減法指令減法指令減法指令:減法指令: SUB DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (DST) - (SRC)帶借位減法指令:帶借位減法指令: SBB DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (DST) - (SRC) - CF減減1指令:指令: DEC OPR 執(zhí)行操作:執(zhí)行操作: (OPR) (OPR) - 1求補(bǔ)指令:求補(bǔ)指令: NEG OPR 執(zhí)行操作:執(zhí)行操作: (OPR) - (OPR)比較指令:比較指令: CMP OPR1, OPR2 執(zhí)行操作:執(zhí)行操作: (OPR1) - (OP

4、R2)注意注意: * 除除DEC指令指令不影響不影響 CF標(biāo)志外,均對(duì)狀標(biāo)志外,均對(duì)狀 態(tài)標(biāo)志位有影響態(tài)標(biāo)志位有影響?!纠?2 17】 試分析如下指令執(zhí)行結(jié)果及標(biāo)志位的狀態(tài)試分析如下指令執(zhí)行結(jié)果及標(biāo)志位的狀態(tài)MOV BX,0 ; (BX)=0,不影響標(biāo)志位,不影響標(biāo)志位DEC BX ; (BX)=0FFFFH,CF不影響、不影響、PF=1、AF=1、ZF=0、SF=1、OF=0INC BX ; (BX)=0,CF不影響、不影響、PF=1、AF=1、ZF=1、SF=0、OF=0SUB BX,1 ; (BX)=0FFFFH,CF=1、PF=1、AF=1、ZF=0、SF=1、OF=0NEG BX

5、; (BX)=1,CF=1、PF=0、AF=1、ZF=0、SF=0、OF=0例:例:x、y、z 均為雙字?jǐn)?shù)據(jù),分別存放在地址為均為雙字?jǐn)?shù)據(jù),分別存放在地址為X, X+2; Y, Y+2;Z, Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn) w x + y + 24 - z ,并用,并用W, W+2單元存放單元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADCADC DX, Y+2 ; x+y DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC

6、DX, 0 ; x+y+24SUB AX, ZSUB AX, ZSBBSBB DX, Z+2 ; x+y+24-z DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 結(jié)果存入結(jié)果存入W, W+2W, W+2單元單元 乘法指令乘法指令 無(wú)符號(hào)數(shù)乘法指令:無(wú)符號(hào)數(shù)乘法指令: MUL SRC 帶符號(hào)數(shù)乘法指令:帶符號(hào)數(shù)乘法指令: IMUL SRC 執(zhí)行操作:字節(jié)操作數(shù)執(zhí)行操作:字節(jié)操作數(shù) (AX) (AL) * (SRC) 字操作數(shù)字操作數(shù) (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 為隱含的

7、乘數(shù)。為隱含的乘數(shù)。 AX (DX,AX) 為隱含的乘積。為隱含的乘積。* src若為存儲(chǔ)器操作數(shù)時(shí),注意用若為存儲(chǔ)器操作數(shù)時(shí),注意用ptr明確類型。明確類型。 如:如:MUL WORD PTR BPDI ; 字乘,乘積送字乘,乘積送DX:AX* SRC不能為立即數(shù)和段寄存器不能為立即數(shù)和段寄存器。除除CF和和OF外,對(duì)外,對(duì)其它狀態(tài)其它狀態(tài)標(biāo)志位標(biāo)志位無(wú)定義無(wú)定義。乘法指令對(duì)乘法指令對(duì) CF/OF 的影響:的影響:例例 2 19 : 已知(已知(AL)=0FFH,(,(BL)=2, MUL BL;乘積乘積(AX)= 01FEH,(2552 = 510), CF=OF=1IMUL BL;乘積乘

8、積(AX)= 0FFFEH,(-12 = -2), CF=OF=0 00 乘積的高一半為零乘積的高一半為零11 否則否則MUL指令指令: CF,OF =00 乘積的高一半是低一半的符號(hào)擴(kuò)展乘積的高一半是低一半的符號(hào)擴(kuò)展11 否則否則 IMUL指令指令: CF,OF = 對(duì)標(biāo)志對(duì)標(biāo)志沒(méi)有定義沒(méi)有定義:指令執(zhí)行后這些標(biāo)志是任意的、:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(cè)(就是不知道是不可預(yù)測(cè)(就是不知道是0還是還是1) 對(duì)標(biāo)志對(duì)標(biāo)志沒(méi)有影響沒(méi)有影響:指令執(zhí)行不改變標(biāo)志狀態(tài):指令執(zhí)行不改變標(biāo)志狀態(tài) 除法指令除法指令 無(wú)符號(hào)數(shù)除法指令:無(wú)符號(hào)數(shù)除法指令: DIV SRC 帶符號(hào)數(shù)除法指令:帶符號(hào)數(shù)除法指

9、令: IDIV SRC 執(zhí)行操作:執(zhí)行操作: 字節(jié)操作字節(jié)操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數(shù)的余數(shù) 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數(shù)的余數(shù)注意注意: * AX (DX,AX) 為隱含的被除數(shù)寄存器。為隱含的被除數(shù)寄存器。 * AL (AX) 為隱含的商寄存器。為隱含的商寄存器。 * AH (DX) 為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。 * SRC不能為立即數(shù)不能為立即數(shù)。 * 對(duì)所有對(duì)所有狀態(tài)狀態(tài)標(biāo)志位標(biāo)志位均無(wú)定義均無(wú)定義。 * 兩個(gè)兩個(gè)N位操

10、作數(shù)相除,應(yīng)首先把被除數(shù)符號(hào)擴(kuò)展為位操作數(shù)相除,應(yīng)首先把被除數(shù)符號(hào)擴(kuò)展為2N位。位。 * src若為存儲(chǔ)器操作數(shù)時(shí),注意用若為存儲(chǔ)器操作數(shù)時(shí),注意用ptr明確類型。明確類型。如:如:IDIV BYTE PTR DI ;AX除以除以8 位存儲(chǔ)器操作數(shù)位存儲(chǔ)器操作數(shù)例例 2-20:已知(已知(AX)=0410H,(,(BL)= 0B8H。DIV BL ;商商AL=05H ,余數(shù),余數(shù)AH=78H IDIV BL ;商商AL=F2H(即即14),余數(shù),余數(shù)AH=20H(即即32) ;有符號(hào)數(shù)有符號(hào)數(shù)0410H真值為真值為1040,B8H 真值為真值為72。 ;注意注意DIV和和I DIV的區(qū)別。的區(qū)

11、別?!纠纠?2-21】X、Y、Z、V、W均為均為16位有符號(hào)數(shù),位有符號(hào)數(shù),計(jì)算計(jì)算W(V-(X*Y+Z-1234)/X確定計(jì)算順序如下確定計(jì)算順序如下: X*Y 暫存中間結(jié)果。暫存中間結(jié)果。 X*Y+Z X*Y+Z-1234 暫存中間結(jié)果。暫存中間結(jié)果。 V-(X*Y+Z-1234) (V-(X*Y+Z-1234)/X 保存最終結(jié)果。保存最終結(jié)果。確定各次運(yùn)算的數(shù)據(jù)類型確定各次運(yùn)算的數(shù)據(jù)類型: X*Y 乘積為乘積為32位。位。 X*Y結(jié)果為結(jié)果為32位,位,Z進(jìn)行符號(hào)擴(kuò)展成進(jìn)行符號(hào)擴(kuò)展成32位,位, X*Y+Z-1234 結(jié)果為結(jié)果為32位。位。 X*Y+Z-1234的結(jié)果是的結(jié)果是32位

12、,位,V需擴(kuò)展到需擴(kuò)展到32位位,(V-(X*Y+Z-1234)結(jié)果為結(jié)果為32位,位,X為為16位,因此,位,因此,(V-(X*Y+Z-1234)/X最終結(jié)果為最終結(jié)果為16位。位。表達(dá)式計(jì)算表達(dá)式計(jì)算 MOV AX, X IMUL Y ; X*Y MOV CX, AX ; X*Y(32位位)暫存入暫存入BX:CX。DX:AX需用于需用于Z的符號(hào)擴(kuò)展的符號(hào)擴(kuò)展 MOV BX, DX MOV AX, Z ; Z置入置入AX進(jìn)行符號(hào)擴(kuò)展至進(jìn)行符號(hào)擴(kuò)展至DX:AX,擴(kuò)展為,擴(kuò)展為32位位 CWD ADD CX, AX ADC BX, DX ; X*Y+Z SUB CX, 1234 SBB BX,

13、0 ; X*Y+Z-1234 MOV AX, V ; V置入置入AX進(jìn)行符號(hào)擴(kuò)展至進(jìn)行符號(hào)擴(kuò)展至DX:AX,擴(kuò)展為,擴(kuò)展為32位位 CWD SUB AX, CX SBB DX, BX ; V-(X*Y+Z-1234) IDIV X ; (V-(X*Y+Z-1234)/X,商在,商在AX中,余數(shù)在中,余數(shù)在DX中。中。 MOV W, AX; 保存最終結(jié)果保存最終結(jié)果2.7.3 邏輯運(yùn)算類指令:邏輯運(yùn)算類指令: 邏輯運(yùn)算指令邏輯運(yùn)算指令 AND、OR、NOT、XOR、TEST 移位指令移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR邏輯非指令:邏輯非指令:NOT O

14、PR * OPR不能為立即數(shù)不能為立即數(shù)執(zhí)行操作:執(zhí)行操作: (OPR) (OPR) * 不影響標(biāo)志位不影響標(biāo)志位 邏輯與指令:邏輯與指令:AND DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)邏輯或指令:邏輯或指令:OR DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)異或指令:異或指令: XOR DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)測(cè)試指令:測(cè)試指令: TEST OPR1, OPR2執(zhí)行操作:執(zhí)行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 無(wú)定義無(wú)定義 根據(jù)運(yùn)

15、算結(jié)果設(shè)置根據(jù)運(yùn)算結(jié)果設(shè)置 邏輯運(yùn)算指令邏輯運(yùn)算指令例:例:屏蔽屏蔽AL的第的第0、1兩位兩位 AND AL, 0FCH例:例:置置AL的第的第5位為位為1 OR AL, 20H 例:例:使使AL的第的第0、1位變反位變反 XOR AL, 3例:例:測(cè)試某些位是測(cè)試某些位是0是是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0

16、* * * * * * 0 0 * * * * * * * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *nAND指令一般用來(lái)屏蔽、保留一些位,其中指令一般用來(lái)屏蔽、保留一些位,其中要屏蔽的位可以和要屏蔽的位可以和“0 ”進(jìn)行邏輯進(jìn)行邏輯“與與”,而,而要保留的位可以和要保留的位可以和“1 ”進(jìn)行邏輯進(jìn)行邏輯“與與”。 n【例例 2 23】 將將AX中的最高位和最低位保留中的最高位和最低位保留,其余位清零,可用下面的指令:,其余位清零,可用下面的指令: AND AX, 8001H nOR指令常用來(lái)將某些位置位,同時(shí)使其余位指令常用來(lái)將某些位置位,同時(shí)使其余位保持不變

17、,其中需要置位的位可以和保持不變,其中需要置位的位可以和“1”進(jìn)行進(jìn)行邏輯邏輯“或或”,而保持不變的位可以和,而保持不變的位可以和“0”進(jìn)行進(jìn)行邏輯邏輯“或或”。 n【例例 2 24】 將將BX中的低中的低4 位置位,而其余位置位,而其余位不變,可以使用下面的指令:位不變,可以使用下面的指令: OR BX, 000FH nXOR指令常用來(lái)將某些特定位指令常用來(lái)將某些特定位“求反求反”,而其余位則保持,而其余位則保持不變,其中要不變,其中要“求反求反”的位和的位和“1 ”進(jìn)行邏輯進(jìn)行邏輯“異或異或”,要保持不變的位和要保持不變的位和“0 ”進(jìn)行邏輯進(jìn)行邏輯“異或異或”。 n【例例 2 25】 假

18、設(shè)(假設(shè)(BH)= 10110010B,分析以下指令,分析以下指令執(zhí)行后執(zhí)行后BH中的內(nèi)容。中的內(nèi)容。 XOR BH,01011011B 指令執(zhí)行后,指令執(zhí)行后,(BH)=11101001B。 nXOR指令的另一個(gè)重要應(yīng)用是,一個(gè)寄存器操作數(shù)自身與指令的另一個(gè)重要應(yīng)用是,一個(gè)寄存器操作數(shù)自身與自身進(jìn)行邏輯自身進(jìn)行邏輯“異或異或”實(shí)現(xiàn)清零,例如:實(shí)現(xiàn)清零,例如:qXOR BH,BH ;BH清零清零qXOR SI,SI ;SI清零清零n當(dāng)然,使用其他指令也能實(shí)現(xiàn)寄存器內(nèi)容的清零,例如:當(dāng)然,使用其他指令也能實(shí)現(xiàn)寄存器內(nèi)容的清零,例如:qMOV SI,0 ;SI清零清零qSUB SI,SI ;SI清

19、零清零qAND SI,0 ;SI清零清零nTEST 指令常常用于位測(cè)試,并與條件轉(zhuǎn)移指令一起共同完成對(duì)特指令常常用于位測(cè)試,并與條件轉(zhuǎn)移指令一起共同完成對(duì)特定位的判斷,并實(shí)現(xiàn)相應(yīng)的程序轉(zhuǎn)移。定位的判斷,并實(shí)現(xiàn)相應(yīng)的程序轉(zhuǎn)移。這與比較指令這與比較指令 CMP類似,不類似,不過(guò)過(guò)TEST指令只比較某些特定的位,而指令只比較某些特定的位,而CMP指令比較整個(gè)操作數(shù)。指令比較整個(gè)操作數(shù)。n例如:例如: n若要檢測(cè)若要檢測(cè)AL中的最低位是否為中的最低位是否為1,若為,若為1則轉(zhuǎn)移,可用以下指令:則轉(zhuǎn)移,可用以下指令: TEST AL,01H JNZ NEXT NEXT: n若要檢測(cè)若要檢測(cè)BX中的內(nèi)容是

20、否為中的內(nèi)容是否為0,若為,若為0則轉(zhuǎn)移,可用以下指令:則轉(zhuǎn)移,可用以下指令: TEST BX,0FFFFH JZ NEXT NEXT:邏輯左移邏輯左移 SHL OPR, CNT邏輯右移邏輯右移 SHR OPR, CNT算術(shù)左移算術(shù)左移 SAL OPR, CNT(同邏輯左移)(同邏輯左移)算術(shù)右移算術(shù)右移 SAR OPR, CNT CF 0 0 CFCF 移位指令移位指令循環(huán)左移循環(huán)左移 ROL OPR, CNT循環(huán)右移循環(huán)右移 ROR OPR, CNT帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCL OPR, CNT帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RCR OPR, CNTCF CFCFCF注意注意: *

21、OPR可用除立即數(shù)以外的任何尋址方式可用除立即數(shù)以外的任何尋址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以以SHL為例為例* 狀態(tài)標(biāo)志位:狀態(tài)標(biāo)志位: CF = 移出的數(shù)值移出的數(shù)值 1 CNT=1時(shí),最高有效位的值發(fā)生變化時(shí),最高有效位的值發(fā)生變化 0 CNT=1時(shí),最高有效位的值不變時(shí),最高有效位的值不變當(dāng)移位次數(shù)大于當(dāng)移位次數(shù)大于1時(shí),時(shí),OF不確定不確定* 移位指令:移位指令: SF、ZF、PF 根據(jù)移位結(jié)果設(shè)置,根據(jù)移位結(jié)果設(shè)置,AF無(wú)定義無(wú)定義* 循環(huán)移位指令:循環(huán)移位指令: 不影響不影響 SF、ZF、PF、AFOF

22、=例:例:(AX)= 0012H,(BX)= 0034H,把它們裝配成,把它們裝配成(AX)= 1234H 例:例:(BX) = 84F0H (1) (BX) 為無(wú)符號(hào)數(shù),求為無(wú)符號(hào)數(shù),求 (BX) / 2 SHR BX, 1SHR BX, 1 ; (BX) = 4278H; (BX) = 4278H (2) (BX) 為帶符號(hào)數(shù),求為帶符號(hào)數(shù),求 (BX) 2 SAL BX, 1SAL BX, 1 ; (BX) = 09E0H, OF=1; (BX) = 09E0H, OF=1 (3) (BX) 為帶符號(hào)數(shù),求為帶符號(hào)數(shù),求 (BX) / 4 MOV CL, 2 MOV CL, 2 SAR BX, CL SAR BX, CL ; (BX) = 0E13CH ; (BX) = 0E13CHMOV CL, 8MOV CL, 8ROL AX, CLROL AX, CLADD AX, BXADD AX, BX 邏輯左移一位相當(dāng)于無(wú)符號(hào)

溫馨提示

  • 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)論