微機原理與接口技術(shù):第3章3-3-2算術(shù)運算類指令_第1頁
微機原理與接口技術(shù):第3章3-3-2算術(shù)運算類指令_第2頁
微機原理與接口技術(shù):第3章3-3-2算術(shù)運算類指令_第3頁
微機原理與接口技術(shù):第3章3-3-2算術(shù)運算類指令_第4頁
微機原理與接口技術(shù):第3章3-3-2算術(shù)運算類指令_第5頁
已閱讀5頁,還剩70頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1算術(shù)運算類指令算術(shù)運算指令(Arithmetic)包括加、減、乘、除和十進(jìn)制調(diào)整指令等五類,可實現(xiàn)有符號數(shù)和無符號數(shù)的字或字節(jié)運算。算數(shù)運算結(jié)果是否溢出有符號數(shù)運算,標(biāo)志位OF=1表示結(jié)果溢出;無符號數(shù)運算,標(biāo)志位CF=1表示結(jié)果溢出;23算術(shù)運算類指令分類加法運算指令減法運算指令乘法指令除法指令十進(jìn)制調(diào)整指令算術(shù)運算指令的執(zhí)行大多會對狀態(tài)標(biāo)志位產(chǎn)生影響41.

加法指令加法指令A(yù)DD

帶進(jìn)位的加法指令A(yù)DC加1指令I(lǐng)NC加法指令對操作數(shù)的要求與MOV指令相同,但段寄存器不能作為加法指令的操作數(shù);INC指令的操作數(shù)只能是存儲器或寄存器,單作為存儲器操作數(shù)時,需使用PTR說明操作數(shù)的字長。51)普通加法指令A(yù)DD格式:ADDdest,src操作:src+destADD指令的執(zhí)行對全部6個狀態(tài)標(biāo)志位都產(chǎn)生影響dest說明:目的操作數(shù)可以是通用寄存器或存儲器,源操作數(shù)可以是通用寄存器、存儲器或立即數(shù),但不能同時為存儲器。例:ADD[BX],[SI]ADD指令不區(qū)分兩個加數(shù)是無符號數(shù)還是帶符號數(shù),運算結(jié)果的二進(jìn)制形式相同,影響狀態(tài)標(biāo)志位,但是相加的數(shù)必須是等字長的。

例:ADDAX,1200HADDAL,BL6加法指令例1執(zhí)行ADDAX,BX設(shè)(AX)=1234H,(BX)=0F7C9H7FLAGS標(biāo)志寄存器,存放運算結(jié)果的特征6個條件狀態(tài)標(biāo)志位(CF,SF,AF,PF,OF,ZF)3個控制狀態(tài)標(biāo)志位(IF,TF,DF)81511109876420OFDFIFTFSFZFAFPFCFFLAGS寄存器加法指令例19CF(CarryFlag)進(jìn)位標(biāo)志位。加(減)法運算時,若最高位有進(jìn)(借)位則CF=1PF(ParityFlag)奇偶標(biāo)志位。運算結(jié)果的低字節(jié)中“1”的個數(shù)為偶數(shù)時PF=lAF(AuxiliaryCarryFlag)輔助進(jìn)位標(biāo)志位。加(減)操作中,若低半字節(jié)向高半字節(jié)有進(jìn)位(借位),AF=1加法指令例110ZF(ZeroFlag)零標(biāo)志位。當(dāng)運算結(jié)果為零時ZF=1SF(SignFlag)符號標(biāo)志位。當(dāng)運算結(jié)果的最高位為1時,SF=lOF(OverflowFlag)溢出標(biāo)志位。當(dāng)算術(shù)運算的結(jié)果超出了有符號數(shù)的可表達(dá)范圍時,OF=l

加法指令例1加法指令例1執(zhí)行ADDAX,BX設(shè)(AX)=1234H,(BX)=0F7C9H11指令執(zhí)行后(AX)=09FDH,OF=0,SF=0,ZF=0,AF=0,PF=0,CF=112ADD指令例2MOVAL,78HADDAL,99H指令執(zhí)行后6個狀態(tài)標(biāo)志位的狀態(tài)13ADD指令例201111000+10011001000100011標(biāo)志位狀態(tài):CF=SF=AF=ZF=PF=OF=101000ADD指令例2執(zhí)行指令A(yù)DDWORDPTR[BX],9F76H;設(shè)DS=2000H,BX=1000H,

則目的物理地址PA=21000H;若執(zhí)行前(21000H)=88H,

(21001H)=A9H;14ADD指令例215162)ADC指令指令格式、對操作數(shù)的要求、對標(biāo)志位的影響與ADD指令完全一樣;ADC指令多用于多字節(jié)數(shù)相加,使用前要先將CF清零。ADCdest,src指令的操作:dest+src+CFdestADC指令例1假定CF=1,寫出下列指令執(zhí)行后的結(jié)果。

MOVAL,7FH

ADCAL,0A4H17執(zhí)行指令后:(AL)=24H,且CF=1ADC指令例218編寫程序,求兩個多字節(jié)無符號數(shù)0107A379H+10067E4FH的和。

ADC指令例219ADC指令例220ADC指令例2ADC指令主要用于多字節(jié)加法運算。由于8086一次最多只能實現(xiàn)兩個16位數(shù)相加,所以對多于兩個字節(jié)的數(shù)的加法,只能先加低16位(或8位),再加高16位(或高8位),但在高位相加時,必須要考慮低位向上的進(jìn)位,這時就需要ACD指令。21223)INC指令格式:

INCOPRD操作:

OPRD+1OPRD不能是段寄存器或立即數(shù)23常用于在程序中修改地址指針及循環(huán)次數(shù);指令中的操作數(shù)OPRD可以是寄存器或存儲器,但不能是段寄存器和立即數(shù)。INC指令不影響CF標(biāo)志位,但對其他5個狀態(tài)標(biāo)志會產(chǎn)生影響。INC指令例例:INCAX;INCBYTEPTR[SI];INCBYTEPTR[BX+DI+2];

24將SI內(nèi)容為偏移地址的存儲單元的內(nèi)容加1,結(jié)果送回該單元中將(DS*16+BX+DI+2)+1送入(DS*16+BX+DI+2)中INC指令例例:設(shè)BX=1234H,執(zhí)行指令I(lǐng)NCBX;

25結(jié)果:BX=1235H262.減法指令減法指令SUB帶借位的減法指令SBB減1指令DEC比較指令CMP求補指令NEGSUB,SBB,CMP指令對操作數(shù)的要求及對標(biāo)志位的影響和ADD指令完全相同;DEC,NEG指令則與INC指令有相同的要求;271)減法指令SUB格式:SUBdest,src操作:dest-srcdest對標(biāo)志位的影響與ADD指令同減法指令SUB例1例:28減法指令SUB例2執(zhí)行指令:SUBAX,[BX]

設(shè)(AX)=578FH,(DS)=1000H,

(BX)=2000H,(12000H)=7890H29指令執(zhí)行后(AX)=0DEFFHOF=0,SF=1,ZF=0,AF=0,PF=1,CF=1減法指令SUB例3例:執(zhí)行指令SUBDH,[BP+4]

設(shè)SS=4000H,BP=00E8H,

則物理地址PA=400ECH;

若執(zhí)行前:DH=87H,(400ECH)=45H;

執(zhí)行后:DH=42H;

標(biāo)志位:CF=0,ZF=0,SF=0,

AF=0,PF=0,OF=130312.

考慮借位的減法指令SBB指令格式、對操作數(shù)的要求、對標(biāo)志位的影響與SUB指令完全一樣指令的操作:dest-src-CF指令多用于多字節(jié)的減法運算;dest323.

減1指令DEC格式:DECOPRD操作:OPRD-1指令對操作數(shù)的要求與INC相同,常用于在循環(huán)程序中修改循環(huán)次數(shù)OPRD例:

DECAX

DECBYTEPTR[DI]33344.

求補指令NEG格式:NEGOPRD操作:0-OPRD8/16位寄存器或存儲器操作數(shù)說明:操作數(shù)同INC指令,影響所有狀態(tài)標(biāo)志位,操作數(shù)為零時CF=1,其它情況下CF=0。OPRD求補指令NEG例執(zhí)行指令:NEGAX

設(shè)(AX)=0FFFFH35

指令執(zhí)行后(AX)=0001H,

OF=0,SF=0,ZF=0,AF=1,PF=0,CF=1365.

比較指令CMP格式:CMPdest,src操作:dest-src說明:進(jìn)行減法運算,不送結(jié)果到目標(biāo)地址,僅影響6個狀態(tài)標(biāo)志位。37CMP指令

CMPAX,BX若AX=BX

若AX>BX若AX<BXCF=0CF=1ZF=138CMP指令39CMP指令用途:用于比較兩個數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件指令對操作數(shù)的要求及對標(biāo)志位的影響與SUB指令相同CMP指令例1例:比較AL內(nèi)容與50的大小,若AL>=50,則AH的內(nèi)容加1;否則,AH=0。4041CMP指令例2┇

MAXBUFXXHXXHXXH在數(shù)據(jù)段中以BUF為首的20個字節(jié)數(shù)中找最大的數(shù),并將其存放在MAX單元中。42CMP指令例2

LEABX,MAXLEASI,BUFMOVCL,20MOVAL,[SI]NEXT:INCSI

CMPAL,[SI]JNCGOON

;CF=0轉(zhuǎn)移

XCHG[SI],ALGOON:DECCLJNZNEXTMOV[BX],AL

HLTCMP指令例34344三、乘法運算指令無符號的乘法指令MUL帶符號的乘法指令I(lǐng)MUL注:乘法指令采用隱含尋址,隱含的是存放被乘數(shù)的累加器AL或AX及存放結(jié)果的AX,DX;451.無符號數(shù)乘法指令格式:MULOPRD

操作:OPRD為字節(jié)數(shù)OPRD為16位數(shù)OPRD可以是8位或16位的寄存器或存儲器。量操作數(shù)字長相等,且不能為立即數(shù);

AL×OPRDAX×OPRDDXAXAX不能是立即數(shù)源/目操作數(shù)均為無符號數(shù);目的操作數(shù)必須是累加器AX或AL,源操作數(shù)可以是除立即數(shù)之外的其它尋址方式;源操作數(shù)允許段跨越;除OF和CF之外的狀態(tài)標(biāo)志無定義;執(zhí)行MUL指令后,若乘積的高字/高字節(jié)為0,則OF=CF=0;否則,OF=CF=1。46無符號數(shù)乘法指令例例:MULBX4748無符號數(shù)乘法指令例MULBYTEPTR[BX]┇

BXXXHAL×XXHAX49無符號數(shù)乘法指令例1例:設(shè):AL=FEH,CL=11H,求AL與CL的乘積。執(zhí)行:MULCL結(jié)果:AX=10DEH若設(shè)為無符號數(shù)無符號數(shù)乘法指令例2【例3-8】將ADDR1和ADDR2兩個字節(jié)單元的無符號數(shù)相乘,乘積存放在ADDR3字單元中。50

解:使用無符號指令,程序如下:

MOVAL,ADDR1MULADDR2MOVADDR3,AX無符號數(shù)乘法指令例3例:無符號數(shù)0A3H與11H相乘。51522.帶符號數(shù)乘法指令格式:

IMULOPRD說明:源/目操作數(shù)均為帶符號數(shù);同MUL指令;除OF和CF之外的標(biāo)志無定義;執(zhí)行IMUL指令后,若乘積的高字/高字節(jié)是符號擴展位時,則OF=CF=0;否則,OF=CF=1。帶符號數(shù)乘法原則IMUL指令將OPRD視為帶符號數(shù),運算時若操作數(shù)為負(fù)數(shù),要先將操作數(shù)求補碼(補碼的補碼即真值),運算后再將結(jié)果求補(對真值求補碼)。53帶符號數(shù)乘法例154帶符號數(shù)乘法例255四、除法指令56無符號的除法指令DIV帶符號的除法指令I(lǐng)DIV注:除法指令要求被除數(shù)的字長是除數(shù)字長的2倍;若除數(shù)為8位,被除數(shù)16位,并放AX中;若除數(shù)為16位,被除數(shù)32位,放DX和AX中,其中DX放高16位,AX放低16位。571.無符號除法指令格式:DIVOPRD2.有符號除法指令格式:IDIVOPRD58除法指令的操作若OPRD是字節(jié)數(shù)執(zhí)行:AX/OPRD結(jié)果:AL=商AH=余數(shù)若OPRD是雙字節(jié)數(shù)執(zhí)行:DXAX/OPRD結(jié)果:AX=商DX=余數(shù)指令要求被除數(shù)是除數(shù)的雙倍字長無符號除法指令例:

DIVBL

DIVWORDPTR[SI]除法指令對6個狀態(tài)標(biāo)志位無影響。59AX除以BL,商放AL,余數(shù)放AHDA:AX除以SI和SI+1所指單元的內(nèi)容,商放AX,余數(shù)放DX有符號除法指令例【例3-9】設(shè)(AX)=0400H,(BL)=0B4H,執(zhí)行指令DIVBL和IDIVBL。解:①

執(zhí)行指令DIVBL

(AL)=05HAL←商

(AH)=7CHAH←余數(shù)

執(zhí)行指令I(lǐng)DIVBL

(AL)=0F3H=-13DAL←商

(AH)=24H=36DAH←余數(shù)在除法運算時若商溢出,直接轉(zhuǎn)入0型中斷處理。603符號位擴展指令格式:CBW字節(jié)轉(zhuǎn)換為字

CWD字轉(zhuǎn)換為雙字功能:

字節(jié)擴展AH←(AL)的符號位字?jǐn)U展DX←(AX)的符號位61算術(shù)運算類指令應(yīng)用例1例:編寫程序段求積和商。

程序段如下:

MOVAL,7FHMOVCL,0A2HMULCLMOVBX,003DHMOVDX,0DIVBXHLT62算術(shù)運算類指令應(yīng)用例2求兩個四字節(jié)無符號數(shù)0117A379H和10067E4FH的和。63MOVAX,0A379HADDAX,7E4FHMOVBX,0117HADCBX,1006H算術(shù)運算類指令應(yīng)用例3在內(nèi)存數(shù)據(jù)段從DATA開始的單元中存放了兩個8位無符號數(shù),比較它們的大小,并將大數(shù)送MAX單元。64LEABX,DATAMOVAL,[BX]INCBXCMPAL,[BX]

JNCDONEMOVAL,[BX]DONE:MOVMAX,ALHLT

五、十進(jìn)制調(diào)整指令作用:在BCD碼數(shù)據(jù)運算進(jìn)行修正。65非壓縮BCD碼加法調(diào)整指令壓縮BCD碼加法調(diào)整指令非壓縮BCD碼減法調(diào)整指令壓縮BCD碼減法調(diào)整指令非壓縮BCD碼乘法調(diào)整指令非壓縮BCD碼除法調(diào)整指令66計算機中的編碼信息和數(shù)據(jù)的二進(jìn)制編碼

即:字符、符號和十進(jìn)制數(shù)都必須用若干位二進(jìn)制碼來表示。BCD碼用二進(jìn)制編碼表示的十進(jìn)制數(shù),即二-十進(jìn)制碼,簡稱BCD碼。用4位二進(jìn)制碼表示一位十進(jìn)制數(shù)。ASCII碼西文字符編碼67BCD碼(8421碼)即用4位二進(jìn)制編碼表示1位十進(jìn)制數(shù),有效數(shù)字0-9.壓縮BCD碼常用于指令系統(tǒng)內(nèi)的某些指令的存儲;用4位二進(jìn)制碼表示一位十進(jìn)制數(shù),一個字節(jié)內(nèi)存放2個4位BCD碼;例:(10010010)BCD=92D非壓縮BCD碼(擴展BCD碼)常用于鍵盤或數(shù)字鍵盤的返回格式的存儲;用8位二進(jìn)制碼表示一位十進(jìn)制數(shù),每個字節(jié)內(nèi)存放1個BCD碼;低4位為有效BCD數(shù),高4位全為0;例:(0000

100100000010)BCD=92DBCD碼與二進(jìn)制數(shù)之間的轉(zhuǎn)換68原則:先轉(zhuǎn)換為十進(jìn)制數(shù),再轉(zhuǎn)換二進(jìn)制數(shù);反之同樣。例1:將二進(jìn)制數(shù)01000111轉(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

提交評論