微機(jī)原理413算術(shù)運(yùn)算指令_第1頁(yè)
微機(jī)原理413算術(shù)運(yùn)算指令_第2頁(yè)
微機(jī)原理413算術(shù)運(yùn)算指令_第3頁(yè)
微機(jī)原理413算術(shù)運(yùn)算指令_第4頁(yè)
微機(jī)原理413算術(shù)運(yùn)算指令_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

二、算術(shù)運(yùn)算指令

8086有加減乘除四種基本算術(shù)運(yùn)算指令??商幚頍o(wú)符號(hào)數(shù)或帶符號(hào)數(shù)的8位或16位二進(jìn)制數(shù),也可以進(jìn)行十進(jìn)制數(shù)的運(yùn)算。具體有六種:

1、加法指令

2、減法指令

3、乘法指令

4、除法指令

5、符號(hào)擴(kuò)展指令

6、十進(jìn)制調(diào)整指令4.28086/8088的指令集1、加法指令涉及帶符號(hào)數(shù)、無(wú)符號(hào)數(shù),帶符號(hào)數(shù)均為補(bǔ)碼表示;

8位帶符號(hào)數(shù):-128~+127;

8位無(wú)符號(hào)數(shù):0~255;

16位帶符號(hào)數(shù):-32768~+32767;

16位無(wú)符號(hào)數(shù):0~65535;操作結(jié)果影響標(biāo)志寄存器中的相應(yīng)標(biāo)志位。加法指令共包含三類(lèi):(1)加1指令I(lǐng)NC(2)不帶進(jìn)位加指令A(yù)DD(3)帶進(jìn)位加指令A(yù)DC(1)不帶進(jìn)位的加法指令A(yù)DD指令格式:

ADDdest,src;dest

←dest+src

指令功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的操作數(shù)中,源操作數(shù)的內(nèi)容不改變。

指令規(guī)范:

ADD指令可以實(shí)現(xiàn)字節(jié)或字的不帶進(jìn)位的加;但是相加的數(shù)必須是等字長(zhǎng)的。例:ADDAX,2000H;AX+2000H→AXADDAL,BL;AL+BL→AL

目的操作數(shù)可以是通用寄存器或存儲(chǔ)器;源操作數(shù)可以是通用寄存器、存儲(chǔ)器或立即數(shù);但是目的操作數(shù)與源操作數(shù)不能同時(shí)為存儲(chǔ)器。

ADD[BX],[SI];

ADD指令會(huì)影響標(biāo)志寄存器的內(nèi)容。

例1:ADDWORDPTR[BX],9F76H

設(shè)DS=2000H,BX=1000H,則目的物理地址=21000H;設(shè)執(zhí)行前(21000H)=88H,

(21001H)=A9H;

執(zhí)行過(guò)程:

1010100110001000B=A988H

+1001111101110110B=9F76H

10100100011111110B=48FEH

執(zhí)行后(21000H)=FEH,(21001H)=48H;

標(biāo)志位:CF=1,最高位產(chǎn)生進(jìn)位;

OF=1,兩負(fù)數(shù)相加,和為正,結(jié)果是錯(cuò)的,說(shuō)明溢出;

ZF、SF、PF和AF全為零。(2)帶進(jìn)位加指令A(yù)DC指令格式:

ADCdest,src;dest

←dest+src+CF

指令功能:將目的操作數(shù)加源操作數(shù),再加前面指令產(chǎn)生的進(jìn)位,結(jié)果送目的操作數(shù)。指令規(guī)范同ADD指令;帶進(jìn)位加法指令A(yù)DC常用于多字節(jié)數(shù)的運(yùn)算例2:求兩個(gè)4字節(jié)無(wú)符號(hào)數(shù)

0107A379H+10067E4FH的和。法1:程序段:

MOVDX,0107H MOVAX,0A379H MOVBX,1006H MOVCX,7E4FH ADDAX,CX ADCDX,BX HLT結(jié)果:(DX:AX)=110E21C8H0107A379H10067E4FH+

110E21C8H、例2:求兩個(gè)4字節(jié)無(wú)符號(hào)數(shù)

0107A379H+10067E4FH的和。(續(xù))法2:程序段:

LEABX,DA1 LEASI,DA2 MOVAX,[BX] ADDAX,[SI] MOVDX,[BX+2] ADCDX,[SI+2] HLTA3H07H01H79H10H06H7EH4FHDA1DA2……(3)加1指令I(lǐng)NC指令格式:

INCOPR;OPR←OPR+1指令功能:將目的操作數(shù)加1,結(jié)果送目的操作數(shù)。INC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)??梢詾樽止?jié)操作或字操作。加1指令不影響CF標(biāo)志。

例:設(shè)BX=1234H,執(zhí)行指令

INCBX;結(jié)果:BX=1235H加1指令可用于對(duì)計(jì)數(shù)器和地址指針進(jìn)行修改。

INCAL ;AL+1→AL INCCX ;CX+1→CX INCBYTEPTR[BX+DI+2]

;(DS*16+BX+DI+2)+1→(DS*16+BX+DI+2)(1)不帶借位的減指令SUB(2)帶借位減指令SBB(3)減1指令DEC(4)求補(bǔ)指令NEG(5)比較指令CMP2、減法指令(1)不帶借位的減指令SUB指令格式:

SUBdest,src;dest

←dest-src

指令功能:目的操作數(shù)減源操作數(shù),結(jié)果存于目的操作數(shù),源操作數(shù)內(nèi)容不變;指令規(guī)范同ADD指令;例:減法運(yùn)算。

MOVAX,5678H ;AX=5678H SUBAX,1234H ;AX=4444H MOVBX,3354H ;BX=3354H SUBBX,3340H ;BX=0014H

例3:SUBDH,[BP+4]

設(shè)SS=4000H,BP=00E8H,物理地址=400ECH;

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

執(zhí)行后:DH=BEH;標(biāo)志位:最高位產(chǎn)生借位,CF=1;

ZF=0,SF=1,AF=1,PF=1;正數(shù)減負(fù)數(shù)等于負(fù)數(shù),結(jié)果為負(fù),錯(cuò)。原因是69+121=190>+127,則OF=1,溢出;如果表示數(shù)的運(yùn)算范圍受到限制,可以擴(kuò)展成16位字運(yùn)算,結(jié)果就正確。45H87H-

BEH、(2)帶借位減指令SBB指令格式:

SBBdest,src;dest

←dest–src-CF

指令功能:目的操作數(shù)減源操作數(shù)再減低位借位CF,結(jié)果送目的操作數(shù),源操作數(shù)內(nèi)容不變。指令規(guī)范同ADD指令;主要用于多字節(jié)(字)減法運(yùn)算中。例:SUBAX,BX SBBDX,CXDXAXCXBX-

DXAX、(3)減1指令DEC指令格式:

DECOPR;OPR←OPR-1

指令功能:將目的操作數(shù)減1,結(jié)果送目的操作數(shù)。DEC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)。可以為字節(jié)操作或字操作。減1指令不影響CF標(biāo)志。

例4:設(shè)CX=100,執(zhí)行指令

DECCX;CX←CX-1

結(jié)果:CX=99減1指令DEC也一般用于對(duì)計(jì)數(shù)器和地址指針的修改。

DECAX DECCL DECWORDPTR[SI](4)求補(bǔ)指令NEG指令格式:

NEGOPR;OPR←OPR

指令功能:將目的操作數(shù)的每一位求反(包括符號(hào)位),然后末位加1,結(jié)果送目的操作數(shù)。NEG指令實(shí)現(xiàn)帶符號(hào)數(shù)的求補(bǔ)操作;實(shí)際上執(zhí)行的是0-OPR→OPR。NEG指令影響標(biāo)志位。若操作數(shù)為零時(shí),CF=0;否則,CF=1;若字節(jié)操作數(shù)為-128(80H)、字操作數(shù)為-32768(8000H),求補(bǔ)后值不變,但OF=1。例5:分析下面求補(bǔ)運(yùn)算指令段的執(zhí)行結(jié)果。

MOV AX,0FF64H NEG AL ;AX=0FF9CH,CF=1 SUB AL,9DH ;AX=0FFFFH,CF=1 NEG AX ;AX=0001H,CF=1 DEC AL ;AX=0000H NEG AX ;AX=0000H,CF=0(5)比較指令CMP指令格式:

CMPdest,src

;

dest–src

,

;并置標(biāo)志位指令功能:目的操作數(shù)減源操作數(shù),根據(jù)結(jié)果置相應(yīng)標(biāo)志位,dest,src的值不變。dest,src的規(guī)定同ADD指令中的操作數(shù);比較指令設(shè)置標(biāo)志位,由條件轉(zhuǎn)移指令檢測(cè)決定是否轉(zhuǎn)移。例6:比較AL內(nèi)容與50的大小,若AL>=50,則AH的內(nèi)容加1;否則,AH=0。程序段:

CMPAL,50;AL-50 JBBELOW;AL<50,轉(zhuǎn)到BELOW處執(zhí)行

INCAH ;當(dāng)AL>=50,AH+1→AH

JMPLOOPBELOW:MOVAH,00H;AH=0

LOOP:HLT

根據(jù)操作數(shù)是無(wú)符號(hào)數(shù)還是有符號(hào)數(shù)判斷如下:(1)兩個(gè)無(wú)符號(hào)數(shù)A和B的比較(A-B) 當(dāng)A=B時(shí),ZF=1; 當(dāng)A≠B時(shí),ZF=0; 當(dāng)A>B時(shí),CF=0;可用ZF和CF標(biāo)志位來(lái)確定 當(dāng)A<B時(shí),CF=1;(2)兩個(gè)帶符號(hào)數(shù)A和B的比較(A-B)當(dāng)A≥B時(shí),OF=SF=0或1,即OF

SF=0;當(dāng)A<B時(shí),OF=0,SF=1或OF=1,SF=0,即OF

SF=1;例7:將內(nèi)存[2050H]和[2051H]中的大數(shù)送[2052H]AL

[2050H]AL-[2051H]AL>[2051H][2052H]

ALNYMAXAL

[2051H]

MOVAL,[2050H]CMPAL,[2051H]JGMAXMOVAL,[2051H]MAX:MOV[2052H],AL;AL大時(shí)SF

0;如果SF=0則轉(zhuǎn)MAX3、乘法運(yùn)算指令(1)無(wú)符號(hào)數(shù)乘法指令MUL(2)帶符號(hào)數(shù)乘指令I(lǐng)MUL(1)無(wú)符號(hào)數(shù)乘法指令MUL

指令格式:

MULsrc

;隱含尋址,對(duì)字或字節(jié)的乘法指令功能:字節(jié)乘法:AX←AL×src

(8位),若AH0,則CF=OF=1

字乘法:DX:AX←AX×src

(16位),若DX0,則CF=OF=1

例8:無(wú)符號(hào)數(shù)0A3H與11H相乘。

MOV AL,0A3H ;AL=0A3H MOV BL,11H ;BL=11H MUL BL ;AX=0AD3H說(shuō)明:源操作數(shù)src不能是立即數(shù)和段寄存器;

MUL03H

當(dāng)src是存儲(chǔ)單元時(shí),必須在操作數(shù)之前加上屬性說(shuō)明。CF=OF=1,表明結(jié)果的高半部分不為0。乘法指令不影響其他標(biāo)志位。(2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL

指令格式:

IMULsrc

;B/W,隱含尋址指令功能:字節(jié)乘法:AX←AL×src

(8位),若AH0,則CF=OF=1

字乘法:DX:AX←AX×src

(16位),若DX0,則CF=OF=1

IMUL指令除運(yùn)算對(duì)象是帶符號(hào)二進(jìn)制數(shù)(補(bǔ)碼)外,其他都與MUL一樣。src是寄存器或存儲(chǔ)單元的內(nèi)容。例9:帶符號(hào)數(shù)0B4H與11H相乘。

MOVAL,0B4H ;AL=B4H MOV BL,11H ;BL=11H IMULBL ;AX=0FAF4H

說(shuō)明:

若結(jié)果的高8位為全0或全1,表明是低8位的符號(hào)位擴(kuò)展;

帶符號(hào)數(shù)的乘法,應(yīng)先處理符號(hào),然后用原碼計(jì)算結(jié)果。例10:設(shè)AL=FFH,DL=02H,執(zhí)行指令

MULDL;AX

AL×DL

即:AX

FFH×02H=255×02=510=01FEH

執(zhí)行指令

IMULDL;AX

AL×DL

即:AXFFH×02H=-1×02=-2=FFFEH

4、除法運(yùn)算指令(1)無(wú)符號(hào)數(shù)除指令DIV(2)帶符號(hào)數(shù)除指令I(lǐng)DIV(1)無(wú)符號(hào)除指令DIV指令格式:

DIVsrc

;B/W,隱含尋址指令功能:字節(jié)除法:AX/(src)8→AL(商),AH(余數(shù))

字除法:(DX:AX)/(src)16→AX(商),

DX(余數(shù))完成兩個(gè)不帶符號(hào)的二進(jìn)制數(shù)除;src是寄存器或存儲(chǔ)單元的內(nèi)容,不能是立即數(shù);運(yùn)算結(jié)果只影響溢出標(biāo)志OF,當(dāng)除數(shù)為0或AL(AX)中的商大于FFH(FFFFH)時(shí),OF=1。

例11:寫(xiě)出實(shí)現(xiàn)無(wú)符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。

MOV AX,0400H;AX=0400H MOV BL,0B4H ;BL=0B4H DIV BL ;商AL=05H,

;余數(shù)AH=7CH(2)帶符號(hào)數(shù)除指令I(lǐng)DIV指令格式:

IDIVsrc

;B/W,隱含尋址指令功能:字節(jié)除法:AX/src→AL(商),AH(余數(shù)); 字除法:DX,AX/src→AX(商),

DX(余數(shù));除法指令DIV和IDIV雖然對(duì)標(biāo)志的影響未定義,但可產(chǎn)生溢出。例12:帶符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。

MOV AX,0400H ;AX=0400H MOV BX,0B4H ;BX=0B4H IDIV BX ;AL=0F3H,

;AH=24H說(shuō)明:帶符號(hào)數(shù)的除法,也是先處理符號(hào),然后用原碼計(jì)算結(jié)果。完成兩個(gè)帶符號(hào)數(shù)的二進(jìn)制數(shù)相除,商和余數(shù)均為帶符號(hào)數(shù);src規(guī)定同MUL;除法結(jié)果不影響標(biāo)志寄存器中相應(yīng)位,為0或1,無(wú)意義;商超出AL(8位除)或AX(16位除)所能表示范圍,此時(shí)除數(shù)為0處理,產(chǎn)生零號(hào)中斷,所得商和余數(shù)均無(wú)效;當(dāng)8位/8位、16位/16位時(shí),應(yīng)進(jìn)行符號(hào)位擴(kuò)展,否則得到錯(cuò)誤結(jié)果。5、符號(hào)擴(kuò)展指令(1)字節(jié)擴(kuò)展成字指令CBW(2)字?jǐn)U展成雙字指令CWD

適用于帶符號(hào)數(shù)除法運(yùn)算,當(dāng)被除數(shù)的位數(shù)不夠除時(shí)。(1)字節(jié)擴(kuò)展成字指令CBW指令格式:CBW;若AL<80H,AH=00H

;若AL>80H,AH=FFH

指令功能:將AL中的符號(hào)位數(shù)據(jù)擴(kuò)展至AH。例13:將字節(jié)數(shù)據(jù)擴(kuò)展成字?jǐn)?shù)據(jù)。

MOV AL,0A5H ;AL=0A5H CBW ;AX=0FFA5H,AH=0FFH ADD AL,70H ;AL=25H CBW ;AX=0025H,AH=00H(2)字?jǐn)U展成雙字指令CWD

指令格式:CWD;若AX﹤8000H,DX=0000H

;若AX﹥8000H,DX=FFFFH

指令功能:將AX中的符號(hào)位數(shù)據(jù)擴(kuò)展至DX。例14:將字?jǐn)?shù)據(jù)擴(kuò)展成雙字?jǐn)?shù)據(jù)。

MOVAX,0FFABH;AX=0FFABHMOVBX,6543H;

CWD ;DX=0FFFFH,AX=0FFABHIDIVBX;(DX:AX)/BX例15:求(V-(X*Y+Z-540))/X,其中X、Y、Z、V均為16位帶符號(hào)數(shù),已分別裝入X、Y、Z、V字單元中,結(jié)果的商放AX中,余數(shù)放DX中。

MOVAX,X SUBCX,540 IMULY SBBBX,0 MOVCX,AX MOVAX,V MOVBX,DX CWD MOVAX,Z SUBAX,CX CWD SBBDX,BX ADDCX,AX IDIVX ADCBX,DX HLT6、十進(jìn)制調(diào)整指令算術(shù)運(yùn)算指令都是二進(jìn)制數(shù)的運(yùn)算,十進(jìn)制輸入—二進(jìn)制運(yùn)算—十進(jìn)制輸出。計(jì)算機(jī)中的十進(jìn)制數(shù)實(shí)際上是十進(jìn)制數(shù)的二進(jìn)制編碼。通稱(chēng)為二—十進(jìn)制或BCD碼。常用8421BCD碼。對(duì)應(yīng)表:

十進(jìn)制數(shù)BCD碼 十進(jìn)制數(shù)BCD碼

0 0000 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4 0100 9 1001壓縮BCD碼:一個(gè)字節(jié)表示兩位十進(jìn)制數(shù)。例:8759D壓縮BCD碼為8759H非壓縮BCD碼:一個(gè)字節(jié)表示一位十進(jìn)制數(shù),其中低四位表示8421的BCD碼,高四位為0000,沒(méi)有意義。例:8759D非壓縮BCD碼為08070509H(1)壓縮BCD碼加法十進(jìn)制調(diào)整指令指令格式:DAA

指令功能:

AL寄存器的值調(diào)整成壓縮的BCD碼格式。低4位大于9或輔助進(jìn)位AF=1,則AL=AL+6且AF=1;如果AL>=0A0H或CF=1,則AL=AL+60H且CF=1。用在ADD、ADC指令之后。結(jié)果均影響SF、ZF、PF。例16:壓縮BCD碼的加法運(yùn)算。

MOVAL,68H ;AL=68H,68的壓縮BCD碼

MOVBL,28H ;BL=28H,28的壓縮BCD碼

ADDAL,BL ;二進(jìn)制加法,

;AL=68H+28H=90H DAA ;十進(jìn)制調(diào)整,

;實(shí)現(xiàn)壓縮BCD碼加法

68+28=9601101000+0010100010010000二進(jìn)制加法00000110十進(jìn)制調(diào)整10010000+10010110(2)壓縮BCD碼減法十進(jìn)制調(diào)整指令

指令格式:DAS

指令功能:

AL中的值調(diào)整到壓縮BCD碼格式如果AL寄存器中低4位大于9,則AL=AL-6且AF=1;如果AL>=0A0H或CF=1,則AL=AL-60H且CF=1;用在SUB、SBB指令之后。均影響SF、ZF、PF。例17:壓縮BCD碼的減法運(yùn)算。

MOVAL,68H;AL=68H,68的壓縮BCD碼

MOVBL,29H;BL=29H,29的壓縮BCD碼

SUBAL,BL;二進(jìn)制減法,

;AL=68H-29H=3EH DAS;十進(jìn)制調(diào)整,

;實(shí)現(xiàn)壓縮BCD碼減法:

;68-29=39例18:編程計(jì)算1+2+3+4+…+10

MOVAL,0MOVCL,10MOVCH,0NEXT:ADDAL,CLDAA;DECCLJNZNEXT;HLT程序中將DAA指令去掉,最后AL結(jié)果是?

對(duì)AL調(diào)整為十進(jìn)制數(shù)結(jié)果AL=55H(即十進(jìn)制數(shù)55)AL清0AL

AL+CL調(diào)整為十進(jìn)制數(shù)CLCL-1CL=0NYCX10,計(jì)數(shù)初值結(jié)束CL0轉(zhuǎn)NEXT例19:求(BCD1)+(BCD2)→(BCD3)設(shè)(BCD1)=1834,(BCD2)=2789。程序:MOVAL,BCD1 ADDAL,BCD2 DAA MOVBCD3,AL MOVAL,BCD1+1 ADCAL,BCD2+1 DAA MOVBCD3+1,AL HLT(3)非壓縮的BCD碼加法調(diào)整(加法的ASCII調(diào)整指令)

格式:AAA

操作:AL

AL中的內(nèi)容調(diào)整為非壓縮的BCD碼格式AH

AH+調(diào)整產(chǎn)生的進(jìn)位調(diào)整方法:如果AL的低4位大于9或AF=1,則:

1)AL

AL+6;2)AL高4位清03)CF

AF=1,AHAH+1;否則僅使AL的高4位清0例20:MOVAL,‘8’;AL

38HADDAL,‘4’

;AL38H+34H=6CHAAA;AL6CH+6=72H02H

;AH01H結(jié)果:8+4=12(4)非壓縮的BCD碼的減法調(diào)整(減法的ASCII調(diào)整指令)

格式:AAS

操作:AL

AL中的內(nèi)容調(diào)整為非壓縮的BCD碼格式AH

AH-調(diào)整產(chǎn)生的進(jìn)位調(diào)整方法:如果AL的低4位大于9或AF=1,則:

1)AL

AL-6;2)AL高4位清03)CF

1,AHAH-1;否則僅使AL的高4位清0

例21:MOVAL,‘8’;AL

38HSUBAL,‘4’

;AL38H-34HAAS;AL04H

結(jié)果:8–4=4

(5)乘法的十進(jìn)制調(diào)正指令A(yù)AM

對(duì)AX中由兩個(gè)非壓縮BCD碼相乘的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為:

(AL)/0AH,(AH)←商,(AL)←余數(shù)隱含的操作寄存器為AL和AH;

AAM跟在MUL指令之后使用;影響標(biāo)志位PF、SF、ZF,其它無(wú)定義;

用AAM可實(shí)現(xiàn)≤99的二-十進(jìn)制轉(zhuǎn)換。例22:按十進(jìn)制乘法計(jì)算7

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論