計算機軟硬件設(shè)計與實踐:32算術(shù)運算_第1頁
計算機軟硬件設(shè)計與實踐:32算術(shù)運算_第2頁
計算機軟硬件設(shè)計與實踐:32算術(shù)運算_第3頁
計算機軟硬件設(shè)計與實踐:32算術(shù)運算_第4頁
計算機軟硬件設(shè)計與實踐:32算術(shù)運算_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、算術(shù)運算類指令加法指令減法指令乘法指令除法指令算術(shù)運算類指令共同特點:用來執(zhí)行算術(shù)運算,有單操作數(shù)指令,也有雙操作數(shù)指令雙操作數(shù)指令的兩個操作數(shù)中除源操作數(shù)為立即數(shù)的情況外,必須有一個操作數(shù)在寄存器中。單操作數(shù)指令不允許使用立即數(shù)方式加法指令加指令ADD帶進位加指令ADC加1指令 INCAAADAA加法運算除INC不影響CF位外,其余都影響條件標志位(CF ZF SF OF PF AF)CF位是根據(jù)最高有效位是否有向高位的進位設(shè)置的。有,CF1OF根據(jù)操作數(shù)的符號及變化情況來設(shè)置若兩操作數(shù)符號相同,結(jié)果的符號與之相反,OF1OF表示帶符號數(shù)的溢出CF表示無符號數(shù)的溢出加運算指令語句格式:ADD

2、 OPD, OPS功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,源地址的內(nèi)容不改變。即(OPD)+(OPS)(OPD)。加指令ADDADD目的操作數(shù)可以是通用寄存器或存儲器,源操作數(shù)可以是通用寄存器、存儲器或立即數(shù)。注意目的操作數(shù)和源操作數(shù)不能同時是存儲器操作數(shù)。段寄存器不能直接參加算術(shù)運算。加法指令的操作對象可以是16位或8位。 ADDADD AL,10ADD AX,BXADD DX,BETASIADD MEMDI,SI存儲器與立即數(shù)相加,存儲器的屬性需要指定ADD DELTABX,1250H ;DELTA為字變量ADD BYTE PTR SI,25H ;指定存儲器為字節(jié)類型語句格式

3、:ADC OPD,OPS功能:將目的操作數(shù)加源操作數(shù)再加低位進位,結(jié)果送目的地址。用法:該指令常用于多精度加法的計算。即(OPD)+(OPS)+CF (OPD)?!纠繜o符號雙字加法運算。MOVAX,4652H;(AX)=4652HADDAX,0F0F0H;(AX)=3742H,CF=1MOVDX,0234H;(DX)=0234HADCDX,0F0F0H;(DX)=0F325H,CF=0帶進位加指令ADC設(shè)在數(shù)據(jù)段定義了兩個多精度的16進制數(shù):FIRST和SECOND ,求兩數(shù)之和,并將結(jié)果存放在THIRD為首地址的存儲器中。Exp31.asmFIRST DW 758DH,9A5CHSECON

4、D DW 0A524H,8345HTHIRD DW 3 DUP(0)LEA SI,F(xiàn)IRST ;取加數(shù)的有效地址LEA DI,SECOND ;取被加數(shù)的有效地址LEA BX,THIRD ;取存放和的有效地址MOV AX,SI ;取加數(shù)的第一個字ADD AX,DI ;與被加數(shù)的第一個字相加MOV BX,AX ;存第一次運算的部分和PUSHF ;保護標志位 ADD SI,2 ;加數(shù)地址加2,指向下一加數(shù)的地址ADD DI,2 ;被加數(shù)地址加2,指向下一被加數(shù)的地址ADD BX,2 ;和地址加2,指向下一部分和的地址POPF ;恢復標志位MOV AX,SI ;從加數(shù)中取出第二個字ADC AX,DI

5、;與被加數(shù)的第二個字進行帶進位相加MOV BX,AX ;存第二次部分和ADC WORD PTR BX+2,0 ;將進位存入和的第三字中語句格式:INC OPD功能:將目的操作數(shù)加1,結(jié)果送目的地址。即(OPD)+1OPD。INC指令是一個單操作數(shù)指令,操作數(shù)可以是寄存器或存儲器操作數(shù)。如:INC BX,即(BX)+1BX。用法:加1指令可用于對計數(shù)器和地址指針進行調(diào)整,由于對CF無影響,所以無需保護狀態(tài)標志位。 加1指令 INCINCINC CL ;8位寄存器加1INC SI ;16位寄存器加1INC BX ;16位寄存器加1INC MEM-BYTE DI ;字節(jié)存儲器加1INC MEM-WO

6、RD SI ;字存儲器加1語句格式:AAA 功能:未組合的BCD加法調(diào)整指令,亦可以作為ASCII碼加法調(diào)整指令。用法:必須將其和放在累加器AL中,AAA指令要緊跟在加法指令之后使用。如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)+6 (AH)=(AH)+1(AF)=(CF)=1 且AL高4位清零。否則:(CF)=(AF)=0 AL高4位清零。加法的非壓縮BCD碼調(diào)整指令AAAAAA例如計算兩個十進制數(shù)和8+6=?,程序段如下:MOV AX,0008HMOV BL,06HADD AL,BLAAA;調(diào)整后(AX)=0104H,(CF)=1AAA假設(shè)上述兩個十進制數(shù)用ASCII碼表示

7、,則變成38H+36H=?,其程序段如下:MOV AX,0038HMOV BL,36HADD AL,BL ;(AL)=6EHAAA ;(AX)=0104H加法的十進制調(diào)整指令DAA 語句格式:DAA功能:如果AL寄存器中低4位大于9或輔助進位(AF)=1,則(AL)=(AL)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,則(AL)=(AL)+60H且(CF)=1。同時,SF、ZF、PF均有影響。對OF無影響加法的十進制調(diào)整指令DAA 【例】壓縮BCD碼的加法運算。MOV AL,68HMOV BL,28HADD AL,BLDAA ;(AL)=68H,表示壓縮BCD碼68;(BL)=2

8、8H,表示壓縮BCD碼28;(AL)=68H+28H=90H;十進制調(diào)整:(AL)=96H;實現(xiàn)壓縮BCD碼加法:68+28=96DAA例如:對兩個十進制數(shù)求和,78+56=?,可用如下指令實現(xiàn):MOV AL,78H ;(AL)=78HADD AL,56H ;(AL)=CEHDAA ;(AL)=34H,(CF)=1減指令SUB帶借位減指令 SBB減1指令DEC求補指令NEG比較指令 CMPAASDAS減運算指令減運算指令減法運算的條件碼設(shè)置與加法運算類似OF根據(jù)操作數(shù)的符號及變化情況來設(shè)置若兩操作數(shù)符號相反,結(jié)果的符號與減數(shù)相同,則OF1OF表示帶符號數(shù)的溢出CF表示無符號數(shù)的溢出語句格式:S

9、UB OPD,OPS功能:目的操作數(shù)減源操作數(shù),結(jié)果存于目的地址,源地址內(nèi)容不變。即(OPD)(OPS)(OPD)指令將對CF、AF、SF、ZF、PF、OF狀態(tài)標志位有影響,使用的操作數(shù)組合與ADD指令相同。減指令SUBSUBMOV AX ,5678H;(AX)=5678HSUB AX ,1234H;(AX)=4444HMOV BX ,3354H;(BX)=3354HSUB BX ,3340H;(BX)=0014HSUB AX,VARBX+SI SUB ALPHADI,DX語句格式:SBB OPD ,OPS功能:目的操作數(shù)減源操作數(shù)再減低位借位CF,結(jié)果送目的地址。即(OPD)(OPS)CF

10、( OPD)用法:SBB指令常用于多精度的減法運算中。帶借位減指令 SBB例求876A935247H-5A6C486D2BH=? Sbb.asm設(shè)數(shù)據(jù)在數(shù)據(jù)段中定義如下:DATA SEGMENT ;定義數(shù)據(jù)段minuend DB 47H,52H,93H,6AH,87Hsubtrahend DB 2BH,6DH,48H,6CH,5AHCOUNT EQU $- subtrahend;$地址計數(shù)器的值Minus DB COUNT DUP(O)DATA ENDS ;數(shù)據(jù)段結(jié)束CODE SEGMENT ;定義代碼段ASSUME CS:CODE,DS:DATA,ES:DATASUBTRACT PROC F

11、ARSTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,minuendLEA DI,subtrahendLEA BX,minusMOV CX,COUNTCLCAGAIN: MOV AL,SISBB AL,DIMOV BX,ALINC SIINC DIINC BXDEX CX ;CX(CX)-1JNZ AGNIN ;(CX)0轉(zhuǎn)移MOV AH,4CH ;結(jié)束程序執(zhí)行INT 21HSUBTRACT ENDPCODE ENDS ;代碼段結(jié)束END START語句格式:DEC OPD 功能:將目的操作數(shù)減1,結(jié)果送目的地址。即(OPD)1(OPD)。標志位:除CF標志

12、位不受影響外,其余狀態(tài)標志均受影響。目的操作數(shù):可以放在通用寄存器和存儲器中。如:DEC CX。即(CX)1CX。減1指令DEC也一般用于對計數(shù)器和地址指針的調(diào)整。減1指令DEC語句格式:NEG OPD0(OPD)(OPD)。操作數(shù):可以是通用寄存器或存儲器。標志位:影響SF、ZF、AF、PF、OF,在一般情況下,總使CF=1,除非操作數(shù)為零時,才使CF=0;OF標志一般情況下為0,但當操作為80H或8000H,NEG指令對其求補,結(jié)果與原操作數(shù)相同,此時OF=1。求補指令NEG【例】求補運算。MOVAX,0FF64HNEGALSUBAL,9DHNEGAXDECALNEGAX求補指令NEG;(

13、AX)=0FF9CH;(AX)=0FFFFH;(AX)=0001H;(AX)=0000H;(AX)=0000H比較指令 CMP語句格式:CMP OPD,OPS功能:目的操作數(shù)減源操作數(shù),結(jié)果只影響標志位,不送入目的地址。即(OPD)(OPS)。用法:此指令常用于比較兩個數(shù)的大小,當比較指令與條件轉(zhuǎn)移指令結(jié)合使用時,可以完成各種條件判斷和相應(yīng)的程序轉(zhuǎn)移。比較指令 CMP【例】比較AL的內(nèi)容數(shù)值大小。CMPAL,50;(AL)50JBBELOW ;(AL)=50,( AL)50ALINCAH ;(AH)+1AHBELOW:在10個無符號數(shù)中求最大值,最大值存放在MAX變量中,Max.asmDATA

14、 SEGMENTBLOCK DB 1AH,5CH,62H,97H,0A5H,73H,05H,3AH,4CH,1BHMAX DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAX-UN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK MOV CX,9 MOV AL,SIAGAIN: CMP AL,SI+1 JNC NEXT MOV AL,SI+1NEXT: INC SI DEC CX JNZ AGAIN MOV MAX,AL MOV AX,4C00H INT 21HMAX-U

15、N ENDPCODE ENDS END MAX-UN語句格式:AAS 功能:是未組合BCD碼減法調(diào)整指令,可對AL中的兩個未組合的十進制數(shù)相減的結(jié)果進行調(diào)整,使差成為正確的十進制數(shù)。如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)6 (AH)=(AH)1 (AF)=(CF)=1 AL高4位清零。否則:(CF)=(AF)=0 AL高4位清零。其他標志位OF、PF、SF、ZF不確定。減法的非壓縮BCD碼調(diào)整指令求257=?其結(jié)果用十進制數(shù)未組合的BCD碼表示??捎孟铝兄噶钔瓿蛇@個十進制數(shù)減法MOV AX,0205HSUB AL,07HAAS; (AH)=02H,(AL)=05H; (A

16、L)=FEH, (AF)=1;(AH)=01H,(AL)=08H,(CF)=1求7446=?該數(shù)用ASCII碼表示,則為3734H3436H,ASCVAL1 DB 37H,34HASCVAL2 DB 34H,36HASCVAL3 DB ?,?LEA SI,ASCVAL1+1LEA DI,ASCVAL2+1LEA BX,ASCVAL3+1MOV CX,2CLCAGAIN: MOV AL,SISBB AL,DIAASMOV BX,ALDEC SIDEC DIDEC BXDEC CXJNZ AGAIN減法的十進制調(diào)整指令DAS語句格式:DAS功能:如果(AF)=1或AL寄存器中低4位大于9,則(AL

17、)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,則(AL)=(AL)60H且(CF)=1。同時SF、ZF、PF均受影響。減法的十進制調(diào)整指令DAS【例】壓縮BCD碼的減法運算。MOVAL,68HMOVBL,28H SUBAL,BLDAS;(AL)=68H,表示壓縮BCD碼68;(BL)=28H,表示壓縮BCD碼28;(AL)=68H28H=40H;十進制調(diào)整:(AL)=40H;實現(xiàn)壓縮BCD碼減法:6828=4074-46=? 可用如下指令運算:MOV AL,74H ;(AL)=74HSUB AL,46H ;(AL)=2EHDAS;(AL)=28H,( CF)=1乘運算指令

18、無符號數(shù)乘法指令MUL有符號乘指令I(lǐng)MULAAM特點:目的操作數(shù)必須是累加器,源操作數(shù)可以使用除立即數(shù)方式以外的任一種尋址方法乘運算指令對CF和OF以外的條件碼無定義(狀態(tài)不定)對MUL指令,若乘積的高一半為0,CF和OF為0對iMUL指令,若乘積的高一半為低一半的符號擴展,CF和OF為0無符號數(shù)乘法指令MUL語句格式: MUL OPS (ops為reg/mem),功能: 若是字節(jié)數(shù)據(jù)相乘,(AL)與OPS相乘得到字數(shù)據(jù)存入AX中;若是字數(shù)據(jù)相乘,則(AX)與OPS相乘得到雙字數(shù)據(jù),高字存入DX、低字存入AX中。即字節(jié)乘法:(AL)* (OPS) (AX),字乘法:(AX) * (OPS) (

19、DX,AX)MUL特點:由于被乘數(shù)是隱含操作數(shù),故在使用該指令前應(yīng)將被乘數(shù)存入累加器AL、AX;標志位:只影響CF和OF標志位,其余標志不確定。乘法的類型由操作數(shù)的類型決定,例如操作數(shù)類型為字節(jié)時,則為字節(jié)相乘,即(AL)(reg8/mem8),其結(jié)果存放在AX中。無符號數(shù)乘法指令MUL【例】無符號數(shù)0A3H與11H相乘。MOVAL,0A3H;(AL)=0A3HMOVBL, 11H;(BL)=11HMULBL ;(AX)=0AD3H下面例子中乘數(shù)為存儲器:MUL BYTE1;(AL)(BYTE1)AXMUL WORD1 ;(AX)(WORD1)DX:AX例如:MUL CL ;(AL)(CL)A

20、XMUL BX ;(AX)(BX)DX:AX有符號乘指令I(lǐng)MUL語句格式:IMUL OPS功能:字節(jié)乘法:(AL)*(OPS)(AX),字乘法:(AX)*(OPS)(DX、AX)。IMUL指令除計算對象是帶符號二進制數(shù)外,其他都與MUL一樣,但計算結(jié)果不同。 【例】有符號數(shù)0B4H與11H相乘。MOVAL,0B4H;(AL)=B4HMOVBL,11H;(BL)=11HIMULBL ;(AX)=0FAF4HAAM未組合的BCD碼乘法調(diào)整指令AAM功能:它將AX中未組合BCD碼的乘積調(diào)整為正確的未組合的BCD碼,高位在AH中,低位在AL中。AAM具體操作如下:AHAL/0AH ;除10取整商AHA

21、LAL%0AH ;除10取余AL計算847569=? Mul.asm mul-input.asmDATA SEGMENTMULTCAN DB 84756COUNT EQU &-MULTCANMULTPLR DB 9ASCPROD DB COUNT+1 DUP(0),$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA ,ES:DATAASCMUL PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT LEA SI,MULTCAN+COUNT1 LEA DI,ASCPROD+COUNT AND MULTR

22、LR,0FHAGAIN: MOV AL,SI AND AL,0FH MUL MULTPLR AAM ADD AL,DI AAA MOV DI,AL MOV DI1,AH DEC DI DEC SI LOOP AGAIN LEA SI,ASCPROD+COUNT MOV CX,COUNT+1NEXT: OR BYTE PTR SI,30H DEC SI LOOP NEXT MOV AX,4C00H INT 21HASCMUL ENDPCODE ENDS END ASCMUL除運算指令無符號除指令DIV有符號除指令I(lǐng)DIVAADCBWCWDCWDECDQ除運算指令特點:目的操作數(shù)必須存放在AX或D

23、X,AX中源操作數(shù)可以使用除立即數(shù)方式以外的任一種尋址方法除法指令對所有條件碼均無定義無符號除指令DIV語句格式:DIV OPS功能:字節(jié)除法:(AX)/(OPS) (AL)(商)、(AH)(余數(shù))字除法:(DX、AX)/(OPS) (AX)(商)、(DX)(余數(shù))【例】寫出實現(xiàn)無符號數(shù)0400H / 0B4H運算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余數(shù)(AH)=7CH 語句格式:IDIV OPS功能:字節(jié)除法:(AX)/(OPS) (AL)(商)、(AH)(余數(shù))字除法:(DX,AX)/(OPS) (

24、AX )(商)、(DX)(余數(shù))除法指令DIV和IDIV雖然對標志的影響未定義,但可產(chǎn)生溢出。【例】寫出實現(xiàn)有符號數(shù)0400H /0B4H運算的程序段。有符號除指令I(lǐng)DIVMOVAX,0400H;(AX)=0400HMOVBX,0B4H;(BX)=0B4HIDIVBX;(AL)=0F3H,(AH)=24HAADAAD ;隱含操作數(shù)AH,AL指令功能:除法運算前,先調(diào)整被除數(shù)AX內(nèi)容,將AX中的兩個未組合的BCD碼轉(zhuǎn)換成一個字節(jié)的二進制數(shù),即把非壓縮型十進制數(shù)變成二進制數(shù)。其操作為:AL(AH)10+(AL)AH0AAD例如:設(shè)AX=3238H,CL=37H:AND CL,0FHAND AX,0

25、F0FHAADDIV CL ;AX=3238H,CL=07;AX=0208H,CL=07;AX=001CH,CL=07;AX=0004H語句格式:CBW功能:將AL中的符號位數(shù)據(jù)擴展至AH?!纠繉⒆止?jié)數(shù)據(jù)擴展成字數(shù)據(jù)。MOVAL,0A5HCBWADDAL,70HCBW字節(jié)轉(zhuǎn)換成字指令CBW;(AL)=0A5H;(AX)=0FFA5H;(AL)=25H;(AX)=0025H語句格式:CWD功能:將AX中的符號位數(shù)據(jù)擴展至DX ?!纠繉⒆謹?shù)據(jù)擴展成雙字數(shù)據(jù)。MOVDX, 0MOVAX, 0FFABHCWD將字轉(zhuǎn)換成雙字指令CWD;(DX)=0;(AX)=0FFABH;(DX)=0FFFFH (

26、AX)=0FFABH指令功能:將EAX寄存器中的最高符號位擴展到EDX中,即將32位有符號數(shù)擴展到64位有符號數(shù),以便實現(xiàn)有符號數(shù)雙字除以雙字操作數(shù)。例如EAX=73591B4CH,執(zhí)行CDQ后,EDX=00000000H, EAX保持不變。 CDQ指令指令功能:將AX寄存器中最高符號位擴展到EAX的高16位。例如AX=ABCDH,執(zhí)行CWDE指令后,EAX=FFFFABCDH。CWDE指令有符號數(shù)和無符號數(shù)除法程序設(shè)計DATA SEGMENTBYTE1 DB 80HBYTE2 DB 16HWORD1 DW 2000HWORD2 DW 012OHWORD3 DW 1000HDATA ENDSC

27、ODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATADIVX PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,WORD1 ;wordbyte DIV BYTE1 ;rmdr:quot in AH:ALMOV AL,BYTE1 ;ByteByteSUB AH,AH ;extend dividend in AHDIV BYTE2 ;rmdr:quot in AH:ALMOV AX,WORD3 ;Double word wordMOV DX, WORD2 ;dividend in DX:AXDIV WORD1 ;rmdr:quot in DX:AXMOV AX,WORD1 ;wordwordSUB DX,DX ;extend dividend in DXDIV WORD3 ;rmdr:quot in DX:AXMOV AX,WORD1 ;wordwordIDIV BYTE1 ;rmdr:quot in AH:ALMOV A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論