第三章 8086 CPU的指令系統(第三講)chap3_3_第1頁
第三章 8086 CPU的指令系統(第三講)chap3_3_第2頁
第三章 8086 CPU的指令系統(第三講)chap3_3_第3頁
第三章 8086 CPU的指令系統(第三講)chap3_3_第4頁
第三章 8086 CPU的指令系統(第三講)chap3_3_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1格式:INC reg/mem功能:類似于C語言中的+操作:對指定的操作數加1 例: INC AL INC SI INC BYTE PTRBX+4注:本指令不影響注:本指令不影響CFCF標志。標志。3) 3) 加加1 1指令指令INCINC(單操作數指令單操作數指令)2ADD/ADC對條件標志位對條件標志位(CF/OF/ZF/SF)的影響:的影響:CF位表示無符號數相加的溢出。位表示無符號數相加的溢出。OF位表示帶符號數相加的溢出。位表示帶符號數相加的溢出。1 結果為負結果為負0 否則否則SF=1 結果為結果為00 否則否則ZF=1 和的最高有效位有向高位的進位和的最高有效位有向高位的進位0

2、否則否則CF=1 兩個操作數符號相同,而結果符號與之相反兩個操作數符號相同,而結果符號與之相反0 否則否則OF=3(1) (1) 不考慮借位的減法指令不考慮借位的減法指令SUBSUB 格式: SUB dest, src 操作: dest(dest)-(src)注:注:1.1.源和目的操作數不能同時為存儲器操作數源和目的操作數不能同時為存儲器操作數 2.2.立即數不能作為目的操作數立即數不能作為目的操作數指令例子:指令例子: SUB AL,60H SUB BX+20H,DX SUB AX,CX2. 2. 減法指令減法指令4SBB指令主要用于多字節的減法。格式: SBB dest, src操作:

3、dest(dest)-(src)-(CF)指令例子:指令例子: SBB AX,CX SBB WORD PTRSI,2080H SBB SI,DX(2) (2) 考慮借位的減法指令考慮借位的減法指令SBBSBB5例:例:x、y、z均為均為32位數,分別存放在地址為位數,分別存放在地址為X, X+2;Y,Y+2;Z,Z+2的存儲單元中,用指令序列的存儲單元中,用指令序列實現實現wx+y+24-z,結果放在,結果放在W, W+2單元中。單元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+2

4、4 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 結果存入結果存入W, W+2單元單元6作用類似于C語言中的”操作符。格式:DEC opr 操作:opr(opr)-1指令例子:指令例子: DEC CL DEC BYTE PTRDI+2 DEC SI (3) (3) 減減1 1指令指令DECDEC7格式: NEG opr操作: opr 0-(opr)對一個操作數取補碼相當于用0減去此操作數,故利用NEG指令可得到負數的絕對值。例:若(AL)=0FCH,則執行 NEG AL 后, (AL)=04H,CF=1本例中,0FCH為-4的

5、補碼,執行求補指令后,即得到4(-4的絕對值)。(4) (4) 求補指令求補指令NEGNEG8SUB/SBB對標志位對標志位(CF/OF/ZF/SF)的影響的影響 CF=1表示無符號數減法溢出。表示無符號數減法溢出。 OF=1表示帶符號數減法溢出。表示帶符號數減法溢出。NEG指令對指令對CF/OF的影響:的影響: CF:操作數為:操作數為0時,求補的結果使時,求補的結果使CF=0,否則,否則CF=1。 OF:字節運算對:字節運算對-128求補或字運算對求補或字運算對-32768求補時求補時OF=1, 否則否則OF=0。1 被減數的最高有效位有向高位的借位被減數的最高有效位有向高位的借位0 否則

6、否則CF=1 兩個操作數符號相反,而結果的符號與減數相同兩個操作數符號相反,而結果的符號與減數相同0 否則否則OF=9格式: CMP dest, src操作: (dest)-(src)CMP也是執行兩個操作數相減,但結果不送目標操作數,其結果只反映在標志位上。指令例子:指令例子: CMP AL,0AH CMP CX,SI CMP DI,BX+03(5) (5) 比較指令比較指令CMPCMP10根據標志位來判斷比較的結果根據標志位來判斷比較的結果1)根據ZF判斷兩個數是否相等。若ZF=1,則兩數相等。2)若兩個數不相等,則分兩種情況考慮: 比較的是兩個無符號數 若CF=0,則destsrc; 若

7、CF=1,則destsrc。 比較的是兩個有符號數 若OF SF=0,則destsrc; 若OF SF=1,則destsrc。11比較指令在使用時,一般在其后緊跟一條條件比較指令在使用時,一般在其后緊跟一條條件轉移指令,判斷比較結果的轉向。轉移指令,判斷比較結果的轉向。舉例:比較AL、BL、CL中帶符號數的大小,將 最小數放在AL中。程序: CMP AL,BL ;AL和BL比較 JNG BBB ;若ALBL,則轉 XCHG AL,BL ;若ALBL,則交換 BBB: CMP AL,CL ;AL和CL比較 JNG CCC ;若ALCL,則轉 XCHG AL,CL ;若ALCL,則交換 CCC:

8、HLT12進行乘法時:8位*8位16位乘積 16位*16位32位乘積(1) 無符號數的乘法指令MUL(MEM/REG)格式:格式: MUL src操作:字節操作數操作:字節操作數 (AX) (AL) (src) 字操作數字操作數 (DX, AX) (AX) (src)指令例子:指令例子: MUL BL ;(AL)( (BL),乘積在AX中 MUL CX ;(AX)( (CX),乘積在DX,AX中 MUL BYTE PTRBX3. 3. 乘法指令乘法指令 13格式與MUL指令類似,只是要求兩操作數均為有符號數有符號數。指令例子:指令例子: IMUL BL ;(AX)(AL)(BL) IMUL W

9、ORD PTRSI ;(DX,AX)(AX)(SI+1SI) (2) (2) 有符號數乘法指令有符號數乘法指令IMULIMUL注意:注意:MUL/IMUL指令中 AL(AX)為隱含的乘數寄存器; AX(DX,AX)為隱含的乘積寄存器; SRC不能為立即數; 除CF和OF外,對其它標志位無定義。14乘法指令對乘法指令對CF/OF的影響:的影響:00 乘積的高一半為零乘積的高一半為零11 否則否則MUL指令指令: CF/OF =00 乘積的高一半是低一半的符號擴展乘積的高一半是低一半的符號擴展11 否則否則 IMUL指令指令: CF/OF =例:例:(AL) = A5H(-5B),(BL) = 1

10、1H (1) IMUL BL ; (AX) (AL)(BL) ; A511 -5B11=-060B F9F5 ; (AX) = F9F5H CF=OF=1 (2) MUL BL ; (AX) (AL)(BL) ; A511= 0AF5 ; (AX) = 0AF5H CF=OF=1 154. 4. 除法指令除法指令進行除法時:16位/8位8位商 32位/16位16位商對被除數、商及余數存放有如下規定: 被除數 商余數字節除法 AX AL AH 字除法 DX:AX AX DX16格式:格式: DIV src操作:字節操作操作:字節操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX

11、) / (SRC) 的余數的余數 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數的余數指令例子:指令例子: DIV CL DIV WORD PTRBX注:若除數為零或注:若除數為零或ALAL中商大于中商大于FFH(FFH(或或AXAX中商大于中商大于FFFFH)FFFFH),則,則CPUCPU產生一個類型產生一個類型0 0的內部中斷。的內部中斷。(1) (1) 無符號數除法指令無符號數除法指令DIVDIV17(2) (2) 有符號數除法指令有符號數除法指令IDIVIDIV格式:格式: IDIV src操作與DIV類似。商及

12、余數均為有符號數,且余數符號總是與被除數符號相同。注意注意: 對于對于DIV/IDIV指令指令 AX(DX,AX)為隱含的被除數寄存器。為隱含的被除數寄存器。 AL(AX)為隱含的商寄存器。為隱含的商寄存器。 AH(DX)為隱含的余數寄存器。為隱含的余數寄存器。 src不能為立即數。不能為立即數。 對所有條件標志位均對所有條件標志位均無定義無定義。18 除法運算要求被除數字長是除數字長的兩倍,若不滿足則需對被除數進行擴展對被除數進行擴展,否則產生錯誤。 對于無符號數除法擴展,只需將AH或DX清零即可。 對有符號數而言,則是符號位的擴展。可使用前面介紹過的符號擴展指令CBW和CWD關于除法操作中

13、的字長擴展問題關于除法操作中的字長擴展問題19例例: 寫出寫出34H25H的程序段。的程序段。MOV AL,34H MOV BL,25H CBW ; AL的符號擴展到AH IDIV BL ; 0034H25H,結果為 ; (AH)=0FH, (AL)=01H20* *5.BCD5.BCD碼運算的十進制調整指令碼運算的十進制調整指令 專用于對BCD碼運算的結果進行調整 包括:AAA、DAA、AAS、DAS、AAM、AAD 均為隱含尋址,隱含的操作數為ALAL和AHAH 為何要對BCD碼的運算結果進行調整? BCD碼本質上是十進制數,即應遵循逢碼本質上是十進制數,即應遵循逢十進一的規則。而計算機是

14、按二進制十進一的規則。而計算機是按二進制(十六進制)進行運算,并未按十進制(十六進制)進行運算,并未按十進制規則進行運算。規則進行運算。211 1) )加法的十進制調整指令加法的十進制調整指令( (1 1) )非壓縮非壓縮BCDBCD碼加法調整碼加法調整AAA本指令對在AL中的由兩個未組合的BCD碼相加后的結果進行調正,得到一個正確的未組合的BCD碼。AAA指令只影響AF和CF,其余標志無定義。AAAAAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。22如果AL的低4位9AF=1,則: AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) CFAF否

15、則AL(AL)0FHAAAAAA指令的操作如下:指令的操作如下:23調整原理:先看一個例子調整原理:先看一個例子 計算89 0000 1000 見右式 +0000 1001 0001 0001 11 結果應為17,而計算機相加為11,原因在于運算過程中,如遇到低4位往高4位產生進位時(此時AF=1)是按逢十六進一的規則,但BCD碼要求逢十進一,因此只要產生進位,個位就會少6,這就要進行加6調正。這個1代表了16,而實際上僅應為10,即多進了6。 24實際上當低4位的結果9(即AF之間)時,也應進行加6調正 (原因是逢十沒有進位,故用加6的方法強行產生進位) 。如對上例的結果進行加6: 0001

16、 0001 11 + 0000 0110 6 0000 0111 17 0000 1111- 1 0000 111125例2:有兩個字符串形式的十進制數,2658和 3619,求二者之和。即2658+3619=? 由題意知,被加數和加數的每一位都以ASCIIASCII碼碼形式存放在內存中。假定二數在內存中均是低位在前,高位在后,另留出5個單元存放相加的結果。內存中數據存放形式見下頁圖。2636H32H39H31HSTRING1STRING238H35H36H33H被加數加數數據段85629163SUM結果.27程序段為: LEA SI,STRING1 ;STRING1偏移地址送SI LEA D

17、I,STRING2 ;STRING2偏移地址送DI LEA BX,SUM ;SUM偏移地址送BX MOV CX,4 ;循環4次 CLC ;清進位標志AGAIN:MOV AL,SI ADC AL,DI ;帶進位加 AAA ;未壓縮BCD碼調正 MOV BX,AL ;結果存入SUM INC SI ;調整指針 INC DI INC BX DEC CX ;循環計數器減1 JNZ AGAIN ;若未處理完,則轉AGAIN28 思考題: 1.根據程序寫出結果SUM的值。 2.若最高位有進位,程序如何修改? 3.從此例不難看出,用AAA指令也可對字符串形式的十進制數加法進行調整,所以它又被稱為加法的ASCI

18、I調正指令。為什么AAA指令既可對非壓縮BCD碼加法進行調整,也可對ASCII碼形式的十進制數進行調整?(注意AAA指令的第步)29( (2 2) )壓縮壓縮BCDBCD碼加法調整碼加法調整DAAl兩個壓縮BCD碼相加結果在AL中,通過DAA調整得到一個正確的壓縮BCD碼.l指令操作(調整方法): 若AL的低4位9AF=1 則(AL)(AL)+6,AF1 若AL的高4位9CF=1 則(AL)(AL)+60H,CF1l除OF外,DAA指令影響所有其它標志。lDAADAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。30例: 0100 1000 48H MOV AL,48

19、H + 0111 0100 74H MOV BL,74H 1011 1100 BCH ADD AL,BL + 0110 0110 66H DAA 1 0010 0010 1 22H (進位) (進位) 執行ADD后,(AL)=BCH,高4位低4位均大于9,故DAA指令執行加66H調整,最后結果為: (AL)=22H, CF=1, AF=131( (1)1)非壓縮非壓縮BCDBCD碼減法的十進制調正指令碼減法的十進制調正指令AASAAS 對AL中由兩個非壓縮的BCD碼相減的結果進行調整。調整操作為: 若AL的低4位9或AF=1,則: AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH

20、 CFAF 否則:AL(AL)0FH2)2)減法的十進制調整指令減法的十進制調整指令32舉例:16-8=? MOV AX,0106H 0000 0110 06 MOV BL,08H - 0000 1000 - 08 SUB AL,BL 1111 1110 FE AAS - 0000 0110 - 06 1111 1000 F8 0000 1111 0F 0000 1000 08結果為:(AL)=08H,(AH)=0,CF=AF=133( (2)2)壓縮壓縮BCDBCD碼減法的十進制調正指令碼減法的十進制調正指令DASDAS 對AL中由兩個壓縮BCD碼相減的結果進行調整。調整操作為: 若AL的低4位9AF=1,則: AL(AL)-6, 且AF1 若AL的高4位9CF=1,則: AL(AL)-60H,且CF1 DAS對OF無定義,但影響其

溫馨提示

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

評論

0/150

提交評論