版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第五講講 86系列微型計算機(jī)的指令系統(tǒng)曾鐵軍主要內(nèi)容主要內(nèi)容 86系列匯編語言及指令的格式與尋址方式系列匯編語言及指令的格式與尋址方式1 傳送類指令傳送類指令2 數(shù)據(jù)操作類指令數(shù)據(jù)操作類指令3 串操作指令串操作指令4 控制類指令控制類指令586系列匯編語言及指令的格式與尋址方式指令是讓計算機(jī)完成某種操作的命令,指令的集指令是讓計算機(jī)完成某種操作的命令,指令的集合稱作指令系統(tǒng),不同系列計算機(jī)有不同的指令合稱作指令系統(tǒng),不同系列計算機(jī)有不同的指令系統(tǒng)。系統(tǒng)。指令系統(tǒng)與計算機(jī)硬件有著某些對應(yīng)關(guān)系,用指指令系統(tǒng)與計算機(jī)硬件有著某些對應(yīng)關(guān)系,用指令進(jìn)行編程能夠充分開發(fā)計算機(jī)硬件資源,它的令進(jìn)行編程能夠
2、充分開發(fā)計算機(jī)硬件資源,它的程序目標(biāo)代碼短、運(yùn)行速度快。程序目標(biāo)代碼短、運(yùn)行速度快。86系列指令系統(tǒng)是在系列指令系統(tǒng)是在8位微處理器位微處理器86系列的指令系列的指令系統(tǒng)基礎(chǔ)上設(shè)計的,它兼容了系統(tǒng)基礎(chǔ)上設(shè)計的,它兼容了86系列的全部指令。系列的全部指令。匯編語言的指令語句與機(jī)器指令一一對應(yīng)匯編語言的指令語句與機(jī)器指令一一對應(yīng)圖中由前向后的箭頭表示是可選項(xiàng),由后向前圖中由前向后的箭頭表示是可選項(xiàng),由后向前的箭頭表示是重復(fù)項(xiàng),圓頭方框表示是語句中的箭頭表示是重復(fù)項(xiàng),圓頭方框表示是語句中的關(guān)鍵字。的關(guān)鍵字。5.1 86系列匯編語言及指令的格式與尋址方式【例例6.4】的程序如下:的程序如下:START
3、: INAL,71H; 將將71H端口的字節(jié)讀入端口的字節(jié)讀入ALCLC; 清除清除CFCMPAL,10; 將將AL的內(nèi)容和的內(nèi)容和10相比較相比較JCLP1; 小于小于10轉(zhuǎn)轉(zhuǎn)LP1CMPAL,20; 將將AL的內(nèi)容和的內(nèi)容和20相比較相比較JCLP2; 10AL20轉(zhuǎn)轉(zhuǎn)LP2MOVBL,0FFH ; 將將0FFH送入送入BL寄存器寄存器LP3:OUT73H,BL ; 將將0FFH輸出到輸出到73H端口端口HLT; 暫停暫停LP1:MOVBL,00 JMPLP3LP2:MOVBL,88H JMPLP3(1) 標(biāo)號是給該指令所在地址取的名字。標(biāo)號是給該指令所在地址取的名字。86系列匯系列匯編語
4、言中可使用的標(biāo)識符必須遵循下列規(guī)則:編語言中可使用的標(biāo)識符必須遵循下列規(guī)則:標(biāo)識符由字母標(biāo)識符由字母(az,AZ)、數(shù)字、數(shù)字(09)或或某些特殊字符某些特殊字符(,-,?)組成。組成。第一個字符必須是字母第一個字符必須是字母(az,AZ)或某些特或某些特殊的符號殊的符號(,-,?),但,但“?”不能單獨(dú)作標(biāo)識符。不能單獨(dú)作標(biāo)識符。標(biāo)識符有效長度為標(biāo)識符有效長度為31個字符,若超過個字符,若超過31個字符,個字符,則只保留前面的則只保留前面的31個字符為有效標(biāo)識符。個字符為有效標(biāo)識符。(2) 指令助記符是指令名稱的代表符號,它表示本指令助記符是指令名稱的代表符號,它表示本指令的操作類型,必要時
5、可在指令助記符的前面指令的操作類型,必要時可在指令助記符的前面加上一個或多個加上一個或多個“前綴前綴”,從而實(shí)現(xiàn)某些附加操,從而實(shí)現(xiàn)某些附加操作。作。(3) 操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺??;有些指令需要兩個操作需要操作數(shù),可以缺?。挥行┲噶钚枰獌蓚€操作數(shù),這時必須用逗號數(shù),這時必須用逗號(,)將兩個操作數(shù)分開;有將兩個操作數(shù)分開;有些操作數(shù)可以用表達(dá)式來表示。些操作數(shù)可以用表達(dá)式來表示。(4) 注釋部分是可選項(xiàng),允許缺省,必須用分號注釋部分是可選項(xiàng),允許缺省,必須用分號(;)5.1.2 86系列系列 CPU的尋址方式的尋址方
6、式尋址:把物理地址分配給程序各條指令的過程尋址:把物理地址分配給程序各條指令的過程尋址方式:根據(jù)指令的地址碼生成操作數(shù)的物尋址方式:根據(jù)指令的地址碼生成操作數(shù)的物理地址的方法理地址的方法2. 寄存器尋址寄存器尋址INC CX; 將將CX的內(nèi)容加的內(nèi)容加1ROLAH,1;將;將AH中的內(nèi)容循環(huán)左移一位中的內(nèi)容循環(huán)左移一位 操作數(shù)就在操作數(shù)就在CPU的內(nèi)部寄存器中的內(nèi)部寄存器中 對對16位操作數(shù)來說,寄存器可以為位操作數(shù)來說,寄存器可以為AX,BX,CX,DX,SI,DI,SP或者或者BP,而對,而對8位操作位操作數(shù)來說,寄存器可為數(shù)來說,寄存器可為AH,AL,BH,BL,CH,CL,DH,DL操
7、作就在操作就在CPU內(nèi)部進(jìn)行,不需要使用總線周期,內(nèi)部進(jìn)行,不需要使用總線周期,因此,執(zhí)行速度快因此,執(zhí)行速度快3. 直接尋址直接尋址MOV AX,1070H;將;將DS段的段的1070H和和1071H 兩單元的內(nèi)容取到兩單元的內(nèi)容取到AX中中默認(rèn)為段寄存器是數(shù)據(jù)段寄存器默認(rèn)為段寄存器是數(shù)據(jù)段寄存器DS。設(shè)。設(shè)DS2000H,則執(zhí)行過程是將絕對地址為,則執(zhí)行過程是將絕對地址為21070H和和21071H兩單元的內(nèi)容取出送兩單元的內(nèi)容取出送AX。如果要對其它段寄存器所指出的存儲區(qū)進(jìn)行直接如果要對其它段寄存器所指出的存儲區(qū)進(jìn)行直接尋址,則本條指令前必須用前綴指出段寄存器名。尋址,則本條指令前必須用
8、前綴指出段寄存器名。 CS:MOV BX,3000H;將將CS段的段的3000H和和3001H兩單元的內(nèi)容送兩單元的內(nèi)容送BX 設(shè)設(shè)CS為為5100H,則本指令在執(zhí)行時,將,則本指令在執(zhí)行時,將54000H和和54001H兩單元的內(nèi)容取出送兩單元的內(nèi)容取出送BX。4. 寄存器間接尋址寄存器間接尋址 操作數(shù)一定在存儲器中,存儲單元的有效地址由寄存操作數(shù)一定在存儲器中,存儲單元的有效地址由寄存器指出,這些寄存器可以為器指出,這些寄存器可以為BX,BP,SI和和DI之一,之一,即有效地址等于其中某一個寄存器的值:即有效地址等于其中某一個寄存器的值: BX BP EA SI DI BXBP+ 8位位移
9、量位位移量EA SI 16位位移量位位移量DI 和直接尋址一樣,如果指令前面沒有用前綴指明具體和直接尋址一樣,如果指令前面沒有用前綴指明具體的段寄存器,則尋址時默認(rèn)的段寄存器通常為的段寄存器,則尋址時默認(rèn)的段寄存器通常為DS。如。如寄存器為寄存器為BP時,則對應(yīng)的段寄存器為時,則對應(yīng)的段寄存器為SS。 在有些資料中,將位移量看成是一個相對值。細(xì)分起在有些資料中,將位移量看成是一個相對值。細(xì)分起來,寄存器間接尋址可分為以下來,寄存器間接尋址可分為以下4種:種:(1)以以BX寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址數(shù)據(jù)段基址尋址。數(shù)據(jù)段基址尋址。 MOV AX,BX 設(shè)DS5000H,BX3000H,
10、則本指令在執(zhí)行時,將53000H和53001H兩單元的內(nèi)容送AX。ES MOVCX,BX 設(shè)ES3000H,BX4000H,則本指令在執(zhí)行時,將34000H和34001H兩單元的內(nèi)容送CX。(2) 以以BP寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址堆棧段基址尋址。堆棧段基址尋址。 MOV BX,BP 設(shè)設(shè)SS5000H,BP4000H,則本指令在執(zhí)行,則本指令在執(zhí)行時,將時,將54000H和和54001H兩單元的內(nèi)容送兩單元的內(nèi)容送BX。(3) 以以SI和和DI寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址變址尋址。變址尋址。SI和和DI寄存器分別稱為源變址寄存器和目的變址寄存寄存器分別稱為源變址寄存器和目的
11、變址寄存器,所以用這兩個寄存器來進(jìn)行間接尋址也叫變址尋器,所以用這兩個寄存器來進(jìn)行間接尋址也叫變址尋址。變址尋址通常用于對數(shù)組元素進(jìn)行操作,另外,址。變址尋址通常用于對數(shù)組元素進(jìn)行操作,另外,在在“54串操作指令中還將講到有些串操作指令要串操作指令中還將講到有些串操作指令要求用固定的變址寄存器對操作數(shù)進(jìn)行尋址,操作過程求用固定的變址寄存器對操作數(shù)進(jìn)行尋址,操作過程中,指令會自動修改變址寄存器中的地址,以指向下中,指令會自動修改變址寄存器中的地址,以指向下一個操作數(shù)。一個操作數(shù)。 (4) 將將BX,BP和和SI,DI寄存器組合起來進(jìn)行寄存器組合起來進(jìn)行間接尋址間接尋址基址加變址的尋址。通常將基址
12、加變址的尋址。通常將BX和和BP稱為基址寄存器,將稱為基址寄存器,將SI和和DI稱為變址寄存器。稱為變址寄存器。EABX SI BP + DI +偏移量偏移量MOV AX,BX+SI 設(shè)DS1000H,BX5000H,SI2000H,則上面指令在執(zhí)行時,有效地址為7000H,本指令將17000H和17001H兩單元的內(nèi)容取到AX中。 MOV AX,BX+SI+0050; 將BX和SI中的內(nèi)容與0050相加作為有效地址【例例5.1】設(shè)設(shè)BX0158H,DI10A5H,位移,位移量量1B57H,DS2100H,并假定沒有使用段,并假定沒有使用段前綴,即把前綴,即把DS作為操作數(shù)對應(yīng)的段寄存器。作為
13、操作數(shù)對應(yīng)的段寄存器。在各種尋址方式下,這些寄存器和位移量所產(chǎn)生的在各種尋址方式下,這些寄存器和位移量所產(chǎn)生的有效地址和物理地址為:有效地址和物理地址為:直接尋址:直接尋址:有效地址有效地址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指令系統(tǒng)按功能可分為指令系統(tǒng)按功能可分為4大類型:大類型:1. 數(shù)據(jù)傳輸類數(shù)據(jù)傳輸類2. 數(shù)據(jù)操作類數(shù)據(jù)操作類3. 串操作類串操作類4. 控制類控制類傳送類指令傳送類指令一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令又可以分成數(shù)據(jù)傳送指令又可以分成4種:種:1. 通用數(shù)據(jù)傳送通用數(shù)據(jù)傳送2. 累加器專用傳送(輸入累加器專用傳送(輸入/輸出數(shù)據(jù)傳送)輸出數(shù)據(jù)傳送)3. 目的地址傳送目的地址傳送4. 標(biāo)志寄存器轉(zhuǎn)送標(biāo)志寄存器轉(zhuǎn)送 5.2.1 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV指令格式:指令格式:MOV DST, SRC;源操作數(shù)和目的操作數(shù)可用上述源操
16、作數(shù)和目的操作數(shù)可用上述6種尋址方式的種尋址方式的任何一種。任何一種。將源操作數(shù)內(nèi)容復(fù)制到目操作數(shù)中,結(jié)果目的操將源操作數(shù)內(nèi)容復(fù)制到目操作數(shù)中,結(jié)果目的操作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)的內(nèi)作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)的內(nèi)容不變。即容不變。即OPRD2OPRD1。OPRD1和和OPRD2可以是字節(jié)或字,可以是字節(jié)或字, 但是必須但是必須等長。等長。對標(biāo)志位的影響:無對標(biāo)志位的影響:無通用寄存器(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲器立即數(shù)段寄存器(C S、 SS、 DS、 ES) 源操作數(shù)可以是通用寄存器、段寄存器、存源操作數(shù)可以是通用寄存器、
17、段寄存器、存儲器以及立即操作數(shù),目標(biāo)操作數(shù)可以是通儲器以及立即操作數(shù),目標(biāo)操作數(shù)可以是通用寄存器、段寄存器(用寄存器、段寄存器(CS除外)或存儲器。除外)或存儲器。 MOV regMOV reg,data ;data ;立即數(shù)送寄存器立即數(shù)送寄存器 MOV mem MOV mem,data ;data ;立即數(shù)送存儲單元立即數(shù)送存儲單元 MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中兩操作數(shù)中至少有一個為寄存器指令中兩操作數(shù)中至少有一個為寄存器 例例: 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及立即數(shù)不能作為目標(biāo)操作數(shù);及立即數(shù)不能作為目標(biāo)操作數(shù);兩個存儲單元之間不允許直接傳送數(shù)據(jù);兩個存儲單元之間不允許直接傳送數(shù)據(jù);立即數(shù)不能直接傳送到段寄存器;立即數(shù)不能直接傳送到段寄存器;兩個段寄存器之間不能直接傳送數(shù)據(jù)。兩個段寄存器之間不能直接傳送數(shù)據(jù)。 通用寄存器
19、(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲器立即數(shù)段寄存器(C S、 SS、 DS、 ES)幾個不能傳送的解決辦法:用幾個不能傳送的解決辦法:用AXAX作橋梁作橋梁存儲器存儲器存儲器:存儲器: MOV AXMOV AX,MEM1MEM1 MOV MEM2 MOV MEM2,AXAX段寄存器段寄存器段寄存器:段寄存器: MOV AXMOV AX,DSDS MOV ES MOV ES,AXAX段寄存器段寄存器立即數(shù):立即數(shù): MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX應(yīng)用舉例:將應(yīng)用舉例:將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堆棧操作指令堆棧操作指令 什么是堆棧?什么是堆棧? 按按“后進(jìn)先出后進(jìn)先出(LIFO)(LIFO)”方式工作的存儲方式工作的存儲區(qū)域。堆棧以字為單位進(jìn)行壓入彈出操作。區(qū)域。堆棧
21、以字為單位進(jìn)行壓入彈出操作。為什么要設(shè)置堆棧?為什么要設(shè)置堆棧?為什么要按為什么要按 “后進(jìn)先出后進(jìn)先出”方式工作?方式工作?規(guī)定由規(guī)定由SSSS指示堆棧段的段基址,堆棧指針指示堆棧段的段基址,堆棧指針SPSP始終始終指向堆棧的頂部,指向堆棧的頂部,SPSP的初值規(guī)定了所用堆棧區(qū)的的初值規(guī)定了所用堆棧區(qū)的大小。堆棧的最高地址叫棧底。大小。堆棧的最高地址叫棧底。 壓棧指令壓棧指令 PUSH src ; src為為16位操作數(shù)位操作數(shù) 例:例:PUSHAX;將;將AX內(nèi)容壓棧內(nèi)容壓棧 執(zhí)行操作:(執(zhí)行操作:(SP)-1高字節(jié)高字節(jié)AH(SP)-2低字節(jié)低字節(jié)AL(SP)(SP)- 2設(shè)(設(shè)(AXA
22、X)=1020H=1020H,執(zhí)行示意圖如圖,執(zhí)行示意圖如圖低地址低地址存儲區(qū)存儲區(qū)(SS段)段)執(zhí)行前執(zhí)行前(AX)=1020(SP)存儲區(qū)存儲區(qū)(SS段)段)進(jìn)棧方向進(jìn)棧方向執(zhí)行后執(zhí)行后2010(AL)(AH)2-82-8PUSH AX指令執(zhí)行示意圖指令執(zhí)行示意圖(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 注意進(jìn)棧方向是注意進(jìn)棧方向是高地址高地址向向低地址低地址發(fā)展。發(fā)展。 彈出指令彈出指令 POPPOPdestdest例:例:POPPOPBXBX;將棧頂內(nèi)容彈至;將棧頂內(nèi)容彈至BXBX 執(zhí)行操作:執(zhí)行操作: (BLBL)(SPSP)(BHBH)(SPSP)+1+1(SPSP)(SPSP)+2+2POP BX POP BX 的執(zhí)行示意圖如下圖所示的執(zhí)行示意圖如下圖所示低地址低地址存儲區(qū)存儲區(qū)(SS段)段)出棧方向出棧方向執(zhí)行前執(zhí)行前2010POP BX指令執(zhí)行示意圖指令執(zhí)行示意圖(SP)存儲區(qū)存儲區(qū)(SS段)段)執(zhí)行后執(zhí)行后(BX)=1020(SP)(SP)+1(SP)+2BX
24、20201010高地址高地址低地址低地址高地址高地址堆棧指令使用時應(yīng)注意幾點(diǎn):堆棧指令使用時應(yīng)注意幾點(diǎn):堆棧操作總是按字進(jìn)行堆棧操作總是按字進(jìn)行不能從棧頂彈出一個字給不能從棧頂彈出一個字給CSCS堆棧指針為堆棧指針為SS:SPSS:SP,SPSP永遠(yuǎn)指向棧頂永遠(yuǎn)指向棧頂SPSP自動進(jìn)行增減量(自動進(jìn)行增減量(-2-2,+2+2)PUSHDSPUSHES POP ESPOP DS格式:格式:XCHG mem/regXCHG mem/reg,mem/regmem/reg功能:交換兩操作數(shù)的內(nèi)容。功能:交換兩操作數(shù)的內(nèi)容。 要求:兩操作數(shù)中必須有一個在寄存器中;要求:兩操作數(shù)中必須有一個在寄存器中;
25、 操作數(shù)不能為段寄存器和立即數(shù);操作數(shù)不能為段寄存器和立即數(shù); 源和目地操作數(shù)類型要一致。源和目地操作數(shù)類型要一致。舉例:舉例: XCHGXCHGALAL,BLBL XCHG XCHGAXAX,BXBX XCHG XCHG2000H2000H,CLCL XCHG XCHG2530H2530H,CXCX交換指令交換指令XCHGXCHG5.2.2 目標(biāo)地址傳送指令目標(biāo)地址傳送指令注意以下兩條指令差別:注意以下兩條指令差別: LEA BXLEA BX,BUFFER BUFFER MOV BXMOV BX,BUFFERBUFFER前者表示將符號地址為前者表示將符號地址為BUFFERBUFFER的存儲單
26、元的偏侈的存儲單元的偏侈地址取到地址取到 BXBX中中; ;后者表示將后者表示將BUFFERBUFFER存儲單元中的存儲單元中的內(nèi)容取內(nèi)容取到到 BXBX中中. .LEAAX,2728;將將2728單元的偏移量單元的偏移量送送AX,指令執(zhí)行后,指令執(zhí)行后,AX中為中為2728LEABX,BP+SI;指令執(zhí)行后,指令執(zhí)行后,BX中的內(nèi)容為中的內(nèi)容為BP+SI的值的值LEASP,0482;使堆棧指針使堆棧指針SP為為482前提條件:前提條件:設(shè)設(shè)2130H2133H這這4個單元中存?zhèn)€單元中存放著一個地址,放著一個地址,2130H和和2131H中為地址的偏中為地址的偏移量,移量,2132H和和213
27、3H中為地址的段值中為地址的段值指令執(zhí)行結(jié)果:指令執(zhí)行結(jié)果:使使2130H和和2131H中的偏移量中的偏移量送到送到DI,2132H和和2133H中的段值送到中的段值送到DS。LDS DI,2130H ;LES DI,2130H ;指令執(zhí)行結(jié)果:指令執(zhí)行結(jié)果:使使2130H和和2131H中的偏移量中的偏移量送到送到DI,2132H和和2133H中的段值送到中的段值送到ES。5.2.4 標(biāo)志傳送指令標(biāo)志傳送指令(1)(1)讀標(biāo)志指令讀標(biāo)志指令LAHF LAHF把標(biāo)志寄存器低把標(biāo)志寄存器低8 8位中的位中的5 5個標(biāo)志位傳個標(biāo)志位傳送到送到AHAH中的指定位,如下圖所示中的指定位,如下圖所示: :
28、1D3D5D7D6D4D2D0DOFDF IF TF SF ZFAFPFCFAHLAHF指令的功能指令的功能FLAG(2)(2)設(shè)置標(biāo)志指令設(shè)置標(biāo)志指令SAHFSAHF SAHF的功能與的功能與LAHF的功能正好相反,的功能正好相反,用圖來示意,只要將上圖中用圖來示意,只要將上圖中5 5個箭頭方向反個箭頭方向反一下即可。一下即可。1D3D5D7D6D4D2D0DOFDF IF TF SF ZFAFPFCFAHSAHF指令的功能指令的功能FLAG 執(zhí)行的操作執(zhí)行的操作:(SP)-1:(SP)-1標(biāo)志寄存器高標(biāo)志寄存器高8 8位位 (SP)-2(SP)-2標(biāo)志寄存器低標(biāo)志寄存器低8 8位位 (SP
29、)(SP)-2(SP)(SP)-2(4)(4)從棧頂彈出標(biāo)志寄存器指令從棧頂彈出標(biāo)志寄存器指令POPF 執(zhí)行的操作執(zhí)行的操作: :標(biāo)志寄存器低標(biāo)志寄存器低8 8位位(SP)(SP) 標(biāo)志寄存器高標(biāo)志寄存器高8 8位位(SP)+1(SP)+1 (SP)(SP)+2 (SP)(SP)+2PUSHF和和POPF指令用于保護(hù)和恢復(fù)標(biāo)志寄存器內(nèi)容。指令用于保護(hù)和恢復(fù)標(biāo)志寄存器內(nèi)容。(3)(3)把標(biāo)志寄存器推入棧頂指令把標(biāo)志寄存器推入棧頂指令PUSHF例如:例如: PUSHPUSHAXAX PUSH PUSHCXCX PUSHF ; PUSHF ;保護(hù)標(biāo)志寄存器內(nèi)容保護(hù)標(biāo)志寄存器內(nèi)容 ; ;這段程序要用到
30、這段程序要用到AX,CXAX,CX以及標(biāo)志位以及標(biāo)志位 POPFPOPF ; ;恢復(fù)標(biāo)志寄存器內(nèi)容恢復(fù)標(biāo)志寄存器內(nèi)容 POPPOPCXCX POP POPAXAX數(shù)據(jù)傳送指令中,除數(shù)據(jù)傳送指令中,除SAHFSAHF和和POPFPOPF這兩條指令外,這兩條指令外,其余所有指令均不影響標(biāo)志位。其余所有指令均不影響標(biāo)志位。5.2.4 輸入輸出數(shù)據(jù)傳送指令輸入輸出數(shù)據(jù)傳送指令只限于用累加器只限于用累加器ALAL或或AXAX來傳送信息。來傳送信息。功能功能: (: (累加器累加器)I/O)I/O端口端口(1)(1)輸入指令輸入指令I(lǐng)NIN IN acc,PORT IN acc,PORT ;PORT;PO
31、RT端口號端口號0 0255255 IN acc,DX IN acc,DX ;DX;DX表示的端口范圍達(dá)表示的端口范圍達(dá)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端口號設(shè)置到端口號設(shè)置到DXDX寄存器,如:寄存器,如: MOV DX MOV DX,220H220H IN AL IN AL,DX ;DX ;將將220H220H端口內(nèi)容讀入端口內(nèi)容讀入ALAL格式:格式: OUT port,accOUT port,acc OUT DX,acc OUT DX,acc5.3 數(shù)據(jù)操作類指令數(shù)據(jù)操作類指令5.3.1 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 涉及兩種類型數(shù)據(jù)涉及兩種類
33、型數(shù)據(jù): 無符號數(shù)和有符號數(shù)。對無符號數(shù)和有符號數(shù)。對加減法指令,無符號和有符號數(shù)可采用同一套指加減法指令,無符號和有符號數(shù)可采用同一套指令,但應(yīng)注意:令,但應(yīng)注意:l 參加的操作數(shù)必須都是無符號數(shù)或都是有符號參加的操作數(shù)必須都是無符號數(shù)或都是有符號數(shù)。數(shù)。l 需使用不同的標(biāo)志位來檢查無符號數(shù)和有符號需使用不同的標(biāo)志位來檢查無符號數(shù)和有符號數(shù)的運(yùn)算結(jié)果是否溢出。數(shù)的運(yùn)算結(jié)果是否溢出。(1) (1) 不帶進(jìn)位的加法指令不帶進(jìn)位的加法指令A(yù)DDADD 格式:格式: 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指令對標(biāo)志位(指狀態(tài)標(biāo)志)都有影響。指令對標(biāo)志位(指狀態(tài)標(biāo)志)都有影響。5.3.1.1 加法指令加法指令(2) (2) 帶進(jìn)位位的加法指令帶進(jìn)位位的加法指令A(yù)DCADC ADC ADC指令在形式上和功能上都有與指令在形式上和功能上都有與ADDADD類似,類似,只是相加時還要包括進(jìn)位標(biāo)志只是相
35、加時還要包括進(jìn)位標(biāo)志CFCF的內(nèi)容,例如:的內(nèi)容,例如: 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字節(jié)的
36、無符號數(shù)相加:字節(jié)的無符號數(shù)相加: 2C56F8AC+309E47BE=2C56F8AC+309E47BE=? 設(shè)被加數(shù)、加數(shù)分別存放在設(shè)被加數(shù)、加數(shù)分別存放在BUFFER1BUFFER1及及BUFFER2BUFFER2開開始的兩個存儲區(qū)內(nèi),結(jié)果放回始的兩個存儲區(qū)內(nèi),結(jié)果放回BUFFER1BUFFER1存儲區(qū),如存儲區(qū),如下頁圖所示。下頁圖所示。 因因CPUCPU只能進(jìn)行只能進(jìn)行8 8位或位或1616位的加法運(yùn)算,為此可將位的加法運(yùn)算,為此可將加法分加法分4 4次進(jìn)行。次進(jìn)行。ADCADC指令主要用于多字節(jié)加法運(yùn)算中指令主要用于多字節(jié)加法運(yùn)算中程序段如下:程序段如下: MOV CXMOV CX
37、,4 ;4 ;置循環(huán)次數(shù)置循環(huán)次數(shù) MOV SIMOV SI,0 ;0 ;置置SISI初值為零初值為零 CLC ;CLC ;清進(jìn)位標(biāo)志清進(jìn)位標(biāo)志CFCFLLLL: MOVMOV AL AL,BUFFER2SIBUFFER2SI ADC ADC BUFFER1SI BUFFER1SI,AL ;AL ;帶進(jìn)位加帶進(jìn)位加 INCINC SI ;(SI)+1 SI ;(SI)+1 DEC DEC CX ;(CX)-1 CX ;(CX)-1 JNZ LL ; JNZ LL ;若若( (CX)CX) 0,0,則轉(zhuǎn)則轉(zhuǎn)LLLL思考:若最高位有進(jìn)位,如何改?思考:若最高位有進(jìn)位,如何改?格式:格式:INC r
38、eg/memINC reg/mem功能:類似于功能:類似于C C語言中的語言中的+操作:對指定的操作:對指定的操作數(shù)加操作數(shù)加1 1 例:例: INC ALINC AL INC SI INC SI INC BYTE PTRBX+4 INC BYTE PTRBX+4注:本指令不影響注:本指令不影響CFCF標(biāo)志。標(biāo)志。3) 3) 加加1 1指令指令I(lǐng)NCINC(單操作數(shù)指令單操作數(shù)指令)5.3.1.2 減法指令減法指令(1) (1) 不考慮借位的減法指令不考慮借位的減法指令SUBSUB 格式:格式: SUB dest, srcSUB dest, src 操作:操作: dest(dest)-(src
39、)dest(dest)-(src)注:注:1.1.源和目的操作數(shù)不能同時為存儲器操作數(shù)源和目的操作數(shù)不能同時為存儲器操作數(shù) 2.2.立即數(shù)不能作為目的操作數(shù)立即數(shù)不能作為目的操作數(shù)指令例子:指令例子: SBBSBB指令主要用于多字節(jié)的減法。指令主要用于多字節(jié)的減法。格式:格式: 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位數(shù),這三個數(shù)的低位數(shù),這三個數(shù)的低16位和高位和高16位分別存放位分別存放在地址為在地址為X, X+2;Y, Y+2;Z, Z+2的存儲單元中。用指令序列的存儲單元中。用指令序列實(shí)現(xiàn)實(shí)現(xiàn)wx+y+24-z,結(jié)果放在,結(jié)果放在W, W+2單元中。單元中。 MOV AX, X MOV DX, X+2 ADD AX, Y ; x和和y的低的低16位相加,結(jié)果存入位相加,結(jié)果存入AX ADC DX, Y+2
41、; x和和y的高的高16位相加,結(jié)果存入位相加,結(jié)果存入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 ; 結(jié)果存入結(jié)果存入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)對一個操作數(shù)取補(bǔ)碼相當(dāng)于用對一個操作數(shù)取補(bǔ)碼相當(dāng)于用0 0減去此操作數(shù),故減去此操作數(shù),故利用利用NEGNEG指令可得到負(fù)數(shù)的絕對值。指令可得到負(fù)數(shù)的絕對值。例:若例:若( (AL)=0FCHAL)=0FCH,則執(zhí)行,則執(zhí)行 NEG ALNEG AL 后,后, ( (AL)=04HAL)=04H,CF=1CF=1本例中,本例中,0FCH0FCH為為-4-4的補(bǔ)碼的補(bǔ)碼, ,執(zhí)行求補(bǔ)指令后執(zhí)行求補(bǔ)指令后, ,即得即得到到4(-44(-4的絕對值的絕對值) )。(4) (4) 求
43、補(bǔ)指令求補(bǔ)指令NEGNEG格式:格式: CMP dest, src CMP dest, src操作:操作: (dest)-(src)(dest)-(src)CMPCMP也是執(zhí)行兩個操作數(shù)相減也是執(zhí)行兩個操作數(shù)相減, ,但結(jié)果不送目標(biāo)操作但結(jié)果不送目標(biāo)操作數(shù)數(shù), ,其結(jié)果只反映在標(biāo)志位上。其結(jié)果只反映在標(biāo)志位上。指令例子:指令例子: CMP AL CMP AL,0AH0AH CMP CX CMP CX,SISI CMP DI CMP DI,BX+03BX+03(5) (5) 比較指令比較指令CMPCMP根據(jù)標(biāo)志位來判斷比較的結(jié)果根據(jù)標(biāo)志位來判斷比較的結(jié)果1)1)根據(jù)根據(jù)ZF判斷兩個數(shù)是否相等。若
44、判斷兩個數(shù)是否相等。若ZF=1,=1,則兩數(shù)相則兩數(shù)相等。等。2)2)若兩個數(shù)不相等若兩個數(shù)不相等, ,則分兩種情況考慮則分兩種情況考慮: : 比較的是兩個無符號數(shù)比較的是兩個無符號數(shù) 若若CF=0,=0,則則destdestsrc;src; 若若CF=1,=1,則則destdestsrcsrc。 比較的是兩個有符號數(shù)比較的是兩個有符號數(shù) 若若OF SF=0=0,則則destdestsrc;src; 若若OF SF=1=1,則則destdestsrcsrc。比較指令在使用時,一般在其后緊跟一條條件轉(zhuǎn)移指比較指令在使用時,一般在其后緊跟一條條件轉(zhuǎn)移指令,判斷比較結(jié)果的轉(zhuǎn)向。令,判斷比較結(jié)果的轉(zhuǎn)向
45、。舉例:比較舉例:比較ALAL、BLBL、CLCL中帶符號數(shù)的大小,將中帶符號數(shù)的大小,將 最小數(shù)放在最小數(shù)放在ALAL中。中。程序:程序: CMP AL,BL CMP AL,BL ;ALAL和和BLBL比較比較 JNG BBB JNG BBB ;若若ALBL,ALBL,則轉(zhuǎn)則轉(zhuǎn) XCHG AL,BL XCHG AL,BL ;若若ALALBL,BL,則交換則交換 BBB: CMP AL,CL BBB: CMP AL,CL ;ALAL和和CLCL比較比較 JNG CCC JNG CCC ;若若ALCL,ALCL,則轉(zhuǎn)則轉(zhuǎn) XCHG AL,CL XCHG AL,CL ;若若ALALCL,CL,則交
46、換則交換 CCC: HLTCCC: HLT5.3.1.3 乘法指令乘法指令進(jìn)行乘法時:進(jìn)行乘法時:8 8位位* *8 8位位1616位乘積位乘積 16 16位位* *1616位位3232位乘積位乘積(1) (1) 無符號數(shù)的乘法指令無符號數(shù)的乘法指令MUL(MEM/REG)MUL(MEM/REG)格式:格式: MUL src操作:字節(jié)操作數(shù)操作:字節(jié)操作數(shù) (AX) (AL) (src) 字操作數(shù)字操作數(shù) (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指令類似,只是要求兩操作數(shù)均為指令類似,只是要求兩操作數(shù)均為有符號有符號數(shù)數(shù)。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) 有符號數(shù)乘法指令有符號數(shù)乘法指令I(lǐng)MULIMUL5.3.1.4 除法指令除法指令進(jìn)行除法時:進(jìn)行除法時:1616位位/8/8位位8 8位商位商 3232位位/16/16位位1616位商位商對
48、被除數(shù)、商及余數(shù)存放有如下規(guī)定:對被除數(shù)、商及余數(shù)存放有如下規(guī)定: 被除數(shù)被除數(shù) 商商余數(shù)余數(shù)字節(jié)除法字節(jié)除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX無符號除法無符號除法DIV格式:格式: DIV src操作:字節(jié)操作操作:字節(jié)操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數(shù)的余數(shù) 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數(shù)的余數(shù)指令例子:指令例子: DIV CL DIV CL DIV WORD PTRBX DIV WO
49、RD PTRBX注:若除數(shù)為零或注:若除數(shù)為零或ALAL中商大于中商大于FFH(FFH(或或AXAX中商大于中商大于FFFFH)FFFFH),則,則CPUCPU產(chǎn)生一個類型產(chǎn)生一個類型0 0的內(nèi)部中斷。的內(nèi)部中斷。有符號數(shù)除法指令有符號數(shù)除法指令I(lǐng)DIV格式:格式: IDIV src操作與操作與DIVDIV類似。商及余數(shù)均為有符號數(shù)類似。商及余數(shù)均為有符號數(shù), ,且余數(shù)且余數(shù)符號總是與被除數(shù)符號相同。符號總是與被除數(shù)符號相同。注意注意: 對于對于DIV/IDIV指令指令v AX(DX,AX)為隱含的被除數(shù)寄存器。為隱含的被除數(shù)寄存器。v AL(AX)為隱含的商寄存器。為隱含的商寄存器。v AH
50、(DX)為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。v src不能為立即數(shù)。不能為立即數(shù)。v 對所有條件標(biāo)志位均無定義。對所有條件標(biāo)志位均無定義。v除法運(yùn)算要求被除數(shù)字長是除數(shù)字長的兩倍除法運(yùn)算要求被除數(shù)字長是除數(shù)字長的兩倍, ,若若不滿足則需對被除數(shù)進(jìn)行擴(kuò)展不滿足則需對被除數(shù)進(jìn)行擴(kuò)展, ,否則產(chǎn)生錯誤。否則產(chǎn)生錯誤。v對于無符號數(shù)除法擴(kuò)展,只需將對于無符號數(shù)除法擴(kuò)展,只需將AHAH或或DXDX清零即可清零即可。v對有符號數(shù)而言對有符號數(shù)而言,則是符號位的擴(kuò)展。可使用前則是符號位的擴(kuò)展??墒褂们懊娼榻B過的符號擴(kuò)展指令面介紹過的符號擴(kuò)展指令CBW和和CWD(5)(5)字節(jié)字節(jié)- -字轉(zhuǎn)換指令字轉(zhuǎn)換指
51、令格式:格式:CBW ;把把AL的符號位復(fù)制到的符號位復(fù)制到AH CWD ;把把AX的符號位復(fù)制到的符號位復(fù)制到DX用途:用于有符號數(shù)的除法。用途:用于有符號數(shù)的除法。例如:例如:(AL) = A7H,則執(zhí)行,則執(zhí)行CBW后,后,AH的內(nèi)容為的內(nèi)容為FFH。例例: 寫出寫出34H25H的程序段。的程序段。MOV AL,34H MOV BL,25H CBW ; AL的符號擴(kuò)展到的符號擴(kuò)展到AH IDIV BL ; 0034H25H,25H,結(jié)果為結(jié)果為 ; (AH)=0FH, (AL)=01H* *5.BCD5.BCD碼運(yùn)算的十進(jìn)制調(diào)整指令碼運(yùn)算的十進(jìn)制調(diào)整指令v專用于對專用于對BCD碼運(yùn)算的結(jié)
52、果進(jìn)行調(diào)整碼運(yùn)算的結(jié)果進(jìn)行調(diào)整v包括:包括:AAAAAA、DAADAA、AASAAS、DASDAS、AAMAAM、AADAADv均為隱含尋址,隱含的操作數(shù)為均為隱含尋址,隱含的操作數(shù)為ALAL和和AHAHv為何要對為何要對BCD碼的運(yùn)算結(jié)果進(jìn)行調(diào)整?碼的運(yùn)算結(jié)果進(jìn)行調(diào)整? BCD碼本質(zhì)上是十進(jìn)制數(shù),即應(yīng)遵循逢十進(jìn)碼本質(zhì)上是十進(jìn)制數(shù),即應(yīng)遵循逢十進(jìn)一的規(guī)則。而計算機(jī)是按二進(jìn)制(十六進(jìn)制)一的規(guī)則。而計算機(jī)是按二進(jìn)制(十六進(jìn)制)進(jìn)行運(yùn)算,并未按十進(jìn)制規(guī)則進(jìn)行運(yùn)算。進(jìn)行運(yùn)算,并未按十進(jìn)制規(guī)則進(jìn)行運(yùn)算。1 1) )加法的十進(jìn)制調(diào)整指令加法的十進(jìn)制調(diào)整指令( (1 1) )非壓縮非壓縮BCDBCD碼加法
53、調(diào)整碼加法調(diào)整AAA本指令對在本指令對在ALAL中的由兩個未組合的中的由兩個未組合的BCDBCD碼相加后的碼相加后的結(jié)果進(jìn)行調(diào)正,得到一個正確的未組合的結(jié)果進(jìn)行調(diào)正,得到一個正確的未組合的BCDBCD碼。碼。vAAAAAA指令只影響指令只影響AFAF和和CFCF,其余標(biāo)志無定義。其余標(biāo)志無定義。vAAAAAA指令應(yīng)緊跟在指令應(yīng)緊跟在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指令的操作如下:指令的操作如下:調(diào)整原理:先看一個例子調(diào)整原理:先看一個例子 計算計算8 89 9 0000 10000000 1000 見右式見右式 +0000 1001 +0000 1001 0001 0001 0001 0001 1111 結(jié)果應(yīng)為結(jié)果應(yīng)為1717,而計算機(jī)相加為,而計算機(jī)相加為1111,原因在于運(yùn)算過原因在于運(yùn)算過程中,如遇到低程中,如遇到低4 4位往高位往高4 4位產(chǎn)生進(jìn)位時(此時位產(chǎn)生進(jìn)位時(此時AF=1AF=1)是按逢十六進(jìn)一的規(guī)則,但是按逢十六進(jìn)一的規(guī)則,但BCDBCD碼要求逢十進(jìn)一碼要求逢十進(jìn)一,因
55、此只要產(chǎn)生進(jìn)位,個位就會少,因此只要產(chǎn)生進(jìn)位,個位就會少6 6,這就要進(jìn)行,這就要進(jìn)行加加6 6調(diào)正。調(diào)正。實(shí)際上當(dāng)?shù)蛯?shí)際上當(dāng)?shù)? 4位的結(jié)果位的結(jié)果9(9(即即A AF F之間之間) )時,也應(yīng)進(jìn)時,也應(yīng)進(jìn)行加行加6 6調(diào)正調(diào)正 ( (原因是逢十沒有進(jìn)位,故用加原因是逢十沒有進(jìn)位,故用加6 6的方法的方法強(qiáng)行產(chǎn)生進(jìn)位強(qiáng)行產(chǎn)生進(jìn)位) ) 。如對上例的結(jié)果進(jìn)行加如對上例的結(jié)果進(jìn)行加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碼加法調(diào)整碼加法調(diào)整DAAl 兩個壓縮兩個壓縮BCDBCD碼相加結(jié)果在碼相加結(jié)果在ALAL中,通過中,通過DAADAA調(diào)整調(diào)整得到一個正確的壓縮得到一個正確的壓縮BCDBCD碼碼. .l 指令操作指令操作( (調(diào)整方法調(diào)整方法) ): 若若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、有其它標(biāo)志。指令影響所有其它標(biāo)志。lDAADAA指令應(yīng)緊跟在指令應(yīng)緊跟在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 ( (進(jìn)位進(jìn)位) ) ( (進(jìn)
58、位進(jìn)位) ) 執(zhí)行執(zhí)行ADDADD后,后,( (AL)=BCHAL)=BCH,高高4 4位低位低4 4位均大于位均大于9 9,故,故DAADAA指令執(zhí)行加指令執(zhí)行加6666H H調(diào)整,最后結(jié)果為:調(diào)整,最后結(jié)果為: ( (AL)=22H, CF=1, AF=1AL)=22H, CF=1, AF=1( (1)1)非壓縮非壓縮BCDBCD碼減法的十進(jìn)制調(diào)正指令碼減法的十進(jìn)制調(diào)正指令A(yù)ASAAS 對對ALAL中由兩個非壓縮的中由兩個非壓縮的BCDBCD碼相減的結(jié)果進(jìn)行調(diào)碼相減的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為:整。調(diào)整操作為: 若若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)減法的十進(jìn)制調(diào)整指令減法的十進(jìn)制調(diào)整指令舉例:舉例: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結(jié)果為:結(jié)果為:( (AL)=08H,(AH)=0,CF=AF=1AL)=08H,(AH)=0,CF=AF=1( (2)2)壓縮壓縮BCDBCD碼減法的十進(jìn)制調(diào)正指令碼減法的十進(jìn)制調(diào)正指令DASDAS 對對ALAL中由兩個壓縮中由兩個壓縮BCDBCD碼相減的結(jié)果進(jìn)行調(diào)整。碼相減的結(jié)果進(jìn)行調(diào)整。調(diào)整操作為:調(diào)整操作為: 若若ALAL的低的低4 4位位9 9AF=1,AF=1,則:則: AL(AL)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 戶外活動的橫幅標(biāo)語(10篇)
- 圍手術(shù)期護(hù)理
- 成功演講稿(15篇)
- 居民低保申請書15篇
- 愚人節(jié)微信活動策劃4篇
- 閉合復(fù)位聯(lián)合髓內(nèi)釘固定治療股骨干骨折的效果觀察
- 平安圣誕節(jié)主持開場白范文(10篇)
- 機(jī)場航空器故障應(yīng)急處理策略
- 二零二五個人房產(chǎn)買賣合同(含貸款服務(wù)及風(fēng)險評估)3篇
- 二零二五年度酒店行業(yè)客戶滿意度售后服務(wù)合同2篇
- 2025年新能源汽車銷售傭金返點(diǎn)合同范本6篇
- 2025-2030年中國配電變壓器市場未來發(fā)展趨勢及前景調(diào)研分析報告
- GB/T 45120-2024道路車輛48 V供電電壓電氣要求及試驗(yàn)
- 2025年上海市嘉定區(qū)中考英語一模試卷
- 24年追覓在線測評28題及答案
- 企業(yè)合規(guī)管理-課件
- 火電廠安全工作規(guī)程
- 湖南省鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務(wù)中心地址醫(yī)療機(jī)構(gòu)名單目錄
- 小學(xué)語文人教四年級上冊(統(tǒng)編)第七單元-把握文章主要內(nèi)容教學(xué)設(shè)計2
- 二年級下冊道德與法治我們有新玩法 教學(xué)設(shè)計
- 特發(fā)性肺纖維化IPF
評論
0/150
提交評論