版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第五講講 86系列微型計(jì)算機(jī)的指令系統(tǒng)曾鐵軍主要內(nèi)容主要內(nèi)容 86系列匯編語(yǔ)言及指令的格式與尋址方式系列匯編語(yǔ)言及指令的格式與尋址方式1 傳送類(lèi)指令傳送類(lèi)指令2 數(shù)據(jù)操作類(lèi)指令數(shù)據(jù)操作類(lèi)指令3 串操作指令串操作指令4 控制類(lèi)指令控制類(lèi)指令586系列匯編語(yǔ)言及指令的格式與尋址方式指令是讓計(jì)算機(jī)完成某種操作的命令,指令的集指令是讓計(jì)算機(jī)完成某種操作的命令,指令的集合稱(chēng)作指令系統(tǒng),不同系列計(jì)算機(jī)有不同的指令合稱(chēng)作指令系統(tǒng),不同系列計(jì)算機(jī)有不同的指令系統(tǒng)。系統(tǒng)。指令系統(tǒng)與計(jì)算機(jī)硬件有著某些對(duì)應(yīng)關(guān)系,用指指令系統(tǒng)與計(jì)算機(jī)硬件有著某些對(duì)應(yīng)關(guān)系,用指令進(jìn)行編程能夠充分開(kāi)發(fā)計(jì)算機(jī)硬件資源,它的令進(jìn)行編程能夠
2、充分開(kāi)發(fā)計(jì)算機(jī)硬件資源,它的程序目標(biāo)代碼短、運(yùn)行速度快。程序目標(biāo)代碼短、運(yùn)行速度快。86系列指令系統(tǒng)是在系列指令系統(tǒng)是在8位微處理器位微處理器86系列的指令系列的指令系統(tǒng)基礎(chǔ)上設(shè)計(jì)的,它兼容了系統(tǒng)基礎(chǔ)上設(shè)計(jì)的,它兼容了86系列的全部指令。系列的全部指令。匯編語(yǔ)言的指令語(yǔ)句與機(jī)器指令一一對(duì)應(yīng)匯編語(yǔ)言的指令語(yǔ)句與機(jī)器指令一一對(duì)應(yīng)圖中由前向后的箭頭表示是可選項(xiàng),由后向前圖中由前向后的箭頭表示是可選項(xiàng),由后向前的箭頭表示是重復(fù)項(xiàng),圓頭方框表示是語(yǔ)句中的箭頭表示是重復(fù)項(xiàng),圓頭方框表示是語(yǔ)句中的關(guān)鍵字。的關(guān)鍵字。5.1 86系列匯編語(yǔ)言及指令的格式與尋址方式【例例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)號(hào)是給該指令所在地址取的名字。標(biāo)號(hào)是給該指令所在地址取的名字。86系列匯系列匯編語(yǔ)
4、言中可使用的標(biāo)識(shí)符必須遵循下列規(guī)則:編語(yǔ)言中可使用的標(biāo)識(shí)符必須遵循下列規(guī)則:標(biāo)識(shí)符由字母標(biāo)識(shí)符由字母(az,AZ)、數(shù)字、數(shù)字(09)或或某些特殊字符某些特殊字符(,-,?)組成。組成。第一個(gè)字符必須是字母第一個(gè)字符必須是字母(az,AZ)或某些特或某些特殊的符號(hào)殊的符號(hào)(,-,?),但,但“?”不能單獨(dú)作標(biāo)識(shí)符。不能單獨(dú)作標(biāo)識(shí)符。標(biāo)識(shí)符有效長(zhǎng)度為標(biāo)識(shí)符有效長(zhǎng)度為31個(gè)字符,若超過(guò)個(gè)字符,若超過(guò)31個(gè)字符,個(gè)字符,則只保留前面的則只保留前面的31個(gè)字符為有效標(biāo)識(shí)符。個(gè)字符為有效標(biāo)識(shí)符。(2) 指令助記符是指令名稱(chēng)的代表符號(hào),它表示本指令助記符是指令名稱(chēng)的代表符號(hào),它表示本指令的操作類(lèi)型,必要時(shí)
5、可在指令助記符的前面指令的操作類(lèi)型,必要時(shí)可在指令助記符的前面加上一個(gè)或多個(gè)加上一個(gè)或多個(gè)“前綴前綴”,從而實(shí)現(xiàn)某些附加操,從而實(shí)現(xiàn)某些附加操作。作。(3) 操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不操作數(shù)是參加本指令運(yùn)算的數(shù)據(jù),有些指令不需要操作數(shù),可以缺省;有些指令需要兩個(gè)操作需要操作數(shù),可以缺省;有些指令需要兩個(gè)操作數(shù),這時(shí)必須用逗號(hào)數(shù),這時(shí)必須用逗號(hào)(,)將兩個(gè)操作數(shù)分開(kāi);有將兩個(gè)操作數(shù)分開(kāi);有些操作數(shù)可以用表達(dá)式來(lái)表示。些操作數(shù)可以用表達(dá)式來(lái)表示。(4) 注釋部分是可選項(xiàng),允許缺省,必須用分號(hào)注釋部分是可選項(xiàng),允許缺省,必須用分號(hào)(;)5.1.2 86系列系列 CPU的尋址方式的尋址方
6、式尋址:把物理地址分配給程序各條指令的過(guò)程尋址:把物理地址分配給程序各條指令的過(guò)程尋址方式:根據(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)部寄存器中 對(duì)對(duì)16位操作數(shù)來(lái)說(shuō),寄存器可以為位操作數(shù)來(lái)說(shuō),寄存器可以為AX,BX,CX,DX,SI,DI,SP或者或者BP,而對(duì),而對(duì)8位操作位操作數(shù)來(lái)說(shuō),寄存器可為數(shù)來(lái)說(shuō),寄存器可為AH,AL,BH,BL,CH,CL,DH,DL操
7、作就在操作就在CPU內(nèi)部進(jìn)行,不需要使用總線(xiàn)周期,內(nèi)部進(jìn)行,不需要使用總線(xià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í)行過(guò)程是將絕對(duì)地址為,則執(zhí)行過(guò)程是將絕對(duì)地址為21070H和和21071H兩單元的內(nèi)容取出送兩單元的內(nèi)容取出送AX。如果要對(duì)其它段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行直接如果要對(duì)其它段寄存器所指出的存儲(chǔ)區(qū)進(jìn)行直接尋址,則本條指令前必須用前綴指出段寄存器名。尋址,則本條指令前必須用
8、前綴指出段寄存器名。 CS:MOV BX,3000H;將將CS段的段的3000H和和3001H兩單元的內(nèi)容送兩單元的內(nèi)容送BX 設(shè)設(shè)CS為為5100H,則本指令在執(zhí)行時(shí),將,則本指令在執(zhí)行時(shí),將54000H和和54001H兩單元的內(nèi)容取出送兩單元的內(nèi)容取出送BX。4. 寄存器間接尋址寄存器間接尋址 操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存操作數(shù)一定在存儲(chǔ)器中,存儲(chǔ)單元的有效地址由寄存器指出,這些寄存器可以為器指出,這些寄存器可以為BX,BP,SI和和DI之一,之一,即有效地址等于其中某一個(gè)寄存器的值:即有效地址等于其中某一個(gè)寄存器的值: BX BP EA SI DI BXBP+ 8位位移
9、量位位移量EA SI 16位位移量位位移量DI 和直接尋址一樣,如果指令前面沒(méi)有用前綴指明具體和直接尋址一樣,如果指令前面沒(méi)有用前綴指明具體的段寄存器,則尋址時(shí)默認(rèn)的段寄存器通常為的段寄存器,則尋址時(shí)默認(rèn)的段寄存器通常為DS。如。如寄存器為寄存器為BP時(shí),則對(duì)應(yīng)的段寄存器為時(shí),則對(duì)應(yīng)的段寄存器為SS。 在有些資料中,將位移量看成是一個(gè)相對(duì)值。細(xì)分起在有些資料中,將位移量看成是一個(gè)相對(duì)值。細(xì)分起來(lái),寄存器間接尋址可分為以下來(lái),寄存器間接尋址可分為以下4種:種:(1)以以BX寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址數(shù)據(jù)段基址尋址。數(shù)據(jù)段基址尋址。 MOV AX,BX 設(shè)DS5000H,BX3000H,
10、則本指令在執(zhí)行時(shí),將53000H和53001H兩單元的內(nèi)容送AX。ES MOVCX,BX 設(shè)ES3000H,BX4000H,則本指令在執(zhí)行時(shí),將34000H和34001H兩單元的內(nèi)容送CX。(2) 以以BP寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址堆棧段基址尋址。堆棧段基址尋址。 MOV BX,BP 設(shè)設(shè)SS5000H,BP4000H,則本指令在執(zhí)行,則本指令在執(zhí)行時(shí),將時(shí),將54000H和和54001H兩單元的內(nèi)容送兩單元的內(nèi)容送BX。(3) 以以SI和和DI寄存器進(jìn)行間接尋址寄存器進(jìn)行間接尋址變址尋址。變址尋址。SI和和DI寄存器分別稱(chēng)為源變址寄存器和目的變址寄存寄存器分別稱(chēng)為源變址寄存器和目的
11、變址寄存器,所以用這兩個(gè)寄存器來(lái)進(jìn)行間接尋址也叫變址尋器,所以用這兩個(gè)寄存器來(lái)進(jìn)行間接尋址也叫變址尋址。變址尋址通常用于對(duì)數(shù)組元素進(jìn)行操作,另外,址。變址尋址通常用于對(duì)數(shù)組元素進(jìn)行操作,另外,在在“54串操作指令中還將講到有些串操作指令要串操作指令中還將講到有些串操作指令要求用固定的變址寄存器對(duì)操作數(shù)進(jìn)行尋址,操作過(guò)程求用固定的變址寄存器對(duì)操作數(shù)進(jìn)行尋址,操作過(guò)程中,指令會(huì)自動(dòng)修改變址寄存器中的地址,以指向下中,指令會(huì)自動(dòng)修改變址寄存器中的地址,以指向下一個(gè)操作數(shù)。一個(gè)操作數(shù)。 (4) 將將BX,BP和和SI,DI寄存器組合起來(lái)進(jìn)行寄存器組合起來(lái)進(jìn)行間接尋址間接尋址基址加變址的尋址。通常將基址
12、加變址的尋址。通常將BX和和BP稱(chēng)為基址寄存器,將稱(chēng)為基址寄存器,將SI和和DI稱(chēng)為變址寄存器。稱(chēng)為變址寄存器。EABX SI BP + DI +偏移量偏移量MOV AX,BX+SI 設(shè)DS1000H,BX5000H,SI2000H,則上面指令在執(zhí)行時(shí),有效地址為7000H,本指令將17000H和17001H兩單元的內(nèi)容取到AX中。 MOV AX,BX+SI+0050; 將BX和SI中的內(nèi)容與0050相加作為有效地址【例例5.1】設(shè)設(shè)BX0158H,DI10A5H,位移,位移量量1B57H,DS2100H,并假定沒(méi)有使用段,并假定沒(méi)有使用段前綴,即把前綴,即把DS作為操作數(shù)對(duì)應(yīng)的段寄存器。作為
13、操作數(shù)對(duì)應(yīng)的段寄存器。在各種尋址方式下,這些寄存器和位移量所產(chǎn)生的在各種尋址方式下,這些寄存器和位移量所產(chǎn)生的有效地址和物理地址為:有效地址和物理地址為:直接尋址:直接尋址:有效地址有效地址1B57H物理地址物理地址21000H+1B57H22B57H寄存器間接尋址寄存器間接尋址(寄存器為寄存器為BX):有效地址有效地址0158H物理地址物理地址21000H+0158H21158HBX寄存器相對(duì)間接尋址:寄存器相對(duì)間接尋址:有效地址有效地址0158H+1B57H1CAFH物理地址物理地址21000H+1CAFH22CAFH變址尋址變址尋址(寄存器為寄存器為DI):有效地址有效地址10A5H物理
14、地址物理地址21000H+10A5H220A5HDI寄存器相對(duì)變址尋址:寄存器相對(duì)變址尋址:有效地址有效地址10A5H+1B57H2BFCH物理地址物理地址21000H+2BFCH23BFCH基址加變址的尋址基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI為變址為變址寄存器寄存器):有效地址有效地址0158H+10A5H11FDH物理地址物理地址21000H+11FDH221FDH相對(duì)的基址加變址的尋址相對(duì)的基址加變址的尋址(BX為基址寄存器,為基址寄存器,DI為變址寄存器為變址寄存器):有效地址有效地址0158H+10A5H+1B57H2D54H物理地址物理地址21000H+2D54H
15、23D54H8086指令分類(lèi)指令分類(lèi)8086指令系統(tǒng)按功能可分為指令系統(tǒng)按功能可分為4大類(lèi)型:大類(lèi)型:1. 數(shù)據(jù)傳輸類(lèi)數(shù)據(jù)傳輸類(lèi)2. 數(shù)據(jù)操作類(lèi)數(shù)據(jù)操作類(lèi)3. 串操作類(lèi)串操作類(lèi)4. 控制類(lèi)控制類(lèi)傳送類(lèi)指令傳送類(lèi)指令一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令又可以分成數(shù)據(jù)傳送指令又可以分成4種:種:1. 通用數(shù)據(jù)傳送通用數(shù)據(jù)傳送2. 累加器專(zhuān)用傳送(輸入累加器專(zhuān)用傳送(輸入/輸出數(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é)或字, 但是必須但是必須等長(zhǎng)。等長(zhǎng)。對(duì)標(biāo)志位的影響:無(wú)對(duì)標(biāo)志位的影響:無(wú)通用寄存器(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲(chǔ)器立即數(shù)段寄存器(C S、 SS、 DS、 ES) 源操作數(shù)可以是通用寄存器、段寄存器、存源操作數(shù)可以是通用寄存器、
17、段寄存器、存儲(chǔ)器以及立即操作數(shù),目標(biāo)操作數(shù)可以是通儲(chǔ)器以及立即操作數(shù),目標(biāo)操作數(shù)可以是通用寄存器、段寄存器(用寄存器、段寄存器(CS除外)或存儲(chǔ)器。除外)或存儲(chǔ)器。 MOV regMOV reg,data ;data ;立即數(shù)送寄存器立即數(shù)送寄存器 MOV mem MOV mem,data ;data ;立即數(shù)送存儲(chǔ)單元立即數(shù)送存儲(chǔ)單元 MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中兩操作數(shù)中至少有一個(gè)為寄存器指令中兩操作數(shù)中至少有一個(gè)為寄存器 例例: MOV: MOVCLCL,DLDL MOV MOVAXAX,BXBXMOVMOVSISI,CXCX
18、MOVMOVCLCL,BX+5BX+5 MOV segregMOV segreg,mem/reg ;mem/reg ;存儲(chǔ)單元存儲(chǔ)單元/ /寄存器送段寄存器寄存器送段寄存器 MOV mem/regMOV mem/reg,segreg ;segreg ;段寄存器送存儲(chǔ)單元段寄存器送存儲(chǔ)單元/ /寄存器寄存器段寄存器段寄存器CS、IP及立即數(shù)不能作為目標(biāo)操作數(shù);及立即數(shù)不能作為目標(biāo)操作數(shù);兩個(gè)存儲(chǔ)單元之間不允許直接傳送數(shù)據(jù);兩個(gè)存儲(chǔ)單元之間不允許直接傳送數(shù)據(jù);立即數(shù)不能直接傳送到段寄存器;立即數(shù)不能直接傳送到段寄存器;兩個(gè)段寄存器之間不能直接傳送數(shù)據(jù)。兩個(gè)段寄存器之間不能直接傳送數(shù)據(jù)。 通用寄存器
19、(AX、 B X、 C X、 DX、 B P、SP、 SI、 DI)存儲(chǔ)器立即數(shù)段寄存器(C S、 SS、 DS、 ES)幾個(gè)不能傳送的解決辦法:用幾個(gè)不能傳送的解決辦法:用AXAX作橋梁作橋梁存儲(chǔ)器存儲(chǔ)器存儲(chǔ)器:存儲(chǔ)器: 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開(kāi)始的開(kāi)始的1001
20、00個(gè)存儲(chǔ)單元個(gè)存儲(chǔ)單元 全部填充為全部填充為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)”方式工作的存儲(chǔ)方式工作的存儲(chǔ)區(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í)行示意圖如圖低地址低地址存儲(chǔ)區(qū)存儲(chǔ)區(qū)(SS段)段)執(zhí)行前執(zhí)行前(AX)=1020(SP)存儲(chǔ)區(qū)存儲(chǔ)區(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í)行示意圖如下圖所示低地址低地址存儲(chǔ)區(qū)存儲(chǔ)區(qū)(SS段)段)出棧方向出棧方向執(zhí)行前執(zhí)行前2010POP BX指令執(zhí)行示意圖指令執(zhí)行示意圖(SP)存儲(chǔ)區(qū)存儲(chǔ)區(qū)(SS段)段)執(zhí)行后執(zhí)行后(BX)=1020(SP)(SP)+1(SP)+2BX
24、20201010高地址高地址低地址低地址高地址高地址堆棧指令使用時(shí)應(yīng)注意幾點(diǎn):堆棧指令使用時(shí)應(yīng)注意幾點(diǎn):堆棧操作總是按字進(jìn)行堆棧操作總是按字進(jìn)行不能從棧頂彈出一個(gè)字給不能從棧頂彈出一個(gè)字給CSCS堆棧指針為堆棧指針為SS:SPSS:SP,SPSP永遠(yuǎn)指向棧頂永遠(yuǎn)指向棧頂SPSP自動(dòng)進(jìn)行增減量(自動(dòng)進(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ù)中必須有一個(gè)在寄存器中;要求:兩操作數(shù)中必須有一個(gè)在寄存器中;
25、 操作數(shù)不能為段寄存器和立即數(shù);操作數(shù)不能為段寄存器和立即數(shù); 源和目地操作數(shù)類(lèi)型要一致。源和目地操作數(shù)類(lèi)型要一致。舉例:舉例: 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前者表示將符號(hào)地址為前者表示將符號(hào)地址為BUFFERBUFFER的存儲(chǔ)單
26、元的偏侈的存儲(chǔ)單元的偏侈地址取到地址取到 BXBX中中; ;后者表示將后者表示將BUFFERBUFFER存儲(chǔ)單元中的存儲(chǔ)單元中的內(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個(gè)單元中存?zhèn)€單元中存放著一個(gè)地址,放著一個(gè)地址,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個(gè)標(biāo)志位傳個(gè)標(biāo)志位傳送到送到AHAH中的指定位,如下圖所示中的指定位,如下圖所示: :
28、1D3D5D7D6D4D2D0DOFDF IF TF SF ZFAFPFCFAHLAHF指令的功能指令的功能FLAG(2)(2)設(shè)置標(biāo)志指令設(shè)置標(biāo)志指令SAHFSAHF SAHF的功能與的功能與LAHF的功能正好相反,的功能正好相反,用圖來(lái)示意,只要將上圖中用圖來(lái)示意,只要將上圖中5 5個(gè)箭頭方向反個(gè)箭頭方向反一下即可。一下即可。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來(lái)傳送信息。來(lái)傳送信息。功能功能: (: (累加器累加器)I/O)I/O端口端口(1)(1)輸入指令輸入指令I(lǐng)NIN IN acc,PORT IN acc,PORT ;PORT;PO
31、RT端口號(hào)端口號(hào)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指令時(shí),要事先用傳送指令時(shí),要事先用傳送指令把指令把I/OI/O端口號(hào)設(shè)置到端口號(hào)設(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ù)操作類(lèi)指令數(shù)據(jù)操作類(lèi)指令5.3.1 算術(shù)運(yùn)算類(lèi)指令算術(shù)運(yùn)算類(lèi)指令 涉及兩種類(lèi)型數(shù)據(jù)涉及兩種類(lèi)
33、型數(shù)據(jù): 無(wú)符號(hào)數(shù)和有符號(hào)數(shù)。對(duì)無(wú)符號(hào)數(shù)和有符號(hào)數(shù)。對(duì)加減法指令,無(wú)符號(hào)和有符號(hào)數(shù)可采用同一套指加減法指令,無(wú)符號(hào)和有符號(hào)數(shù)可采用同一套指令,但應(yīng)注意:令,但應(yīng)注意:l 參加的操作數(shù)必須都是無(wú)符號(hào)數(shù)或都是有符號(hào)參加的操作數(shù)必須都是無(wú)符號(hào)數(shù)或都是有符號(hào)數(shù)。數(shù)。l 需使用不同的標(biāo)志位來(lái)檢查無(wú)符號(hào)數(shù)和有符號(hào)需使用不同的標(biāo)志位來(lái)檢查無(wú)符號(hào)數(shù)和有符號(hào)數(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指令對(duì)標(biāo)志位(指狀態(tài)標(biāo)志)都有影響。指令對(duì)標(biāo)志位(指狀態(tài)標(biāo)志)都有影響。5.3.1.1 加法指令加法指令(2) (2) 帶進(jìn)位位的加法指令帶進(jìn)位位的加法指令A(yù)DCADC ADC ADC指令在形式上和功能上都有與指令在形式上和功能上都有與ADDADD類(lèi)似,類(lèi)似,只是相加時(shí)還要包括進(jìn)位標(biāo)志只是相
35、加時(shí)還要包括進(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)例例: :有兩個(gè)有兩個(gè)4 4字節(jié)的
36、無(wú)符號(hào)數(shù)相加:字節(jié)的無(wú)符號(hào)數(shù)相加: 2C56F8AC+309E47BE=2C56F8AC+309E47BE=? 設(shè)被加數(shù)、加數(shù)分別存放在設(shè)被加數(shù)、加數(shù)分別存放在BUFFER1BUFFER1及及BUFFER2BUFFER2開(kāi)開(kāi)始的兩個(gè)存儲(chǔ)區(qū)內(nèi),結(jié)果放回始的兩個(gè)存儲(chǔ)區(qū)內(nèi),結(jié)果放回BUFFER1BUFFER1存儲(chǔ)區(qū),如存儲(chǔ)區(qū),如下頁(yè)圖所示。下頁(yè)圖所示。 因因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功能:類(lèi)似于功能:類(lèi)似于C C語(yǔ)言中的語(yǔ)言中的+操作:對(duì)指定的操作:對(duì)指定的操作數(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í)為存儲(chǔ)器操作數(shù)源和目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(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ù),這三個(gè)數(shù)的低位數(shù),這三個(gè)數(shù)的低16位和高位和高16位分別存放位分別存放在地址為在地址為X, X+2;Y, Y+2;Z, Z+2的存儲(chǔ)單元中。用指令序列的存儲(chǔ)單元中。用指令序列實(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單元單元作用類(lèi)似于作用類(lèi)似于C C語(yǔ)言中的語(yǔ)言中的”操作符。操作符。格式:格式: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)對(duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于用對(duì)一個(gè)操作數(shù)取補(bǔ)碼相當(dāng)于用0 0減去此操作數(shù),故減去此操作數(shù),故利用利用NEGNEG指令可得到負(fù)數(shù)的絕對(duì)值。指令可得到負(fù)數(shù)的絕對(duì)值。例:若例:若( (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的絕對(duì)值的絕對(duì)值) )。(4) (4) 求
43、補(bǔ)指令求補(bǔ)指令NEGNEG格式:格式: CMP dest, src CMP dest, src操作:操作: (dest)-(src)(dest)-(src)CMPCMP也是執(zhí)行兩個(gè)操作數(shù)相減也是執(zhí)行兩個(gè)操作數(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)志位來(lái)判斷比較的結(jié)果根據(jù)標(biāo)志位來(lái)判斷比較的結(jié)果1)1)根據(jù)根據(jù)ZF判斷兩個(gè)數(shù)是否相等。若
44、判斷兩個(gè)數(shù)是否相等。若ZF=1,=1,則兩數(shù)相則兩數(shù)相等。等。2)2)若兩個(gè)數(shù)不相等若兩個(gè)數(shù)不相等, ,則分兩種情況考慮則分兩種情況考慮: : 比較的是兩個(gè)無(wú)符號(hào)數(shù)比較的是兩個(gè)無(wú)符號(hào)數(shù) 若若CF=0,=0,則則destdestsrc;src; 若若CF=1,=1,則則destdestsrcsrc。 比較的是兩個(gè)有符號(hào)數(shù)比較的是兩個(gè)有符號(hào)數(shù) 若若OF SF=0=0,則則destdestsrc;src; 若若OF SF=1=1,則則destdestsrcsrc。比較指令在使用時(shí),一般在其后緊跟一條條件轉(zhuǎn)移指比較指令在使用時(shí),一般在其后緊跟一條條件轉(zhuǎn)移指令,判斷比較結(jié)果的轉(zhuǎn)向。令,判斷比較結(jié)果的轉(zhuǎn)向
45、。舉例:比較舉例:比較ALAL、BLBL、CLCL中帶符號(hào)數(shù)的大小,將中帶符號(hào)數(shù)的大小,將 最小數(shù)放在最小數(shù)放在A(yíng)LAL中。中。程序:程序: 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)行乘法時(shí):進(jìn)行乘法時(shí):8 8位位* *8 8位位1616位乘積位乘積 16 16位位* *1616位位3232位乘積位乘積(1) (1) 無(wú)符號(hào)數(shù)的乘法指令無(wú)符號(hào)數(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),乘積在乘積在A(yíng)XAX中中 MUL CX MUL CX ;(AX)
47、(AX)(CX),(CX),乘積在乘積在DX,AXDX,AX中中格式與格式與MULMUL指令類(lèi)似,只是要求兩操作數(shù)均為指令類(lèi)似,只是要求兩操作數(shù)均為有符號(hào)有符號(hào)數(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) 有符號(hào)數(shù)乘法指令有符號(hào)數(shù)乘法指令I(lǐng)MULIMUL5.3.1.4 除法指令除法指令進(jìn)行除法時(shí):進(jìn)行除法時(shí):1616位位/8/8位位8 8位商位商 3232位位/16/16位位1616位商位商對(duì)
48、被除數(shù)、商及余數(shù)存放有如下規(guī)定:對(duì)被除數(shù)、商及余數(shù)存放有如下規(guī)定: 被除數(shù)被除數(shù) 商商余數(shù)余數(shù)字節(jié)除法字節(jié)除法 AXAX AL AL AH AH 字除法字除法 DX:AXDX:AX AX AX DX DX無(wú)符號(hào)除法無(wú)符號(hào)除法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)生一個(gè)類(lèi)型產(chǎn)生一個(gè)類(lèi)型0 0的內(nèi)部中斷。的內(nèi)部中斷。有符號(hào)數(shù)除法指令有符號(hào)數(shù)除法指令I(lǐng)DIV格式:格式: IDIV src操作與操作與DIVDIV類(lèi)似。商及余數(shù)均為有符號(hào)數(shù)類(lèi)似。商及余數(shù)均為有符號(hào)數(shù), ,且余數(shù)且余數(shù)符號(hào)總是與被除數(shù)符號(hào)相同。符號(hào)總是與被除數(shù)符號(hào)相同。注意注意: 對(duì)于對(duì)于DIV/IDIV指令指令v AX(DX,AX)為隱含的被除數(shù)寄存器。為隱含的被除數(shù)寄存器。v AL(AX)為隱含的商寄存器。為隱含的商寄存器。v AH
50、(DX)為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。v src不能為立即數(shù)。不能為立即數(shù)。v 對(duì)所有條件標(biāo)志位均無(wú)定義。對(duì)所有條件標(biāo)志位均無(wú)定義。v除法運(yùn)算要求被除數(shù)字長(zhǎng)是除數(shù)字長(zhǎng)的兩倍除法運(yùn)算要求被除數(shù)字長(zhǎng)是除數(shù)字長(zhǎng)的兩倍, ,若若不滿(mǎn)足則需對(duì)被除數(shù)進(jìn)行擴(kuò)展不滿(mǎn)足則需對(duì)被除數(shù)進(jìn)行擴(kuò)展, ,否則產(chǎn)生錯(cuò)誤。否則產(chǎn)生錯(cuò)誤。v對(duì)于無(wú)符號(hào)數(shù)除法擴(kuò)展,只需將對(duì)于無(wú)符號(hào)數(shù)除法擴(kuò)展,只需將AHAH或或DXDX清零即可清零即可。v對(duì)有符號(hào)數(shù)而言對(duì)有符號(hào)數(shù)而言,則是符號(hào)位的擴(kuò)展。可使用前則是符號(hào)位的擴(kuò)展。可使用前面介紹過(guò)的符號(hào)擴(kuò)展指令面介紹過(guò)的符號(hào)擴(kuò)展指令CBW和和CWD(5)(5)字節(jié)字節(jié)- -字轉(zhuǎn)換指令字轉(zhuǎn)換指
51、令格式:格式:CBW ;把把AL的符號(hào)位復(fù)制到的符號(hào)位復(fù)制到AH CWD ;把把AX的符號(hào)位復(fù)制到的符號(hào)位復(fù)制到DX用途:用于有符號(hào)數(shù)的除法。用途:用于有符號(hào)數(shù)的除法。例如:例如:(AL) = A7H,則執(zhí)行,則執(zhí)行CBW后,后,AH的內(nèi)容為的內(nèi)容為FFH。例例: 寫(xiě)出寫(xiě)出34H25H的程序段。的程序段。MOV AL,34H MOV BL,25H CBW ; AL的符號(hào)擴(kuò)展到的符號(hào)擴(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專(zhuān)用于對(duì)專(zhuān)用于對(duì)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為何要對(duì)為何要對(duì)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ī)是按二進(jìn)制(十六進(jìn)制)一的規(guī)則。而計(jì)算機(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本指令對(duì)在本指令對(duì)在A(yíng)LAL中的由兩個(gè)未組合的中的由兩個(gè)未組合的BCDBCD碼相加后的碼相加后的結(jié)果進(jìn)行調(diào)正,得到一個(gè)正確的未組合的結(jié)果進(jìn)行調(diào)正,得到一個(gè)正確的未組合的BCDBCD碼。碼。vAAAAAA指令只影響指令只影響AFAF和和CFCF,其余標(biāo)志無(wú)定義。其余標(biāo)志無(wú)定義。vAAAAAA指令應(yīng)緊跟在指令應(yīng)緊跟在A(yíng)DDADD或或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)整原理:先看一個(gè)例子調(diào)整原理:先看一個(gè)例子 計(jì)算計(jì)算8 89 9 0000 10000000 1000 見(jiàn)右式見(jiàn)右式 +0000 1001 +0000 1001 0001 0001 0001 0001 1111 結(jié)果應(yīng)為結(jié)果應(yīng)為1717,而計(jì)算機(jī)相加為,而計(jì)算機(jī)相加為1111,原因在于運(yùn)算過(guò)原因在于運(yùn)算過(guò)程中,如遇到低程中,如遇到低4 4位往高位往高4 4位產(chǎn)生進(jìn)位時(shí)(此時(shí)位產(chǎn)生進(jìn)位時(shí)(此時(shí)AF=1AF=1)是按逢十六進(jìn)一的規(guī)則,但是按逢十六進(jìn)一的規(guī)則,但BCDBCD碼要求逢十進(jìn)一碼要求逢十進(jìn)一,因
55、此只要產(chǎn)生進(jìn)位,個(gè)位就會(huì)少,因此只要產(chǎn)生進(jìn)位,個(gè)位就會(huì)少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之間之間) )時(shí),也應(yīng)進(jìn)時(shí),也應(yīng)進(jìn)行加行加6 6調(diào)正調(diào)正 ( (原因是逢十沒(méi)有進(jìn)位,故用加原因是逢十沒(méi)有進(jìn)位,故用加6 6的方法的方法強(qiáng)行產(chǎn)生進(jìn)位強(qiáng)行產(chǎn)生進(jìn)位) ) 。如對(duì)上例的結(jié)果進(jìn)行加如對(duì)上例的結(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 兩個(gè)壓縮兩個(gè)壓縮BCDBCD碼相加結(jié)果在碼相加結(jié)果在A(yíng)LAL中,通過(guò)中,通過(guò)DAADAA調(diào)整調(diào)整得到一個(gè)正確的壓縮得到一個(gè)正確的壓縮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)緊跟在A(yíng)DDADD或或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 對(duì)對(duì)ALAL中由兩個(gè)非壓縮的中由兩個(gè)非壓縮的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 對(duì)對(duì)ALAL中由兩個(gè)壓縮中由兩個(gè)壓縮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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版高新技術(shù)企業(yè)研發(fā)項(xiàng)目采購(gòu)合同2篇
- 二零二五年度高校與公益組織合作辦學(xué)合同3篇
- 二零二五版家庭健康養(yǎng)生及食療服務(wù)合同3篇
- 二零二五年度生態(tài)雞養(yǎng)殖基地購(gòu)銷(xiāo)合同標(biāo)準(zhǔn)版3篇
- 二零二五版桉樹(shù)生物質(zhì)能源開(kāi)發(fā)合同2篇
- 二零二五年房地產(chǎn)銷(xiāo)售代理合同中止及終止協(xié)議6篇
- 二零二五版智能倉(cāng)儲(chǔ)貨物承包運(yùn)輸一體化合同3篇
- 二零二五年智能空調(diào)銷(xiāo)售及綠色環(huán)保安裝合同樣本3篇
- 二零二五年度車(chē)庫(kù)產(chǎn)權(quán)買(mǎi)賣(mài)及物業(yè)服務(wù)合同范本3篇
- 二零二五年文化藝術(shù)品油漆保護(hù)修復(fù)合同3篇
- 春節(jié)文化常識(shí)單選題100道及答案
- 24年追覓在線(xiàn)測(cè)評(píng)28題及答案
- TGDNAS 043-2024 成人靜脈中等長(zhǎng)度導(dǎo)管置管技術(shù)
- 《陸上風(fēng)電場(chǎng)工程概算定額》NBT 31010-2019
- FZ∕T 63006-2019 松緊帶
- 罐區(qū)自動(dòng)化系統(tǒng)總體方案(31頁(yè))ppt課件
- BIQS評(píng)分表模板
- 工程建設(shè)項(xiàng)目?jī)?nèi)外關(guān)系協(xié)調(diào)措施
- 招投標(biāo)法考試試題及答案
- 皮帶輸送機(jī)工程施工電氣安裝措施要點(diǎn)
- 藥房(冰柜)溫濕度表
評(píng)論
0/150
提交評(píng)論