第三節(jié)算術(shù)運(yùn)算指令_第1頁
第三節(jié)算術(shù)運(yùn)算指令_第2頁
第三節(jié)算術(shù)運(yùn)算指令_第3頁
第三節(jié)算術(shù)運(yùn)算指令_第4頁
第三節(jié)算術(shù)運(yùn)算指令_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、(Arithmetic)內(nèi)容:內(nèi)容: 利用十進(jìn)制調(diào)整指令和利用十進(jìn)制調(diào)整指令和ASCII調(diào)整指令對(duì)調(diào)整指令對(duì)BCD碼表示的碼表示的 十進(jìn)制數(shù)進(jìn)行十進(jìn)制數(shù)進(jìn)行算術(shù)運(yùn)算;算術(shù)運(yùn)算; (一)加法指令(一)加法指令(Arithmetic)(二)減法指令(二)減法指令(Subtraction)(三)乘法指令(三)乘法指令(Multiplication)(四)除法指令(四)除法指令(Division)(五)(五)BCD碼運(yùn)算指令碼運(yùn)算指令 ,不同指令影響不同不同指令影響不同: (1) 算術(shù)運(yùn)算指令涉及的一些問題:算術(shù)運(yùn)算指令涉及的一些問題:(1) 什么叫什么叫 8位二進(jìn)制數(shù)可以表示十進(jìn)制數(shù)的范圍:位二進(jìn)制

2、數(shù)可以表示十進(jìn)制數(shù)的范圍: 8位無符號(hào)十進(jìn)制數(shù)的范圍:位無符號(hào)十進(jìn)制數(shù)的范圍:02558位帶符號(hào)十進(jìn)制數(shù)的范圍:位帶符號(hào)十進(jìn)制數(shù)的范圍:128127 16位二進(jìn)制數(shù)可以表示十進(jìn)制數(shù)的范圍位二進(jìn)制數(shù)可以表示十進(jìn)制數(shù)的范圍:16位無符號(hào)十進(jìn)制數(shù)的范圍:位無符號(hào)十進(jìn)制數(shù)的范圍:06553516位帶符號(hào)十進(jìn)制數(shù)的范圍:位帶符號(hào)十進(jìn)制數(shù)的范圍:3276832767帶符號(hào)數(shù),補(bǔ)碼能表示范圍為帶符號(hào)數(shù),補(bǔ)碼能表示范圍為:-2 n-1 +2 n+1 1如果運(yùn)算結(jié)果超出該范圍,叫補(bǔ)碼如果運(yùn)算結(jié)果超出該范圍,叫補(bǔ)碼以以8位二進(jìn)制數(shù)為例位二進(jìn)制數(shù)為例分析一下數(shù)的溢出與進(jìn)位情況分析一下數(shù)的溢出與進(jìn)位情況:下面分下面分

3、4種情況加以討論:種情況加以討論:(1) 帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出(2) 無符號(hào)數(shù)溢出無符號(hào)數(shù)溢出(3) 帶符號(hào)數(shù)溢出帶符號(hào)數(shù)溢出(4) 帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出。二進(jìn)制數(shù)二進(jìn)制數(shù)看作無符號(hào)數(shù)看作無符號(hào)數(shù)看作帶符號(hào)數(shù)看作帶符號(hào)數(shù)0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 00 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1+ +0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 14 41111+ +1515+ 4+ 4+1 1+1 1+ +1 5+1 5相相加加標(biāo)志標(biāo)志CF=0,CP=0CF=0,CP=0

4、,OF=0OF=0CF=0CF=0OF=0OF=0溢出溢出不溢出不溢出不溢出不溢出同符號(hào)數(shù)相加,同符號(hào)數(shù)相加,結(jié)果符號(hào)與其相同結(jié)果符號(hào)與其相同二進(jìn)制數(shù)二進(jìn)制數(shù)看作無符號(hào)數(shù)看作無符號(hào)數(shù)看作帶符號(hào)數(shù)看作帶符號(hào)數(shù)0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1+ +0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 07 7251251+ +258258+ 7+ 7- 5- 5+ + 2+ 2相相加加標(biāo)志標(biāo)志CF=1,CP=1CF=1,CP=1,OF=0OF=0CF=1CF=1OF=0OF=0溢出溢出溢出溢出若考慮進(jìn)

5、位若考慮進(jìn)位所代表的數(shù)值,所代表的數(shù)值,結(jié)果正確結(jié)果正確不溢出不溢出異號(hào)數(shù)相加異號(hào)數(shù)相加不可能有溢出不可能有溢出CF=1CF=1二進(jìn)制數(shù)二進(jìn)制數(shù)看作無符號(hào)數(shù)看作無符號(hào)數(shù)看作帶符號(hào)數(shù)看作帶符號(hào)數(shù)0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 10 0 1 111 1 1 1 1 1 1 1 0 0 0 0+ +1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 19 9124124+ +133133+ 9+ 9+1 2 4+1 2 4+ +1 3 3+1 3 3相相加加標(biāo)志標(biāo)志CF=0,CP=1CF=0,CP=1,OF=1OF=1CF=0CF=0O OF=F=1 1溢出溢出不

6、溢出不溢出溢出溢出正正相加,結(jié)果為負(fù)正正相加,結(jié)果為負(fù)結(jié)果錯(cuò)結(jié)果錯(cuò)二進(jìn)制數(shù)二進(jìn)制數(shù)看作無符號(hào)數(shù)看作無符號(hào)數(shù)看作帶符號(hào)數(shù)看作帶符號(hào)數(shù)1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 11 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1+ +0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0135135245245+ +380380121121- 11- 11+ +132132相相加加標(biāo)志標(biāo)志CF=1,CP=0CF=1,CP=0,OF=1OF=1CF=1CF=1OF=1OF=1溢出溢出溢出溢出若考慮進(jìn)位若考慮進(jìn)位CF所代表的數(shù)值,所代表的數(shù)值,結(jié)果正確結(jié)果正確 溢

7、出溢出負(fù)負(fù)相加,結(jié)果為正負(fù)負(fù)相加,結(jié)果為正結(jié)果錯(cuò)結(jié)果錯(cuò)CF=1CF=1(1)帶符號(hào)數(shù))帶符號(hào)數(shù)相加相加溢出溢出根據(jù)根據(jù)OF判斷帶符號(hào)數(shù)產(chǎn)生溢出?判斷帶符號(hào)數(shù)產(chǎn)生溢出?雙高位判別法雙高位判別法 OF=CF CP(2)無符號(hào)數(shù))無符號(hào)數(shù)相加相加溢出溢出根據(jù)根據(jù)CF判斷無符號(hào)數(shù)產(chǎn)生溢出?判斷無符號(hào)數(shù)產(chǎn)生溢出?(一)加法指令(一)加法指令(Arithmetic) 1、 ADD(Addition)加法指令加法指令 2、 ADC(Add with carry)帶進(jìn)位加法指令帶進(jìn)位加法指令 3、 INC(Increment by 1)加加 1指令指令 1、 ADD(Addition)加法指令加法指令指令格式

8、:指令格式:ADD dest , src ;(dest) (dest)+(src)例:例:ADD CL,10;寄存器寄存器+立即數(shù)立即數(shù)ADD DX,SI;寄存器寄存器+寄存器寄存器ADD AX, MEM;寄存器寄存器+存儲(chǔ)器存儲(chǔ)器ADD DATABX, AL;存儲(chǔ)器存儲(chǔ)器+寄存器寄存器ADD BYTE PTRALPHADI,30H;存儲(chǔ)器存儲(chǔ)器+立即數(shù)立即數(shù): ; : , 8位帶符號(hào)數(shù)相加,和超出范圍(位帶符號(hào)數(shù)相加,和超出范圍(128127), 16位帶符號(hào)數(shù)相加,和超出范圍位帶符號(hào)數(shù)相加,和超出范圍(-32768+32767);, 8位無符號(hào)數(shù)相加,和超過位無符號(hào)數(shù)相加,和超過255,

9、16位無符號(hào)數(shù)相加,和超過位無符號(hào)數(shù)相加,和超過65535。其他條件標(biāo)志(其他條件標(biāo)志(SF,AF,PF,ZF)根據(jù)定義設(shè)定。根據(jù)定義設(shè)定。例例MOV AL,7EH;(AL)=7EHMOV BL, 5BH;(BL)=5BHADD AL,BL;(AL)=7EH+5BH=D9H影響標(biāo)志位的情況影響標(biāo)志位的情況:SF=1 , 結(jié)果最高位結(jié)果最高位1ZF=0 ,結(jié)果不等于,結(jié)果不等于0AF=1 ,D3 位向位向D4 有進(jìn)位有進(jìn)位PF=0 ,”1”的個(gè)數(shù)為奇數(shù)的個(gè)數(shù)為奇數(shù)CF=0 ,無進(jìn)位,無進(jìn)位OF=1 ,和超過,和超過1271 11 11 11 11 11 10 00 00 01 10 01 11

10、10 01 11 1+ +1 11 10 01 11 10 00 01 1AF=1AF=12、 ADC(Add with carry)帶進(jìn)位加法指令帶進(jìn)位加法指令格式:格式:ADC dest,src ;(;(dest)(dest)+(src)+ 進(jìn)位標(biāo)志進(jìn)位標(biāo)志CF的現(xiàn)行值的現(xiàn)行值()特點(diǎn)特點(diǎn): 與與ADD同。同。用途:主要用于多字節(jié)運(yùn)算中。用途:主要用于多字節(jié)運(yùn)算中。類型舉例:類型舉例:ADC CX, 300 ;寄存器寄存器+立即數(shù)立即數(shù)+CFADC AL, BL;寄存器寄存器+寄存器寄存器+CFADC DX, COUNTSI;寄存器寄存器+存儲(chǔ)器存儲(chǔ)器CFADC BLOCKDI, BX;存

11、儲(chǔ)器存儲(chǔ)器+寄存器寄存器+CFADC BYTE PTR MEM, 6;存儲(chǔ)器存儲(chǔ)器+立即數(shù)立即數(shù)+CF用途舉例:用途舉例:計(jì)算兩個(gè)多字節(jié)數(shù)相加計(jì)算兩個(gè)多字節(jié)數(shù)相加 3B74AC60F8H+20D59E36C1H=?兩個(gè)多字節(jié)數(shù)存放在:兩個(gè)多字節(jié)數(shù)存放在:DATA1,DATA2的開始單元。的開始單元。F8HF8H60H60HACHACH74H74H3BH3BH.C1HC1H36H36H9EH9EHD5HD5H20H20H.DATA1DATA1DATA2DATA2流程圖流程圖多字節(jié)數(shù)內(nèi)存存放多字節(jié)數(shù)內(nèi)存存放開始開始初始化,置循環(huán)次數(shù)CX初始化,置循環(huán)次數(shù)CX清SI、CF清SI、CF取一個(gè)字節(jié)加數(shù)取

12、一個(gè)字節(jié)加數(shù)取一個(gè)被加數(shù)字節(jié)取一個(gè)被加數(shù)字節(jié)相加送內(nèi)存相加送內(nèi)存(SI)+1送(SI)(SI)+1送(SI)(CX)-1送(CX)(CX)-1送(CX)(CX)=?0(CX)=?0結(jié)束結(jié)束N NY Y程序:程序:MOV CX, 5MOV SI, 0; 清清SICLC;清;清CFLOOPER:MOV AL, DATA2SIADC DATA1SI,ALINC SI;(SI)+1 (SI)DEC CX;(CX)-1 (CX)JNZ LOOPER;(CX) 0轉(zhuǎn)轉(zhuǎn)HLT;停機(jī);停機(jī)3、INC (Increment by 1 )加加 1 指令指令格式:格式: INC dest ;(;(B/W), (de

13、st)(dest)+1 dest : 功能:對(duì)指定的目標(biāo)操作數(shù)功能:對(duì)指定的目標(biāo)操作數(shù)+1 操作數(shù)單元。操作數(shù)單元。用途:用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)。用途:用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)。標(biāo)志位影響情況:影響標(biāo)志位影響情況:影響SF,ZF,AF,PF,OF。 例:例: INC DL; 8位寄存器位寄存器1 INC SI;16位寄存器位寄存器1 INC BYTE PTR BXSI ;存儲(chǔ)器;存儲(chǔ)器1(字節(jié)操作)(字節(jié)操作) INC WORD PTR DI;存儲(chǔ)器;存儲(chǔ)器1(字操作)(字操作) INC DS; 錯(cuò)錯(cuò)(二)減法指令(二)減法指令(Subtraction) 8088

14、有有7條減法指令條減法指令 :1、SUB(Subtraction)減法指令減法指令2、SBB(Subtraction with borrow)帶進(jìn)位減法指令帶進(jìn)位減法指令 3、DEC(Decrement by 1 ) 減減 1 指令指令4、NEG(Negate) 求補(bǔ)指令求補(bǔ)指令5、CMP(Compare) 比較指令比較指令1、SUB(Subtraction)減法指令減法指令格式:格式:SUB dest,src;(;(dest)(dest)-(src)例:例:SUB AL,37H;寄存器寄存器-立即數(shù)立即數(shù)SUB BX,DX;寄存器寄存器-寄存器寄存器SUB CX, VAR1;寄存器寄存器-存

15、儲(chǔ)器存儲(chǔ)器SUB ARRAYSI, AX;存儲(chǔ)器存儲(chǔ)器-寄存器寄存器SUB WORD PTRALPHABXDI,512H;存儲(chǔ)器減立即數(shù)存儲(chǔ)器減立即數(shù)這種指令影響標(biāo)志位這種指令影響標(biāo)志位: AF、CF、OF、PF、SF、ZF標(biāo)志。標(biāo)志。2、SBB(Subtraction with borrow)帶進(jìn)位減法指令帶進(jìn)位減法指令 格式:格式:SBB dest,src;(;(dest)(dest)-(src)-CFCF: 進(jìn)位標(biāo)志進(jìn)位標(biāo)志CF的現(xiàn)行值的現(xiàn)行值(上條指令上條指令CF值值)指令影響標(biāo)志位、指令影響標(biāo)志位、B/W數(shù)運(yùn)算情況同數(shù)運(yùn)算情況同SBB用途:用于多字節(jié)數(shù)相減用途:用于多字節(jié)數(shù)相減例:例

16、:SBB BX,100H;寄存器寄存器-立即數(shù)立即數(shù) -CFSBB CX,DX;寄存器寄存器-寄存器寄存器-CFSBB AL, DATA1SI;寄存器寄存器-存儲(chǔ)器存儲(chǔ)器-CFSBB DISPBP, BL;存儲(chǔ)器存儲(chǔ)器-寄存器寄存器-CFSBB BYTE PTRALPHASI+6,96H;存儲(chǔ)器存儲(chǔ)器-立即數(shù)立即數(shù)-CF多字節(jié)數(shù)的加減綜合舉例多字節(jié)數(shù)的加減綜合舉例例:例:x、y、z均為均為32位數(shù),分別存放在地址為位數(shù),分別存放在地址為X, X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)實(shí)現(xiàn)wx+y+24-z,結(jié)果放在,結(jié)果放在W, W+2單元中。單元中。

17、MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 結(jié)果存入結(jié)果存入W, W+2單元單元說說明:低明:低16位加減用不帶進(jìn)位的指令;位加減用不帶進(jìn)位的指令; 高高16位的加減用帶進(jìn)位的指令位的加減用帶進(jìn)位的指令3、DEC (Decrement by 1 ) 減減 1 指令指令格式:格式: DEC dest ;(B/W) (dest)(dest)-1功能:對(duì)指定的目標(biāo)操作數(shù)功能

18、:對(duì)指定的目標(biāo)操作數(shù)-1 操作數(shù)單元。操作數(shù)單元。用途:用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)。用途:用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)。標(biāo)志位影響情況:影響標(biāo)志位影響情況:影響SF,ZF,AF,PF,OF。 不影響不影響CF。DEC 用途舉例:用途舉例:MOV CX , 0FFFFHCYC: DEC CXJNZ CYCHLT用于延時(shí)時(shí)間。用于延時(shí)時(shí)間。4、NEG (Negate) 求補(bǔ)指令求補(bǔ)指令格式:格式: NEG dest ;B/W, (dest) 0 - (dest)dest : 寄存器寄存器 、存儲(chǔ)器。、存儲(chǔ)器。操作操作: 把操作數(shù)按位求反后末位把操作數(shù)按位求反后末位+1。 (d

19、est) 0FFFFH -(dest)+1說明:說明: 若已知若已知X補(bǔ)補(bǔ),則對(duì),則對(duì)X補(bǔ)補(bǔ)的每一位(包括符號(hào)位)按的每一位(包括符號(hào)位)按位求反,然后再加位求反,然后再加1,結(jié)果即為,結(jié)果即為-X補(bǔ)補(bǔ)。由。由X補(bǔ)補(bǔ)求求-X補(bǔ)補(bǔ),通,通常稱為變補(bǔ)。常稱為變補(bǔ)。影響標(biāo)志:影響標(biāo)志:AF、CF、OF、PF、SF、ZF。CF:操作數(shù)為操作數(shù)為0時(shí)求補(bǔ)時(shí)求補(bǔ),CF=0 ; 一般使一般使CF=1.OF: 對(duì)對(duì)128 或或32768求補(bǔ),求補(bǔ),OF=1; 否則否則OF=0.應(yīng)用舉例:求絕對(duì)值應(yīng)用舉例:求絕對(duì)值在內(nèi)存中,在內(nèi)存中,從從AREA1開始存放開始存放100個(gè)帶符號(hào)數(shù)。個(gè)帶符號(hào)數(shù)。求各數(shù)的絕對(duì)值,并

20、求各數(shù)的絕對(duì)值,并存于存于AREA2開始的單開始的單元。元。流程圖流程圖開始開始初始化初始化置源地址,置目的地址指針置源地址,置目的地址指針置循環(huán)次數(shù)置循環(huán)次數(shù)取一個(gè)帶符號(hào)數(shù)取一個(gè)帶符號(hào)數(shù)負(fù)數(shù)?負(fù)數(shù)?求補(bǔ)求補(bǔ)送存送存地址指針1地址指針1循環(huán)次數(shù)1循環(huán)次數(shù)1循環(huán)次數(shù)0?循環(huán)次數(shù)0?結(jié)束結(jié)束N NY YN NY Y程序:程序:LEA SI, AREA1LEA DI, AREA2MOV CX, 100CHECK: MOV AL, SIOR AL, AL ;(AL)內(nèi)容不變,置標(biāo)志內(nèi)容不變,置標(biāo)志JNS NEXT ;SF=0轉(zhuǎn)轉(zhuǎn)NEXTNEG AL ;負(fù)數(shù),求其正數(shù)的補(bǔ)碼負(fù)數(shù),求其正數(shù)的補(bǔ)碼NEXT:

21、 MOV DI, AL ;送目標(biāo);送目標(biāo)INC SIINC DIDEC CXJNZ CHECKHLT5、CMP(Compare) 比較指令比較指令格式:格式:CMP dest,src; B/W 影響標(biāo)志:影響標(biāo)志:AF、CF、OF、PF、SF、ZF。src: 立即數(shù),寄存器,存儲(chǔ)器。立即數(shù),寄存器,存儲(chǔ)器。dest:寄存器,存儲(chǔ)器。:寄存器,存儲(chǔ)器。例:例: CMP AL,0AH;寄存器與立即數(shù)比較寄存器與立即數(shù)比較CMP CX, DI;寄存器與寄存器比較寄存器與寄存器比較CMP AX, AREA1;寄存器與存儲(chǔ)器比較寄存器與存儲(chǔ)器比較CMP BX+5, SI;存儲(chǔ)器與寄存器比較存儲(chǔ)器與寄存器

22、比較CMP WORD PTRALPHAGAMMA,100H;存儲(chǔ)器與立即數(shù)比較存儲(chǔ)器與立即數(shù)比較用途:用途: 用比較指令來比較兩個(gè)數(shù)之間的關(guān)系:用比較指令來比較兩個(gè)數(shù)之間的關(guān)系:兩者是否相等,兩個(gè)數(shù)中哪個(gè)大。兩者是否相等,兩個(gè)數(shù)中哪個(gè)大。(1) 根據(jù)根據(jù)ZF標(biāo)志,判斷兩者是否相等;標(biāo)志,判斷兩者是否相等;(2) 根據(jù)根據(jù)CF標(biāo)志,標(biāo)志, 判斷兩個(gè)無符號(hào)數(shù)的大?。慌袛鄡蓚€(gè)無符號(hào)數(shù)的大??;(3) 用用SF、OF標(biāo)志,判斷二個(gè)帶符號(hào)數(shù)的大小。標(biāo)志,判斷二個(gè)帶符號(hào)數(shù)的大小。 例:例: CMP AX, BXZF=1,結(jié)果為結(jié)果為0,兩者相等,兩者相等ZF=0, 結(jié)果不為結(jié)果不為0,兩者不相等,兩者不相等

23、例:例: 比較比較AX,BX寄存器寄存器, 將大數(shù)將大數(shù) (AX) CMP AX,BX JNC NEXT ; CF=0轉(zhuǎn)轉(zhuǎn)NEXT XCHG AX,BX NEXT:結(jié)論:結(jié)論:CF=0 ,(AX) (BX); CF=1, (AX) 0, B0A0, B0SF=0SF=0,OF=0 OF=0 則:則:ABAB5 57 7情情況況A0, B0A0, B0SF=1SF=1,OF=0 OF=0 則:則:ABAB5 52 25 57 72 2-5-5-7-71 1-7-7-5-5-5-5-(-7)-(-7)+2+2A0,B0A0,B0SF=1SF=1,OF=0 OF=0 則:則:ABABA0,B0A0,

24、BBAB-7-7-(-5)-(-5)-2-2 3+127+127-63-63A0,B0,BBAB+127+127-(-63)-(-63)+190+190 4-63-63+127+127A0A0SF=0SF=0,OF=1 OF=1 則:則:ABAB SF OF=0 SF=1, 則:則:AB SF OF=0 SF=0,則:,則:AB SF OF=1 ,則,則A第二個(gè)數(shù),不做交換,第二個(gè)數(shù),不做交換, 否則,(第二個(gè)字單元內(nèi)容)否則,(第二個(gè)字單元內(nèi)容) (AX)。)。 再取第三個(gè)數(shù),再取第三個(gè)數(shù), 經(jīng)過經(jīng)過99次比較,在(次比較,在(AX)中得到最大數(shù)。)中得到最大數(shù)。編程:編程: MOV BX,

25、OFFSET BLOCK MOV AX,BX INC BX INC BX MOV CX,99AGAIN: ;如;如ZF=0且且SF=OF,則轉(zhuǎn),則轉(zhuǎn)NEXT MOV AX,BXNEXT: INC BX INC BX DEC CX JNE AGAIN MOV MAX,AX;MAX單元存放單元存放最大值最大值小結(jié):根據(jù)標(biāo)志位來判斷比較的結(jié)果1)根據(jù)ZF判斷兩個(gè)數(shù)是否相等。若ZF=1,則兩數(shù)相等。2)若兩個(gè)數(shù)不相等,則分兩種情況考慮: 比較的是兩個(gè)無符號(hào)數(shù) 若CF=0,則被減數(shù)減數(shù); 若CF=1,則被減數(shù)減數(shù)。 比較的是兩個(gè)有符號(hào)數(shù) 若OF SF=0,則被減數(shù)減數(shù); 若OF SF=1,則被減數(shù)減數(shù)。

26、進(jìn)行乘法時(shí):進(jìn)行乘法時(shí):8 8位位* *8 8位位1616位乘積位乘積 1616位位* *1616位位3232位乘積位乘積(1) (1) 無符號(hào)數(shù)無符號(hào)數(shù)的乘法指令的乘法指令MUL(MEM/REG)MUL(MEM/REG)格式:格式: MUL src操作:字節(jié)操作數(shù)操作:字節(jié)操作數(shù) (AX) (AL) (src) 字操作數(shù)字操作數(shù) (DX, AX) (AX) (src)注意:一個(gè)操作數(shù)隱含在注意:一個(gè)操作數(shù)隱含在ALAL或或AXAX中中指令例子:指令例子: MUL BL ;(AL)( (BL),乘積在AX中 MUL CX ;(AX)( (CX),乘積在DX,AX中 MUL BYTE PTRBX

27、(三) 乘法指令(乘法指令(Multiplication)格式與格式與MULMUL指令類似,只是要求兩操作數(shù)均為指令類似,只是要求兩操作數(shù)均為有符號(hào)數(shù)有符號(hào)數(shù)。指令例子:指令例子: IMUL BL ;(AX)(AL)(BL) IMUL WORD PTRSI ;(DX,AX)(AX)(SI+1SI) (2) (2) 有符號(hào)數(shù)有符號(hào)數(shù)乘法指令乘法指令I(lǐng)MULIMUL注意:注意:MUL/IMUL指令中 AL(AX)為隱含的乘數(shù)寄存器; AX(DX,AX)為隱含的乘積寄存器; SRC不能為立即數(shù); 除CF和OF外,對(duì)其它標(biāo)志位無定義。(四)除法指令(四)除法指令Division)進(jìn)行除法時(shí):進(jìn)行除法時(shí)

28、:1616位位/8/8位位88位商位商 3232位位/16/16位位1616位商位商對(duì)被除數(shù)、商及余數(shù)存放有如下規(guī)定:對(duì)被除數(shù)、商及余數(shù)存放有如下規(guī)定: 被除數(shù)被除數(shù) 商商余數(shù)余數(shù)字節(jié)除法字節(jié)除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX格式:格式: DIV src操作:字節(jié)操作操作:字節(jié)操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數(shù)的余數(shù) 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數(shù)的余數(shù)指令例子:指令例子: DIV C

29、L DIV WORD PTRBX注:若除數(shù)為零或注:若除數(shù)為零或ALAL中商大于中商大于FFH,(FFH,(或或AXAX中商大于中商大于FFFFH)FFFFH),則,則CPUCPU產(chǎn)生一個(gè)類型產(chǎn)生一個(gè)類型0 0的內(nèi)部中斷。的內(nèi)部中斷。(1) 無符號(hào)數(shù)無符號(hào)數(shù)除法指令除法指令DIVDIV(2) (2) 有符號(hào)數(shù)有符號(hào)數(shù)除法指令除法指令I(lǐng)DIVIDIV格式:格式: IDIV src操作與操作與DIVDIV類似。商及余數(shù)均為有符號(hào)數(shù)類似。商及余數(shù)均為有符號(hào)數(shù), ,且余數(shù)且余數(shù)符號(hào)總是與被除數(shù)符號(hào)相同。符號(hào)總是與被除數(shù)符號(hào)相同。注意注意: 對(duì)于對(duì)于DIV/IDIV指令指令l AX(DX,AX)為隱含的

30、被除數(shù)寄存器。為隱含的被除數(shù)寄存器。l AL(AX)為隱含的商寄存器。為隱含的商寄存器。l AH(DX)為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。l src不能為立即數(shù)。不能為立即數(shù)。l 對(duì)所有條件標(biāo)志位均對(duì)所有條件標(biāo)志位均無定義無定義。l除法運(yùn)算要求被除數(shù)字長(zhǎng)是除數(shù)字長(zhǎng)的兩除法運(yùn)算要求被除數(shù)字長(zhǎng)是除數(shù)字長(zhǎng)的兩倍倍, ,若不滿足則需若不滿足則需對(duì)被除數(shù)進(jìn)行擴(kuò)展對(duì)被除數(shù)進(jìn)行擴(kuò)展, ,否則否則產(chǎn)生錯(cuò)誤。產(chǎn)生錯(cuò)誤。l對(duì)于無符號(hào)數(shù)除法擴(kuò)展,只需將對(duì)于無符號(hào)數(shù)除法擴(kuò)展,只需將AHAH或或DXDX清清零即可。零即可。l對(duì)有符號(hào)數(shù)而言對(duì)有符號(hào)數(shù)而言,則是符號(hào)位的擴(kuò)展??墒箘t是符號(hào)位的擴(kuò)展。可使用符號(hào)擴(kuò)展指令用

31、符號(hào)擴(kuò)展指令CBW和和CWD關(guān)于除法操作中的字長(zhǎng)擴(kuò)展問題關(guān)于除法操作中的字長(zhǎng)擴(kuò)展問題例: 寫出34H25H的程序段。 MOV AL,34H MOV BL,25H CBW ; AL的符號(hào)擴(kuò)展到AH DIV BL ; 0034H25H,結(jié)果為 ; (AH)=0FH, (AL)=01H(五)(五) BCDBCD碼運(yùn)算的十進(jìn)制調(diào)整指令碼運(yùn)算的十進(jìn)制調(diào)整指令l專用于對(duì)專用于對(duì)BCD碼運(yùn)算的結(jié)果進(jìn)行調(diào)整碼運(yùn)算的結(jié)果進(jìn)行調(diào)整l包括:包括:DAADAA、AAAAAA、DASDAS、AASAAS、AAMAAM、AADAADl均為隱含尋址,隱含的操作數(shù)為均為隱含尋址,隱含的操作數(shù)為ALAL和和AHAHl為何要對(duì)為

32、何要對(duì)BCD碼的運(yùn)算結(jié)果進(jìn)行調(diào)整?碼的運(yùn)算結(jié)果進(jìn)行調(diào)整? BCD碼本質(zhì)上是碼本質(zhì)上是十進(jìn)制數(shù)十進(jìn)制數(shù),即應(yīng)遵循,即應(yīng)遵循逢十逢十進(jìn)一進(jìn)一的規(guī)則。而計(jì)算機(jī)是按的規(guī)則。而計(jì)算機(jī)是按二進(jìn)制(十六二進(jìn)制(十六進(jìn)制)進(jìn)制)進(jìn)行運(yùn)算,并未按十進(jìn)制規(guī)則進(jìn)行進(jìn)行運(yùn)算,并未按十進(jìn)制規(guī)則進(jìn)行運(yùn)算。運(yùn)算。調(diào)整原理:先看一個(gè)例子調(diào)整原理:先看一個(gè)例子例例1 1: 0000 1000 8 0000 1000 8 + 0000 0101 + 0000 0101 + + 5 5 0000 1101 13 0000 1101 13 結(jié)果為結(jié)果為0DH0DH。而在。而在BCDBCD碼中,只允許碼中,只允許0909這這1010個(gè)

33、數(shù)字出現(xiàn),個(gè)數(shù)字出現(xiàn),0DH0DH不代表任何不代表任何BCDBCD碼。碼。為什么會(huì)出現(xiàn)這種情況呢?原因在于為什么會(huì)出現(xiàn)這種情況呢?原因在于BCDBCD碼是逢十進(jìn)一,但碼是逢十進(jìn)一,但計(jì)算機(jī)是逢十六進(jìn)一;因此,應(yīng)在個(gè)位補(bǔ)上計(jì)算機(jī)是逢十六進(jìn)一;因此,應(yīng)在個(gè)位補(bǔ)上6 6,促其產(chǎn)生進(jìn),促其產(chǎn)生進(jìn)位。位。對(duì)上例的結(jié)果進(jìn)行加對(duì)上例的結(jié)果進(jìn)行加6 6調(diào)整:調(diào)整:0000 1101 0000 1101 + 0000 0110 + 0000 0110 0001 0011 =13 0001 0011 =13例例2 2 0000 10000000 1000 8 8 +0000 1001 +0000 1001 +9+

34、9 000 0001 1 0001 0001 1111 17 17 原因在于計(jì)算機(jī)在運(yùn)算過程中,如遇到低原因在于計(jì)算機(jī)在運(yùn)算過程中,如遇到低4 4位往高位往高4 4位產(chǎn)生進(jìn)位時(shí)(此時(shí)位產(chǎn)生進(jìn)位時(shí)(此時(shí)AF=1AF=1)是按逢十六進(jìn)一的規(guī)則,但)是按逢十六進(jìn)一的規(guī)則,但BCDBCD碼要求逢十進(jìn)一,因此只要產(chǎn)生碼要求逢十進(jìn)一,因此只要產(chǎn)生進(jìn)位,個(gè)位就會(huì)暗中丟失一個(gè)進(jìn)位,個(gè)位就會(huì)暗中丟失一個(gè)6 6,這就要進(jìn)行加,這就要進(jìn)行加6 6調(diào)正。調(diào)正。對(duì)上例的結(jié)果進(jìn)行加對(duì)上例的結(jié)果進(jìn)行加6 6調(diào)整:調(diào)整:0001 0001 0001 0001 + 0000 0110 + 0000 0110 0001 0111

35、 =17 0001 0111 =17總的調(diào)整原理是:總的調(diào)整原理是:凡遇到某凡遇到某4 4位二進(jìn)制碼對(duì)應(yīng)的位二進(jìn)制碼對(duì)應(yīng)的BCDBCD碼大于碼大于9 9時(shí),時(shí),則加六進(jìn)行調(diào)整;凡是低則加六進(jìn)行調(diào)整;凡是低4 4位往高位往高4 4位產(chǎn)生了位產(chǎn)生了進(jìn)位時(shí),則加進(jìn)位時(shí),則加6 6進(jìn)行調(diào)整。進(jìn)行調(diào)整。1)1)加法的十進(jìn)制調(diào)整指令加法的十進(jìn)制調(diào)整指令(1)(1)非壓縮非壓縮BCDBCD碼加法調(diào)整碼加法調(diào)整AAA本指令對(duì)在本指令對(duì)在ALAL中的由兩個(gè)未組合的中的由兩個(gè)未組合的BCDBCD碼相加后的碼相加后的結(jié)果進(jìn)行調(diào)整,得到一個(gè)正確的未組合的結(jié)果進(jìn)行調(diào)整,得到一個(gè)正確的未組合的BCDBCD碼。碼。lAAA

36、AAA指令只影響指令只影響AFAF和和CFCF,其余標(biāo)志無定義。,其余標(biāo)志無定義。lAAAAAA指令應(yīng)緊跟在指令應(yīng)緊跟在ADDADD或或ADCADC指令之后。指令之后。如果AL的低4位9AF=1,則: AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) CFAF否則AL(AL)0FHAAA指令的操作如下:例例3 3:有兩個(gè)多位十進(jìn)制數(shù):有兩個(gè)多位十進(jìn)制數(shù)26582658和和3619 3619 ,以非壓縮,以非壓縮的的BCDBCD碼形式存放在內(nèi)存中,求二者之和。碼形式存放在內(nèi)存中,求二者之和。即即2658+3619=2658+3619=? 假定二數(shù)在內(nèi)存中均是低位在前,高位在后

37、,另留假定二數(shù)在內(nèi)存中均是低位在前,高位在后,另留出出5 5個(gè)單元存放相加的結(jié)果。個(gè)單元存放相加的結(jié)果。內(nèi)存中數(shù)據(jù)存放形式見下頁圖。內(nèi)存中數(shù)據(jù)存放形式見下頁圖。06H02H09H01HSTRING1STRING208H 05H06H03H被被加加數(shù)數(shù)加加數(shù)數(shù)數(shù)數(shù)據(jù)據(jù)段段85629163SUM結(jié)結(jié)果果.程序程序段為段為: LEA SI LEA SI,STRING1 STRING1 ;STRING1STRING1偏移地址送偏移地址送SISI LEA DI LEA DI,STRING2 STRING2 ;STRING2STRING2偏偏移地移地址送址送DIDI LEA BX LEA BX,SUM S

38、UM ;SUMSUM偏移地址送偏移地址送BXBX MOV CXMOV CX,4 4 ;循環(huán);循環(huán)4 4次次 CLC CLC ;清進(jìn)位標(biāo)志;清進(jìn)位標(biāo)志AGAINAGAIN:MOV ALMOV AL,SISI ADC AL ADC AL,DI DI ;帶進(jìn)位加;帶進(jìn)位加 AAA AAA ;未壓縮;未壓縮BCDBCD碼調(diào)正碼調(diào)正 MOV BX MOV BX,AL AL ;結(jié)果存入;結(jié)果存入SUMSUM INC SI INC SI ;調(diào)整指針;調(diào)整指針 INC DI INC DI INC BX INC BX DEC CX DEC CX ;循環(huán)計(jì)數(shù)器減;循環(huán)計(jì)數(shù)器減1 1 JNZ AGAIN JNZ A

39、GAIN ;若未處理完;若未處理完, ,則轉(zhuǎn)則轉(zhuǎn)AGAINAGAIN(2)(2)壓縮壓縮BCDBCD碼加法調(diào)整碼加法調(diào)整DAAl兩個(gè)壓縮兩個(gè)壓縮BCDBCD碼相加結(jié)果在碼相加結(jié)果在ALAL中,通過中,通過DAADAA調(diào)整得到一個(gè)正確的壓縮調(diào)整得到一個(gè)正確的壓縮BCDBCD碼碼. .l指令操作指令操作( (調(diào)整方法調(diào)整方法) ): 若若ALAL的低的低4 4位位99AF=1AF=1 則則(AL)(AL)+6(AL)(AL)+6,AF1AF1 若若ALAL的高的高4 4位位99CF=1CF=1 則則(AL)(AL)+60H(AL)(AL)+60H,CF1CF1l除除OFOF外,外,DAADAA指令影響所有其它標(biāo)志。指令影響所有其它標(biāo)志。lDAADAA指令應(yīng)緊跟在指令應(yīng)緊跟在ADDADD或或ADCA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論