




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第五講講 86系列微型計算機的指令系統曾鐵軍主要內容主要內容 86系列匯編語言及指令的格式與尋址方式系列匯編語言及指令的格式與尋址方式1 傳送類指令傳送類指令2 數據操作類指令數據操作類指令3 串操作指令串操作指令4 控制類指令控制類指令586系列匯編語言及指令的格式與尋址方式指令是讓計算機完成某種操作的命令,指令的集指令是讓計算機完成某種操作的命令,指令的集合稱作指令系統,不同系列計算機有不同的指令合稱作指令系統,不同系列計算機有不同的指令系統。系統。指令系統與計算機硬件有著某些對應關系,用指指令系統與計算機硬件有著某些對應關系,用指令進行編程能夠充分開發計算機硬件資源,它的令進行編程能夠
2、充分開發計算機硬件資源,它的程序目標代碼短、運行速度快。程序目標代碼短、運行速度快。86系列指令系統是在系列指令系統是在8位微處理器位微處理器86系列的指令系列的指令系統基礎上設計的,它兼容了系統基礎上設計的,它兼容了86系列的全部指令。系列的全部指令。匯編語言的指令語句與機器指令一一對應匯編語言的指令語句與機器指令一一對應圖中由前向后的箭頭表示是可選項,由后向前圖中由前向后的箭頭表示是可選項,由后向前的箭頭表示是重復項,圓頭方框表示是語句中的箭頭表示是重復項,圓頭方框表示是語句中的關鍵字。的關鍵字。5.1 86系列匯編語言及指令的格式與尋址方式【例例6.4】的程序如下:的程序如下:START
3、: INAL,71H; 將將71H端口的字節讀入端口的字節讀入ALCLC; 清除清除CFCMPAL,10; 將將AL的內容和的內容和10相比較相比較JCLP1; 小于小于10轉轉LP1CMPAL,20; 將將AL的內容和的內容和20相比較相比較JCLP2; 10AL20轉轉LP2MOVBL,0FFH ; 將將0FFH送入送入BL寄存器寄存器LP3:OUT73H,BL ; 將將0FFH輸出到輸出到73H端口端口HLT; 暫停暫停LP1:MOVBL,00 JMPLP3LP2:MOVBL,88H JMPLP3(1) 標號是給該指令所在地址取的名字。標號是給該指令所在地址取的名字。86系列匯系列匯編語
4、言中可使用的標識符必須遵循下列規則:編語言中可使用的標識符必須遵循下列規則:標識符由字母標識符由字母(az,AZ)、數字、數字(09)或或某些特殊字符某些特殊字符(,-,?)組成。組成。第一個字符必須是字母第一個字符必須是字母(az,AZ)或某些特或某些特殊的符號殊的符號(,-,?),但,但“?”不能單獨作標識符。不能單獨作標識符。標識符有效長度為標識符有效長度為31個字符,若超過個字符,若超過31個字符,個字符,則只保留前面的則只保留前面的31個字符為有效標識符。個字符為有效標識符。(2) 指令助記符是指令名稱的代表符號,它表示本指令助記符是指令名稱的代表符號,它表示本指令的操作類型,必要時
5、可在指令助記符的前面指令的操作類型,必要時可在指令助記符的前面加上一個或多個加上一個或多個“前綴前綴”,從而實現某些附加操,從而實現某些附加操作。作。(3) 操作數是參加本指令運算的數據,有些指令不操作數是參加本指令運算的數據,有些指令不需要操作數,可以缺省;有些指令需要兩個操作需要操作數,可以缺省;有些指令需要兩個操作數,這時必須用逗號數,這時必須用逗號(,)將兩個操作數分開;有將兩個操作數分開;有些操作數可以用表達式來表示。些操作數可以用表達式來表示。(4) 注釋部分是可選項,允許缺省,必須用分號注釋部分是可選項,允許缺省,必須用分號(;)5.1.2 86系列系列 CPU的尋址方式的尋址方
6、式尋址:把物理地址分配給程序各條指令的過程尋址:把物理地址分配給程序各條指令的過程尋址方式:根據指令的地址碼生成操作數的物尋址方式:根據指令的地址碼生成操作數的物理地址的方法理地址的方法2. 寄存器尋址寄存器尋址INC CX; 將將CX的內容加的內容加1ROLAH,1;將;將AH中的內容循環左移一位中的內容循環左移一位 操作數就在操作數就在CPU的內部寄存器中的內部寄存器中 對對16位操作數來說,寄存器可以為位操作數來說,寄存器可以為AX,BX,CX,DX,SI,DI,SP或者或者BP,而對,而對8位操作位操作數來說,寄存器可為數來說,寄存器可為AH,AL,BH,BL,CH,CL,DH,DL操
7、作就在操作就在CPU內部進行,不需要使用總線周期,內部進行,不需要使用總線周期,因此,執行速度快因此,執行速度快3. 直接尋址直接尋址MOV AX,1070H;將;將DS段的段的1070H和和1071H 兩單元的內容取到兩單元的內容取到AX中中默認為段寄存器是數據段寄存器默認為段寄存器是數據段寄存器DS。設。設DS2000H,則執行過程是將絕對地址為,則執行過程是將絕對地址為21070H和和21071H兩單元的內容取出送兩單元的內容取出送AX。如果要對其它段寄存器所指出的存儲區進行直接如果要對其它段寄存器所指出的存儲區進行直接尋址,則本條指令前必須用前綴指出段寄存器名。尋址,則本條指令前必須用
8、前綴指出段寄存器名。 CS:MOV BX,3000H;將將CS段的段的3000H和和3001H兩單元的內容送兩單元的內容送BX 設設CS為為5100H,則本指令在執行時,將,則本指令在執行時,將54000H和和54001H兩單元的內容取出送兩單元的內容取出送BX。4. 寄存器間接尋址寄存器間接尋址 操作數一定在存儲器中,存儲單元的有效地址由寄存操作數一定在存儲器中,存儲單元的有效地址由寄存器指出,這些寄存器可以為器指出,這些寄存器可以為BX,BP,SI和和DI之一,之一,即有效地址等于其中某一個寄存器的值:即有效地址等于其中某一個寄存器的值: BX BP EA SI DI BXBP+ 8位位移
9、量位位移量EA SI 16位位移量位位移量DI 和直接尋址一樣,如果指令前面沒有用前綴指明具體和直接尋址一樣,如果指令前面沒有用前綴指明具體的段寄存器,則尋址時默認的段寄存器通常為的段寄存器,則尋址時默認的段寄存器通常為DS。如。如寄存器為寄存器為BP時,則對應的段寄存器為時,則對應的段寄存器為SS。 在有些資料中,將位移量看成是一個相對值。細分起在有些資料中,將位移量看成是一個相對值。細分起來,寄存器間接尋址可分為以下來,寄存器間接尋址可分為以下4種:種:(1)以以BX寄存器進行間接尋址寄存器進行間接尋址數據段基址尋址。數據段基址尋址。 MOV AX,BX 設DS5000H,BX3000H,
10、則本指令在執行時,將53000H和53001H兩單元的內容送AX。ES MOVCX,BX 設ES3000H,BX4000H,則本指令在執行時,將34000H和34001H兩單元的內容送CX。(2) 以以BP寄存器進行間接尋址寄存器進行間接尋址堆棧段基址尋址。堆棧段基址尋址。 MOV BX,BP 設設SS5000H,BP4000H,則本指令在執行,則本指令在執行時,將時,將54000H和和54001H兩單元的內容送兩單元的內容送BX。(3) 以以SI和和DI寄存器進行間接尋址寄存器進行間接尋址變址尋址。變址尋址。SI和和DI寄存器分別稱為源變址寄存器和目的變址寄存寄存器分別稱為源變址寄存器和目的
11、變址寄存器,所以用這兩個寄存器來進行間接尋址也叫變址尋器,所以用這兩個寄存器來進行間接尋址也叫變址尋址。變址尋址通常用于對數組元素進行操作,另外,址。變址尋址通常用于對數組元素進行操作,另外,在在“54串操作指令中還將講到有些串操作指令要串操作指令中還將講到有些串操作指令要求用固定的變址寄存器對操作數進行尋址,操作過程求用固定的變址寄存器對操作數進行尋址,操作過程中,指令會自動修改變址寄存器中的地址,以指向下中,指令會自動修改變址寄存器中的地址,以指向下一個操作數。一個操作數。 (4) 將將BX,BP和和SI,DI寄存器組合起來進行寄存器組合起來進行間接尋址間接尋址基址加變址的尋址。通常將基址
12、加變址的尋址。通常將BX和和BP稱為基址寄存器,將稱為基址寄存器,將SI和和DI稱為變址寄存器。稱為變址寄存器。EABX SI BP + DI +偏移量偏移量MOV AX,BX+SI 設DS1000H,BX5000H,SI2000H,則上面指令在執行時,有效地址為7000H,本指令將17000H和17001H兩單元的內容取到AX中。 MOV AX,BX+SI+0050; 將BX和SI中的內容與0050相加作為有效地址【例例5.1】設設BX0158H,DI10A5H,位移,位移量量1B57H,DS2100H,并假定沒有使用段,并假定沒有使用段前綴,即把前綴,即把DS作為操作數對應的段寄存器。作為
13、操作數對應的段寄存器。在各種尋址方式下,這些寄存器和位移量所產生的在各種尋址方式下,這些寄存器和位移量所產生的有效地址和物理地址為:有效地址和物理地址為:直接尋址:直接尋址:有效地址有效地址1B57H物理地址物理地址21000H+1B57H22B57H寄存器間接尋址寄存器間接尋址(寄存器為寄存器為BX):有效地址有效地址0158H物理地址物理地址21000H+0158H21158HBX寄存器相對間接尋址:寄存器相對間接尋址:有效地址有效地址0158H+1B57H1CAFH物理地址物理地址21000H+1CAFH22CAFH變址尋址變址尋址(寄存器為寄存器為DI):有效地址有效地址10A5H物理
14、地址物理地址21000H+10A5H220A5HDI寄存器相對變址尋址:寄存器相對變址尋址:有效地址有效地址10A5H+1B57H2BFCH物理地址物理地址21000H+2BFCH23BFCH基址加變址的尋址基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI為變址為變址寄存器寄存器):有效地址有效地址0158H+10A5H11FDH物理地址物理地址21000H+11FDH221FDH相對的基址加變址的尋址相對的基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI為變址寄存器為變址寄存器):有效地址有效地址0158H+10A5H+1B57H2D54H物理地址物理地址21000H+2D54H
15、23D54H8086指令分類指令分類8086指令系統按功能可分為指令系統按功能可分為4大類型:大類型:1. 數據傳輸類數據傳輸類2. 數據操作類數據操作類3. 串操作類串操作類4. 控制類控制類傳送類指令傳送類指令一、數據傳送指令一、數據傳送指令數據傳送指令又可以分成數據傳送指令又可以分成4種:種:1. 通用數據傳送通用數據傳送2. 累加器專用傳送(輸入累加器專用傳送(輸入/輸出數據傳送)輸出數據傳送)3. 目的地址傳送目的地址傳送4. 標志寄存器轉送標志寄存器轉送 5.2.1 通用數據傳送指令通用數據傳送指令MOV指令格式:指令格式:MOV DST, SRC;源操作數和目的操作數可用上述源操
16、作數和目的操作數可用上述6種尋址方式的種尋址方式的任何一種。任何一種。將源操作數內容復制到目操作數中,結果目的操將源操作數內容復制到目操作數中,結果目的操作數的內容等于源操作數的內容,源操作數的內作數的內容等于源操作數的內容,源操作數的內容不變。即容不變。即OPRD2OPRD1。OPRD1和和OPRD2可以是字節或字,可以是字節或字, 但是必須但是必須等長。等長。對標志位的影響:無對標志位的影響:無通用寄存器(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲器立即數段寄存器(C S、 SS、 DS、 ES) 源操作數可以是通用寄存器、段寄存器、存源操作數可以是通用寄存器、
17、段寄存器、存儲器以及立即操作數,目標操作數可以是通儲器以及立即操作數,目標操作數可以是通用寄存器、段寄存器(用寄存器、段寄存器(CS除外)或存儲器。除外)或存儲器。 MOV regMOV reg,data ;data ;立即數送寄存器立即數送寄存器 MOV mem MOV mem,data ;data ;立即數送存儲單元立即數送存儲單元 MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中兩操作數中至少有一個為寄存器指令中兩操作數中至少有一個為寄存器 例例: MOV: MOVCLCL,DLDL MOV MOVAXAX,BXBXMOVMOVSISI,CXCX
18、MOVMOVCLCL,BX+5BX+5 MOV segregMOV segreg,mem/reg ;mem/reg ;存儲單元存儲單元/ /寄存器送段寄存器寄存器送段寄存器 MOV mem/regMOV mem/reg,segreg ;segreg ;段寄存器送存儲單元段寄存器送存儲單元/ /寄存器寄存器段寄存器段寄存器CS、IP及立即數不能作為目標操作數;及立即數不能作為目標操作數;兩個存儲單元之間不允許直接傳送數據;兩個存儲單元之間不允許直接傳送數據;立即數不能直接傳送到段寄存器;立即數不能直接傳送到段寄存器;兩個段寄存器之間不能直接傳送數據。兩個段寄存器之間不能直接傳送數據。 通用寄存器
19、(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲器立即數段寄存器(C S、 SS、 DS、 ES)幾個不能傳送的解決辦法:用幾個不能傳送的解決辦法:用AXAX作橋梁作橋梁存儲器存儲器存儲器:存儲器: MOV AXMOV AX,MEM1MEM1 MOV MEM2 MOV MEM2,AXAX段寄存器段寄存器段寄存器:段寄存器: MOV AXMOV AX,DSDS MOV ES MOV ES,AXAX段寄存器段寄存器立即數:立即數: MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX應用舉例:將應用舉例:將1000H1000H開始的開始的1001
20、00個存儲單元個存儲單元 全部填充為全部填充為ASCIIASCII碼碼2AH(2AH(* *) )。程序段如下:程序段如下: MOV DIMOV DI,1000H1000H MOV CX MOV CX,64H64H MOV AL MOV AL,2AH2AHAGAINAGAIN:MOV DIMOV DI,ALAL INC DI INC DI DEC CX DEC CX JNZ AGAIN JNZ AGAIN HLT HLT堆棧操作指令堆棧操作指令 什么是堆棧?什么是堆棧? 按按“后進先出后進先出(LIFO)(LIFO)”方式工作的存儲方式工作的存儲區域。堆棧以字為單位進行壓入彈出操作。區域。堆棧
21、以字為單位進行壓入彈出操作。為什么要設置堆棧?為什么要設置堆棧?為什么要按為什么要按 “后進先出后進先出”方式工作?方式工作?規定由規定由SSSS指示堆棧段的段基址,堆棧指針指示堆棧段的段基址,堆棧指針SPSP始終始終指向堆棧的頂部,指向堆棧的頂部,SPSP的初值規定了所用堆棧區的的初值規定了所用堆棧區的大小。堆棧的最高地址叫棧底。大小。堆棧的最高地址叫棧底。 壓棧指令壓棧指令 PUSH src ; src為為16位操作數位操作數 例:例:PUSHAX;將;將AX內容壓棧內容壓棧 執行操作:(執行操作:(SP)-1高字節高字節AH(SP)-2低字節低字節AL(SP)(SP)- 2設(設(AXA
22、X)=1020H=1020H,執行示意圖如圖,執行示意圖如圖低地址低地址存儲區存儲區(SS段)段)執行前執行前(AX)=1020(SP)存儲區存儲區(SS段)段)進棧方向進棧方向執行后執行后2010(AL)(AH)2-82-8PUSH AX指令執行示意圖指令執行示意圖(SP)-2(SP)高地址高地址低地址低地址高地址高地址(SP)- -1壓棧指令的格式為:壓棧指令的格式為: PUSHPUSH reg reg PUSH PUSH mem/reg mem/reg PUSH PUSH segreg segreg例如:例如: PUSH AXPUSH AX PUSH BX PUSH BX PUSH DS
23、 PUSH DS 注意進棧方向是注意進棧方向是高地址高地址向向低地址低地址發展。發展。 彈出指令彈出指令 POPPOPdestdest例:例:POPPOPBXBX;將棧頂內容彈至;將棧頂內容彈至BXBX 執行操作:執行操作: (BLBL)(SPSP)(BHBH)(SPSP)+1+1(SPSP)(SPSP)+2+2POP BX POP BX 的執行示意圖如下圖所示的執行示意圖如下圖所示低地址低地址存儲區存儲區(SS段)段)出棧方向出棧方向執行前執行前2010POP BX指令執行示意圖指令執行示意圖(SP)存儲區存儲區(SS段)段)執行后執行后(BX)=1020(SP)(SP)+1(SP)+2BX
24、20201010高地址高地址低地址低地址高地址高地址堆棧指令使用時應注意幾點:堆棧指令使用時應注意幾點:堆棧操作總是按字進行堆棧操作總是按字進行不能從棧頂彈出一個字給不能從棧頂彈出一個字給CSCS堆棧指針為堆棧指針為SS:SPSS:SP,SPSP永遠指向棧頂永遠指向棧頂SPSP自動進行增減量(自動進行增減量(-2-2,+2+2)PUSHDSPUSHES POP ESPOP DS格式:格式:XCHG mem/regXCHG mem/reg,mem/regmem/reg功能:交換兩操作數的內容。功能:交換兩操作數的內容。 要求:兩操作數中必須有一個在寄存器中;要求:兩操作數中必須有一個在寄存器中;
25、 操作數不能為段寄存器和立即數;操作數不能為段寄存器和立即數; 源和目地操作數類型要一致。源和目地操作數類型要一致。舉例:舉例: XCHGXCHGALAL,BLBL XCHG XCHGAXAX,BXBX XCHG XCHG2000H2000H,CLCL XCHG XCHG2530H2530H,CXCX交換指令交換指令XCHGXCHG5.2.2 目標地址傳送指令目標地址傳送指令注意以下兩條指令差別:注意以下兩條指令差別: LEA BXLEA BX,BUFFER BUFFER MOV BXMOV BX,BUFFERBUFFER前者表示將符號地址為前者表示將符號地址為BUFFERBUFFER的存儲單
26、元的偏侈的存儲單元的偏侈地址取到地址取到 BXBX中中; ;后者表示將后者表示將BUFFERBUFFER存儲單元中的存儲單元中的內容取內容取到到 BXBX中中. .LEAAX,2728;將將2728單元的偏移量單元的偏移量送送AX,指令執行后,指令執行后,AX中為中為2728LEABX,BP+SI;指令執行后,指令執行后,BX中的內容為中的內容為BP+SI的值的值LEASP,0482;使堆棧指針使堆棧指針SP為為482前提條件:前提條件:設設2130H2133H這這4個單元中存個單元中存放著一個地址,放著一個地址,2130H和和2131H中為地址的偏中為地址的偏移量,移量,2132H和和213
27、3H中為地址的段值中為地址的段值指令執行結果:指令執行結果:使使2130H和和2131H中的偏移量中的偏移量送到送到DI,2132H和和2133H中的段值送到中的段值送到DS。LDS DI,2130H ;LES DI,2130H ;指令執行結果:指令執行結果:使使2130H和和2131H中的偏移量中的偏移量送到送到DI,2132H和和2133H中的段值送到中的段值送到ES。5.2.4 標志傳送指令標志傳送指令(1)(1)讀標志指令讀標志指令LAHF LAHF把標志寄存器低把標志寄存器低8 8位中的位中的5 5個標志位傳個標志位傳送到送到AHAH中的指定位,如下圖所示中的指定位,如下圖所示: :
28、1D3D5D7D6D4D2D0DOFDF IF TF SF ZFAFPFCFAHLAHF指令的功能指令的功能FLAG(2)(2)設置標志指令設置標志指令SAHFSAHF SAHF的功能與的功能與LAHF的功能正好相反,的功能正好相反,用圖來示意,只要將上圖中用圖來示意,只要將上圖中5 5個箭頭方向反個箭頭方向反一下即可。一下即可。1D3D5D7D6D4D2D0DOFDF IF TF SF ZFAFPFCFAHSAHF指令的功能指令的功能FLAG 執行的操作執行的操作:(SP)-1:(SP)-1標志寄存器高標志寄存器高8 8位位 (SP)-2(SP)-2標志寄存器低標志寄存器低8 8位位 (SP
29、)(SP)-2(SP)(SP)-2(4)(4)從棧頂彈出標志寄存器指令從棧頂彈出標志寄存器指令POPF 執行的操作執行的操作: :標志寄存器低標志寄存器低8 8位位(SP)(SP) 標志寄存器高標志寄存器高8 8位位(SP)+1(SP)+1 (SP)(SP)+2 (SP)(SP)+2PUSHF和和POPF指令用于保護和恢復標志寄存器內容。指令用于保護和恢復標志寄存器內容。(3)(3)把標志寄存器推入棧頂指令把標志寄存器推入棧頂指令PUSHF例如:例如: PUSHPUSHAXAX PUSH PUSHCXCX PUSHF ; PUSHF ;保護標志寄存器內容保護標志寄存器內容 ; ;這段程序要用到
30、這段程序要用到AX,CXAX,CX以及標志位以及標志位 POPFPOPF ; ;恢復標志寄存器內容恢復標志寄存器內容 POPPOPCXCX POP POPAXAX數據傳送指令中,除數據傳送指令中,除SAHFSAHF和和POPFPOPF這兩條指令外,這兩條指令外,其余所有指令均不影響標志位。其余所有指令均不影響標志位。5.2.4 輸入輸出數據傳送指令輸入輸出數據傳送指令只限于用累加器只限于用累加器ALAL或或AXAX來傳送信息。來傳送信息。功能功能: (: (累加器累加器)I/O)I/O端口端口(1)(1)輸入指令輸入指令ININ IN acc,PORT IN acc,PORT ;PORT;PO
31、RT端口號端口號0 0255255 IN acc,DX IN acc,DX ;DX;DX表示的端口范圍達表示的端口范圍達64K64K例例:IN AL:IN AL,50H ;(AL50H ;(AL)(50H(50H端口端口) ) IN ALIN AL,DX ;(ALDX ;(AL)(DX)(DX) IN IN AXAX,70H70H;(AX;(AX)(70H(70H、71H71H端口端口) ) IN IN AXAX,DX DX ;(AX;(AX) (DX) (DX)、(、(DX+1DX+1)) )例:例:OUT 68HOUT 68H,AX ;(69HAX ;(69H,68H68H)(AXAX)
32、OUT DXOUT DX,AL ;(DX)(AL)AL ;(DX)(AL)在使用間接尋址的在使用間接尋址的IN/OUTIN/OUT指令時,要事先用傳送指令時,要事先用傳送指令把指令把I/OI/O端口號設置到端口號設置到DXDX寄存器,如:寄存器,如: MOV DX MOV DX,220H220H IN AL IN AL,DX ;DX ;將將220H220H端口內容讀入端口內容讀入ALAL格式:格式: OUT port,accOUT port,acc OUT DX,acc OUT DX,acc5.3 數據操作類指令數據操作類指令5.3.1 算術運算類指令算術運算類指令 涉及兩種類型數據涉及兩種類
33、型數據: 無符號數和有符號數。對無符號數和有符號數。對加減法指令,無符號和有符號數可采用同一套指加減法指令,無符號和有符號數可采用同一套指令,但應注意:令,但應注意:l 參加的操作數必須都是無符號數或都是有符號參加的操作數必須都是無符號數或都是有符號數。數。l 需使用不同的標志位來檢查無符號數和有符號需使用不同的標志位來檢查無符號數和有符號數的運算結果是否溢出。數的運算結果是否溢出。(1) (1) 不帶進位的加法指令不帶進位的加法指令ADDADD 格式:格式: ADDADD acc,data acc,data ADD ADD mem/reg,data mem/reg,data ADD ADD
34、mem/reg1,mem/reg2mem/reg1,mem/reg2例:例:ADDADDALAL,50H 50H ADD ADDCXCX,1000H1000H ADD ADDDXDX,SISI ADD ADDBX+DIBX+DI,AXAX ADD ADDAXAX,BX+2000HBX+2000HADDADD指令對標志位(指狀態標志)都有影響。指令對標志位(指狀態標志)都有影響。5.3.1.1 加法指令加法指令(2) (2) 帶進位位的加法指令帶進位位的加法指令ADCADC ADC ADC指令在形式上和功能上都有與指令在形式上和功能上都有與ADDADD類似,類似,只是相加時還要包括進位標志只是相
35、加時還要包括進位標志CFCF的內容,例如:的內容,例如: ADC AXADC AX,SI ;AX(AX)+(SI)+(CF)SI ;AX(AX)+(SI)+(CF) ADC DX ADC DX,SI ;SI ;DX(DX)+SI+1SI+(CF)DX(DX)+SI+1SI+(CF) ADC BX+DI ADC BX+DI,AX ;BX+DI+1BX+DI AX ;BX+DI+1BX+DI BX+DI+1BX+DI+AX+(CF)BX+DI+1BX+DI+AX+(CF) ADC AL ADC AL,5 ;AL(AL)+5+(CF)5 ;AL(AL)+5+(CF)例例: :有兩個有兩個4 4字節的
36、無符號數相加:字節的無符號數相加: 2C56F8AC+309E47BE=2C56F8AC+309E47BE=? 設被加數、加數分別存放在設被加數、加數分別存放在BUFFER1BUFFER1及及BUFFER2BUFFER2開開始的兩個存儲區內,結果放回始的兩個存儲區內,結果放回BUFFER1BUFFER1存儲區,如存儲區,如下頁圖所示。下頁圖所示。 因因CPUCPU只能進行只能進行8 8位或位或1616位的加法運算,為此可將位的加法運算,為此可將加法分加法分4 4次進行。次進行。ADCADC指令主要用于多字節加法運算中指令主要用于多字節加法運算中程序段如下:程序段如下: MOV CXMOV CX
37、,4 ;4 ;置循環次數置循環次數 MOV SIMOV SI,0 ;0 ;置置SISI初值為零初值為零 CLC ;CLC ;清進位標志清進位標志CFCFLLLL: MOVMOV AL AL,BUFFER2SIBUFFER2SI ADC ADC BUFFER1SI BUFFER1SI,AL ;AL ;帶進位加帶進位加 INCINC SI ;(SI)+1 SI ;(SI)+1 DEC DEC CX ;(CX)-1 CX ;(CX)-1 JNZ LL ; JNZ LL ;若若( (CX)CX) 0,0,則轉則轉LLLL思考:若最高位有進位,如何改?思考:若最高位有進位,如何改?格式:格式:INC r
38、eg/memINC reg/mem功能:類似于功能:類似于C C語言中的語言中的+操作:對指定的操作:對指定的操作數加操作數加1 1 例:例: INC ALINC AL INC SI INC SI INC BYTE PTRBX+4 INC BYTE PTRBX+4注:本指令不影響注:本指令不影響CFCF標志。標志。3) 3) 加加1 1指令指令INCINC(單操作數指令單操作數指令)5.3.1.2 減法指令減法指令(1) (1) 不考慮借位的減法指令不考慮借位的減法指令SUBSUB 格式:格式: SUB dest, srcSUB dest, src 操作:操作: dest(dest)-(src
39、)dest(dest)-(src)注:注:1.1.源和目的操作數不能同時為存儲器操作數源和目的操作數不能同時為存儲器操作數 2.2.立即數不能作為目的操作數立即數不能作為目的操作數指令例子:指令例子: SBBSBB指令主要用于多字節的減法。指令主要用于多字節的減法。格式:格式: SBB dest, src SBB dest, src操作:操作: dest(dest)-(src)-(CF)dest(dest)-(src)-(CF)指令例子:指令例子: SBB AX SBB AX,CX;CX; SBB WORD PTRSI SBB WORD PTRSI,2080H;2080H; SBB SI,DX
40、; SBB SI,DX; SBB SBBAXAX,2030H2030H; SBB SBBWORD PTR WORD PTR DI+2DI+2,1000H1000H;例:例:x、y、z均為均為32位數,這三個數的低位數,這三個數的低16位和高位和高16位分別存放位分別存放在地址為在地址為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 ; x和和y的低的低16位相加,結果存入位相加,結果存入AX ADC DX, Y+2
41、; x和和y的高的高16位相加,結果存入位相加,結果存入DX 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 ; 結果存入結果存入W, W+2單元單元作用類似于作用類似于C C語言中的語言中的”操作符。操作符。格式:格式:DEC oprDEC opr 操作:操作:opr(opr)-1opr(opr)-1指令例子:指令例子: DEC CL DEC CL DEC BYTE PTRDI+2 DEC BYTE PTRDI+2 DEC SI DEC SI (3) (3) 減減1 1指
42、令指令DECDEC格式:格式: NEG opr NEG opr操作:操作: opr 0-(opr)opr 0-(opr)對一個操作數取補碼相當于用對一個操作數取補碼相當于用0 0減去此操作數,故減去此操作數,故利用利用NEGNEG指令可得到負數的絕對值。指令可得到負數的絕對值。例:若例:若( (AL)=0FCHAL)=0FCH,則執行,則執行 NEG ALNEG AL 后,后, ( (AL)=04HAL)=04H,CF=1CF=1本例中,本例中,0FCH0FCH為為-4-4的補碼的補碼, ,執行求補指令后執行求補指令后, ,即得即得到到4(-44(-4的絕對值的絕對值) )。(4) (4) 求
43、補指令求補指令NEGNEG格式:格式: CMP dest, src CMP dest, src操作:操作: (dest)-(src)(dest)-(src)CMPCMP也是執行兩個操作數相減也是執行兩個操作數相減, ,但結果不送目標操作但結果不送目標操作數數, ,其結果只反映在標志位上。其結果只反映在標志位上。指令例子:指令例子: CMP AL CMP AL,0AH0AH CMP CX CMP CX,SISI CMP DI CMP DI,BX+03BX+03(5) (5) 比較指令比較指令CMPCMP根據標志位來判斷比較的結果根據標志位來判斷比較的結果1)1)根據根據ZF判斷兩個數是否相等。若
44、判斷兩個數是否相等。若ZF=1,=1,則兩數相則兩數相等。等。2)2)若兩個數不相等若兩個數不相等, ,則分兩種情況考慮則分兩種情況考慮: : 比較的是兩個無符號數比較的是兩個無符號數 若若CF=0,=0,則則destdestsrc;src; 若若CF=1,=1,則則destdestsrcsrc。 比較的是兩個有符號數比較的是兩個有符號數 若若OF SF=0=0,則則destdestsrc;src; 若若OF SF=1=1,則則destdestsrcsrc。比較指令在使用時,一般在其后緊跟一條條件轉移指比較指令在使用時,一般在其后緊跟一條條件轉移指令,判斷比較結果的轉向。令,判斷比較結果的轉向
45、。舉例:比較舉例:比較ALAL、BLBL、CLCL中帶符號數的大小,將中帶符號數的大小,將 最小數放在最小數放在ALAL中。中。程序:程序: CMP AL,BL CMP AL,BL ;ALAL和和BLBL比較比較 JNG BBB JNG BBB ;若若ALBL,ALBL,則轉則轉 XCHG AL,BL XCHG AL,BL ;若若ALALBL,BL,則交換則交換 BBB: CMP AL,CL BBB: CMP AL,CL ;ALAL和和CLCL比較比較 JNG CCC JNG CCC ;若若ALCL,ALCL,則轉則轉 XCHG AL,CL XCHG AL,CL ;若若ALALCL,CL,則交
46、換則交換 CCC: HLTCCC: HLT5.3.1.3 乘法指令乘法指令進行乘法時:進行乘法時:8 8位位* *8 8位位1616位乘積位乘積 16 16位位* *1616位位3232位乘積位乘積(1) (1) 無符號數的乘法指令無符號數的乘法指令MUL(MEM/REG)MUL(MEM/REG)格式:格式: MUL src操作:字節操作數操作:字節操作數 (AX) (AL) (src) 字操作數字操作數 (DX, AX) (AX) (src)指令例子:指令例子: MUL BL MUL BL ;(AL)(AL)(BL),(BL),乘積在乘積在AXAX中中 MUL CX MUL CX ;(AX)
47、(AX)(CX),(CX),乘積在乘積在DX,AXDX,AX中中格式與格式與MULMUL指令類似,只是要求兩操作數均為指令類似,只是要求兩操作數均為有符號有符號數數。IMUL BL IMUL BL ;(AX)(AL)(AX)(AL)(BL)(BL) IMUL WORD PTRSI IMUL WORD PTRSI ;(DX,AX)(AX)(DX,AX)(AX)(SI+1SI)(SI+1SI) (2) (2) 有符號數乘法指令有符號數乘法指令IMULIMUL5.3.1.4 除法指令除法指令進行除法時:進行除法時:1616位位/8/8位位8 8位商位商 3232位位/16/16位位1616位商位商對
48、被除數、商及余數存放有如下規定:對被除數、商及余數存放有如下規定: 被除數被除數 商商余數余數字節除法字節除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX無符號除法無符號除法DIV格式:格式: DIV src操作:字節操作操作:字節操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數的余數 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數的余數指令例子:指令例子: DIV CL DIV CL DIV WORD PTRBX DIV WO
49、RD PTRBX注:若除數為零或注:若除數為零或ALAL中商大于中商大于FFH(FFH(或或AXAX中商大于中商大于FFFFH)FFFFH),則,則CPUCPU產生一個類型產生一個類型0 0的內部中斷。的內部中斷。有符號數除法指令有符號數除法指令IDIV格式:格式: IDIV src操作與操作與DIVDIV類似。商及余數均為有符號數類似。商及余數均為有符號數, ,且余數且余數符號總是與被除數符號相同。符號總是與被除數符號相同。注意注意: 對于對于DIV/IDIV指令指令v AX(DX,AX)為隱含的被除數寄存器。為隱含的被除數寄存器。v AL(AX)為隱含的商寄存器。為隱含的商寄存器。v AH
50、(DX)為隱含的余數寄存器。為隱含的余數寄存器。v src不能為立即數。不能為立即數。v 對所有條件標志位均無定義。對所有條件標志位均無定義。v除法運算要求被除數字長是除數字長的兩倍除法運算要求被除數字長是除數字長的兩倍, ,若若不滿足則需對被除數進行擴展不滿足則需對被除數進行擴展, ,否則產生錯誤。否則產生錯誤。v對于無符號數除法擴展,只需將對于無符號數除法擴展,只需將AHAH或或DXDX清零即可清零即可。v對有符號數而言對有符號數而言,則是符號位的擴展。可使用前則是符號位的擴展。可使用前面介紹過的符號擴展指令面介紹過的符號擴展指令CBW和和CWD(5)(5)字節字節- -字轉換指令字轉換指
51、令格式:格式:CBW ;把把AL的符號位復制到的符號位復制到AH CWD ;把把AX的符號位復制到的符號位復制到DX用途:用于有符號數的除法。用途:用于有符號數的除法。例如:例如:(AL) = A7H,則執行,則執行CBW后,后,AH的內容為的內容為FFH。例例: 寫出寫出34H25H的程序段。的程序段。MOV AL,34H MOV BL,25H CBW ; AL的符號擴展到的符號擴展到AH IDIV BL ; 0034H25H,25H,結果為結果為 ; (AH)=0FH, (AL)=01H* *5.BCD5.BCD碼運算的十進制調整指令碼運算的十進制調整指令v專用于對專用于對BCD碼運算的結
52、果進行調整碼運算的結果進行調整v包括:包括:AAAAAA、DAADAA、AASAAS、DASDAS、AAMAAM、AADAADv均為隱含尋址,隱含的操作數為均為隱含尋址,隱含的操作數為ALAL和和AHAHv為何要對為何要對BCD碼的運算結果進行調整?碼的運算結果進行調整? BCD碼本質上是十進制數,即應遵循逢十進碼本質上是十進制數,即應遵循逢十進一的規則。而計算機是按二進制(十六進制)一的規則。而計算機是按二進制(十六進制)進行運算,并未按十進制規則進行運算。進行運算,并未按十進制規則進行運算。1 1) )加法的十進制調整指令加法的十進制調整指令( (1 1) )非壓縮非壓縮BCDBCD碼加法
53、調整碼加法調整AAA本指令對在本指令對在ALAL中的由兩個未組合的中的由兩個未組合的BCDBCD碼相加后的碼相加后的結果進行調正,得到一個正確的未組合的結果進行調正,得到一個正確的未組合的BCDBCD碼。碼。vAAAAAA指令只影響指令只影響AFAF和和CFCF,其余標志無定義。其余標志無定義。vAAAAAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。如果如果ALAL的低的低4 4位位9 9AF=1AF=1,則:則: AL(AL)+6,(AH)(AH)+1,AF1AL(AL)+6,(AH)(AH)+1,AF1 AL(AL)0FH) AL(AL)0FH) CFAF C
54、FAF否則否則AL(AL)0FHAL(AL)0FHAAAAAA指令的操作如下:指令的操作如下:調整原理:先看一個例子調整原理:先看一個例子 計算計算8 89 9 0000 10000000 1000 見右式見右式 +0000 1001 +0000 1001 0001 0001 0001 0001 1111 結果應為結果應為1717,而計算機相加為,而計算機相加為1111,原因在于運算過原因在于運算過程中,如遇到低程中,如遇到低4 4位往高位往高4 4位產生進位時(此時位產生進位時(此時AF=1AF=1)是按逢十六進一的規則,但是按逢十六進一的規則,但BCDBCD碼要求逢十進一碼要求逢十進一,因
55、此只要產生進位,個位就會少,因此只要產生進位,個位就會少6 6,這就要進行,這就要進行加加6 6調正。調正。實際上當低實際上當低4 4位的結果位的結果9(9(即即A AF F之間之間) )時,也應進時,也應進行加行加6 6調正調正 ( (原因是逢十沒有進位,故用加原因是逢十沒有進位,故用加6 6的方法的方法強行產生進位強行產生進位) ) 。如對上例的結果進行加如對上例的結果進行加6 6: 0001 0001 0001 0001 1111 + 0000 0110 + 0000 0110 6 6 0000 0111 0000 0111 17 17 0000 1111 0000 1111- - 1
56、0000 1111 1 0000 1111( (2 2) )壓縮壓縮BCDBCD碼加法調整碼加法調整DAAl 兩個壓縮兩個壓縮BCDBCD碼相加結果在碼相加結果在ALAL中,通過中,通過DAADAA調整調整得到一個正確的壓縮得到一個正確的壓縮BCDBCD碼碼. .l 指令操作指令操作( (調整方法調整方法) ): 若若ALAL的低的低4 4位位9 9AF=1AF=1 則則( (AL)(AL)+6AL)(AL)+6,AF1AF1 若若ALAL的高的高4 4位位9 9CF=1CF=1 則則( (AL)(AL)+60HAL)(AL)+60H,CF1CF1l 除除OFOF外,外,DAADAA指令影響所
57、有其它標志。指令影響所有其它標志。lDAADAA指令應緊跟在指令應緊跟在ADDADD或或ADCADC指令之后。指令之后。例:例: 0100 1000 480100 1000 48H H MOV ALMOV AL,48H 48H + 0111 0100+ 0111 0100 74H74H MOV BLMOV BL,74H 1011 1100 BCH74H 1011 1100 BCH ADD AL ADD AL,BL BL + 0110 0110+ 0110 0110 66H66H DAA 1 0010 0010 1 22HDAA 1 0010 0010 1 22H ( (進位進位) ) ( (進
58、位進位) ) 執行執行ADDADD后,后,( (AL)=BCHAL)=BCH,高高4 4位低位低4 4位均大于位均大于9 9,故,故DAADAA指令執行加指令執行加6666H H調整,最后結果為:調整,最后結果為: ( (AL)=22H, CF=1, AF=1AL)=22H, CF=1, AF=1( (1)1)非壓縮非壓縮BCDBCD碼減法的十進制調正指令碼減法的十進制調正指令AASAAS 對對ALAL中由兩個非壓縮的中由兩個非壓縮的BCDBCD碼相減的結果進行調碼相減的結果進行調整。調整操作為:整。調整操作為: 若若ALAL的低的低4 4位位9 9或或AF=1,AF=1,則:則: AL(AL
59、)-6,AH(AH)-1,AF1AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH AL(AL)0FH CFAF CFAF 否則:否則:AL(AL)0FHAL(AL)0FH2)2)減法的十進制調整指令減法的十進制調整指令舉例:舉例:16-8=?16-8=? MOV AX,0106H MOV AX,0106H 0000 0110 0000 0110 0606 MOV BL,08H MOV BL,08H - 0000 1000- 0000 1000 - 08 - 08 SUB AL,BL SUB AL,BL 1111 1110 FE 1111 1110 FE AAS AAS - 000
60、0 0110- 0000 0110 - 06- 06 1111 1000 F8 1111 1000 F8 0000 11110000 1111 0F0F 0000 1000 0000 1000 0808結果為:結果為:( (AL)=08H,(AH)=0,CF=AF=1AL)=08H,(AH)=0,CF=AF=1( (2)2)壓縮壓縮BCDBCD碼減法的十進制調正指令碼減法的十進制調正指令DASDAS 對對ALAL中由兩個壓縮中由兩個壓縮BCDBCD碼相減的結果進行調整。碼相減的結果進行調整。調整操作為:調整操作為: 若若ALAL的低的低4 4位位9 9AF=1,AF=1,則:則: AL(AL)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件測試工具的使用與效果評估試題及答案
- 計算機四級網軟件測試技術的應用試題及答案
- 石油開采業的環境保護與生態文明建設考核試卷
- 監理師考試思維導圖的使用技巧試題及答案
- 網絡技術應急響應機制試題及答案
- 硝酸鈰制備工藝與稀土材料研究考核試卷
- 網絡技術考試知識點查缺補漏的關鍵試題及答案
- 金屬廢料加工綠色制造技術研究考核試卷
- 通信原理與終端設備基礎考核試卷
- 數據庫性能測試方法試題及答案
- 理論聯系實際談一談如何維護政治安全?參考答案1
- 2025年中國冷庫用叉車數據監測研究報告
- 2025年高考第二次模擬考試物理(浙江卷)(參考答案)-20250416-113627
- 2025年化妝師職業技能考試試題及答案
- GA 1812.1-2024銀行系統反恐怖防范要求第1部分:人民幣發行庫
- 2025至2030中國鋰電池粘結劑市場競爭狀況及融資并購研究報告
- 聾校語文課程標準解讀
- 人工智能設計倫理知到智慧樹章節測試課后答案2024年秋浙江大學
- 《陸上風電場工程概算定額》NBT 31010-2019
- 干部人事檔案轉遞單表樣
- 關于中國文化遺產北京故宮的資料
評論
0/150
提交評論