微機(jī)原理指令系統(tǒng)的學(xué)習(xí)_第1頁(yè)
微機(jī)原理指令系統(tǒng)的學(xué)習(xí)_第2頁(yè)
微機(jī)原理指令系統(tǒng)的學(xué)習(xí)_第3頁(yè)
微機(jī)原理指令系統(tǒng)的學(xué)習(xí)_第4頁(yè)
微機(jī)原理指令系統(tǒng)的學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1微型計(jì)算機(jī)原理及應(yīng)用微型計(jì)算機(jī)原理及應(yīng)用2第二章第二章 8086/8088 8086/8088指令系統(tǒng)指令系統(tǒng)3 2.1 2.1 尋址方式尋址方式 2.2 8086/8088 2.2 8086/8088指令系統(tǒng)指令系統(tǒng) 2.2.1 2.2.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 2.2.2 2.2.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 2.2.3 2.2.3 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令 2.2.4 2.2.4 程序控制指令程序控制指令 2.2.5 2.2.5 串操作指令串操作指令 2.2.6 2.2.6 標(biāo)志處理與標(biāo)志處理與CPUCPU控制指令控制指令42.1 8086/8088尋址方式尋址方式指令

2、格式:指令格式: 操作碼操作碼 操作數(shù)操作數(shù)操作碼:計(jì)算機(jī)所要執(zhí)行的操作,或指出操操作碼:計(jì)算機(jī)所要執(zhí)行的操作,或指出操作類型,是一種助記符。作類型,是一種助記符。操作數(shù):操作的對(duì)象,可以是操作數(shù)本身或操作數(shù):操作的對(duì)象,可以是操作數(shù)本身或存放操作數(shù)的內(nèi)存存放操作數(shù)的內(nèi)存(I/O端口端口)地址地址或其它有關(guān)或其它有關(guān)操作數(shù)的信息操作數(shù)的信息 。5匯編語(yǔ)言匯編語(yǔ)言是一種符號(hào)語(yǔ)言,它用助記符是一種符號(hào)語(yǔ)言,它用助記符來(lái)表示操作碼,用符號(hào)或符號(hào)地址來(lái)表來(lái)表示操作碼,用符號(hào)或符號(hào)地址來(lái)表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令示操作數(shù)或操作數(shù)地址,它與機(jī)器指令是一一對(duì)應(yīng)的。是一一對(duì)應(yīng)的。6尋址方式:是指令中

3、用于說(shuō)明如何尋找尋址方式:是指令中用于說(shuō)明如何尋找操作數(shù)的方法。操作數(shù)的方法。計(jì)算機(jī)中操作數(shù)常存放在以下幾個(gè)地方:計(jì)算機(jī)中操作數(shù)常存放在以下幾個(gè)地方:指令代碼中指令代碼中,存放常量;,存放常量;MOV AX, 2070H寄存器中寄存器中:MOV AX, BX內(nèi)存中內(nèi)存中: MOV AX, 2000HI/O端口中(僅對(duì)端口中(僅對(duì)IN/OUT指令)指令): IN AL, 40H780868088的基本尋址方式有六種:的基本尋址方式有六種:寄存器尋址寄存器尋址 ;操作數(shù)存放在寄存器中操作數(shù)存放在寄存器中立即尋址立即尋址 ;操作數(shù)存放在內(nèi)存代碼段操作數(shù)存放在內(nèi)存代碼段直接尋址直接尋址 ;操作數(shù)存放在

4、內(nèi)存操作數(shù)存放在內(nèi)存寄存器間接尋址;寄存器間接尋址;操作數(shù)存放在內(nèi)存操作數(shù)存放在內(nèi)存變址尋址變址尋址 ;操作數(shù)存放在內(nèi)存操作數(shù)存放在內(nèi)存基址加變址尋址基址加變址尋址 ;操作數(shù)存放在內(nèi)存操作數(shù)存放在內(nèi)存8一、一、 寄存器尋址寄存器尋址操作數(shù)放在操作數(shù)放在CPU內(nèi)部的寄存器中,可以是內(nèi)部的寄存器中,可以是8位位或或16位寄存器,位寄存器,注意源操作數(shù)和目的操作數(shù)的注意源操作數(shù)和目的操作數(shù)的位數(shù)應(yīng)一致。位數(shù)應(yīng)一致。MOV AX, BX ;將將 BX中的內(nèi)容傳送到中的內(nèi)容傳送到AX中去中去MOV AL, BH ;將將 BH中的內(nèi)容傳送到中的內(nèi)容傳送到AL中去中去MOV CL, AX錯(cuò)誤錯(cuò)誤! 不匹配不

5、匹配9二、二、 立即尋址立即尋址操作數(shù)直接放在指令中,緊跟在操作碼的后面,操作數(shù)直接放在指令中,緊跟在操作碼的后面,與操作碼一起放在存儲(chǔ)器的代碼段中(與操作碼一起放在存儲(chǔ)器的代碼段中(8/16位)。位)。MOV AX, 2030H 對(duì)應(yīng)機(jī)器碼對(duì)應(yīng)機(jī)器碼: B8H 2030H4004H4003H4002H4001H4000H20H30HB8H4004H4003H4002H4001H4000H20H30HB8H內(nèi)存偏移內(nèi)存偏移地址地址單元內(nèi)容單元內(nèi)容注意注意別錯(cuò)別錯(cuò)!高字節(jié)高字節(jié) 高地址高地址低字節(jié)低字節(jié) 低地址低地址AXAHAL20H30H10三、三、 直接尋址直接尋址 操作數(shù)存放在內(nèi)存中,在指

6、令中給出存放單元的操作數(shù)存放在內(nèi)存中,在指令中給出存放單元的偏移地址偏移地址,如果不加說(shuō)明,操作數(shù),如果不加說(shuō)明,操作數(shù)默認(rèn)在數(shù)據(jù)段默認(rèn)在數(shù)據(jù)段。MOV AX, 0020H;將將 數(shù)據(jù)段偏移地址為數(shù)據(jù)段偏移地址為0020H的地址中的內(nèi)容傳的地址中的內(nèi)容傳送到送到AX中去,相當(dāng)于中去,相當(dāng)于: MOV AX, DS:0020H注意:書(shū)寫時(shí)加方括號(hào)。注意:書(shū)寫時(shí)加方括號(hào)。物理地址物理地址: (DS)16指令中給的指令中給的16位偏移地址位偏移地址1112H34H56H碼段碼段堆棧段堆棧段數(shù)據(jù)段數(shù)據(jù)段0000H0001H0020H0021H0022HDS:0000H偏移地址偏移地址內(nèi)存內(nèi)容內(nèi)存內(nèi)容M

7、OV AX, 0020HAXAHAL3412AX: 3412H12也可以指向內(nèi)存中其他段的數(shù)據(jù),這時(shí)要在相也可以指向內(nèi)存中其他段的數(shù)據(jù),這時(shí)要在相應(yīng)的偏移地址前加段超越符和應(yīng)的偏移地址前加段超越符和“ :”。MOV AL, ES:0020H;將將 擴(kuò)展段中偏移地址為擴(kuò)展段中偏移地址為0020H單元中的內(nèi)容傳單元中的內(nèi)容傳送到送到AL中去中去MOV SS:0100H, BX;將將 BX中的內(nèi)容傳送到堆棧段中偏移地址為中的內(nèi)容傳送到堆棧段中偏移地址為0100H、0101H的單元中去的單元中去13四、四、 寄存器間接尋址寄存器間接尋址操作數(shù)存放在內(nèi)存中,但其操作數(shù)存放在內(nèi)存中,但其偏移地址偏移地址存

8、放在指令存放在指令中給出的寄存器中。中給出的寄存器中。MOV AX, BXBX中存放操作中存放操作數(shù)的偏移地址數(shù)的偏移地址其中,作為間接尋址的寄存器只能有其中,作為間接尋址的寄存器只能有4個(gè):個(gè):BX, SI, DI, BP,其他寄存器無(wú)此功能。其他寄存器無(wú)此功能。141、對(duì)、對(duì)DI、SI、BX間接尋址間接尋址2、對(duì)、對(duì)BP間接尋址間接尋址注意:用注意:用BP間接尋址,操作數(shù)默認(rèn)在堆棧段間接尋址,操作數(shù)默認(rèn)在堆棧段,用其余用其余3個(gè)寄存器時(shí),操作數(shù)默認(rèn)在數(shù)據(jù)段個(gè)寄存器時(shí),操作數(shù)默認(rèn)在數(shù)據(jù)段。物理地址物理地址: (DS)16DI/SI/BX中給的中給的16位偏移地址位偏移地址物理地址物理地址:

9、(SS)16BP中給的中給的16位偏移地址位偏移地址1578H00H56H碼段碼段堆棧段堆棧段數(shù)據(jù)段數(shù)據(jù)段0000H0001H1100H1101H1102HDS:0000H偏移地址偏移地址內(nèi)存內(nèi)容內(nèi)存內(nèi)容MOV AX, BXAXAHAL0078AX: 0078HMOV BX, 1100H16例例1:MOV AX, ES:BX;傳送的操作數(shù)在附加段中,偏移地址存放在傳送的操作數(shù)在附加段中,偏移地址存放在BX中。中。例例2:MOV BP, BX;將將BX中的內(nèi)容傳送到堆棧段中,其目的地的偏中的內(nèi)容傳送到堆棧段中,其目的地的偏移地址存放在移地址存放在BP中。中。例例3: MOV CX, 2000H;

10、錯(cuò),不能對(duì)錯(cuò),不能對(duì)CX間接尋址間接尋址17五、五、 變址尋址變址尋址操作數(shù)在內(nèi)存中,由指定的寄存器內(nèi)容,加上指操作數(shù)在內(nèi)存中,由指定的寄存器內(nèi)容,加上指令中給出的令中給出的8位或位或16位偏移量作為操作數(shù)的偏移地位偏移量作為操作數(shù)的偏移地址,計(jì)算方法:址,計(jì)算方法:偏移地址偏移地址寄存器內(nèi)容寄存器內(nèi)容指令中給定的偏移量指令中給定的偏移量同樣,作為變址的寄存器只能有同樣,作為變址的寄存器只能有4個(gè):個(gè):BX, SI, DI, BP,其他寄存器無(wú)此功能。其他寄存器無(wú)此功能。181、對(duì)、對(duì)DI、SI、BX變址尋址變址尋址2、對(duì)、對(duì)BP變址尋址變址尋址物理地址物理地址: (DS)16計(jì)算出的偏移地址

11、計(jì)算出的偏移地址物理地址物理地址: (SS)16計(jì)算出的偏移地址計(jì)算出的偏移地址注意:用注意:用BP變址尋址,操作數(shù)默認(rèn)在堆棧段變址尋址,操作數(shù)默認(rèn)在堆棧段,用其余用其余3個(gè)寄存器時(shí),操作數(shù)默認(rèn)在數(shù)據(jù)段個(gè)寄存器時(shí),操作數(shù)默認(rèn)在數(shù)據(jù)段。19MOV AX, TABDI變址尋址可以有多種格式:變址尋址可以有多種格式:MOV AX, BX+0A00H如:如:MOV AX, 0200H+BX假設(shè)假設(shè)DS:3000H, BX: 1000H 則操作則操作數(shù)所在地址:數(shù)所在地址:高高8位:位: 31201H 低低8位:位: 31200HMOV DH, SI+0200H;此時(shí)傳送的操作數(shù)在此時(shí)傳送的操作數(shù)在數(shù)據(jù)

12、段數(shù)據(jù)段中,其偏移地址是中,其偏移地址是SI寄存器中的內(nèi)容加上寄存器中的內(nèi)容加上0200H20六、六、 基址加變址尋址基址加變址尋址操作數(shù)存放在內(nèi)存中,但其操作數(shù)存放在內(nèi)存中,但其偏移地址偏移地址是由三部分是由三部分相加而成:相加而成: 基址寄存器內(nèi)容基址寄存器內(nèi)容變址寄存器內(nèi)容變址寄存器內(nèi)容偏移量偏移量基址寄存器只有基址寄存器只有2個(gè):個(gè):BX,默認(rèn)的操作數(shù)在數(shù)據(jù)段默認(rèn)的操作數(shù)在數(shù)據(jù)段;BP,默認(rèn)的操作數(shù)在堆棧段默認(rèn)的操作數(shù)在堆棧段。 變址寄存器只有變址寄存器只有2個(gè):個(gè):SI和和DI。 偏移量同樣由指令給出。偏移量同樣由指令給出。211、BX作為基地址作為基地址2、BP作為基地址作為基地址

13、物理地址物理地址: (DS)16計(jì)算出的偏移地址計(jì)算出的偏移地址物理地址物理地址: (SS)16計(jì)算出的偏移地址計(jì)算出的偏移地址22MOV AX, VALBX+SIMOV AX, 0200HBXSIMOV AX, 0200HBXBP;錯(cuò)誤錯(cuò)誤MOV AX, 0200HSIDI;錯(cuò)誤錯(cuò)誤MOV AX, COUNTBP+SI;欲取的數(shù)據(jù)在堆棧段欲取的數(shù)據(jù)在堆棧段MOV AX, BX+SI+0200H;欲傳送的操作數(shù)在欲傳送的操作數(shù)在數(shù)據(jù)段數(shù)據(jù)段中,其偏移地址是中,其偏移地址是BX寄寄存器中的內(nèi)容存器中的內(nèi)容加上加上SI寄存器中的內(nèi)容寄存器中的內(nèi)容加上加上0200H2312H34H56H78H9AH

14、BCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H10H20H30H40H50H60H70H80H23000H23001H23002H23003H23004H23005H23006H23007H1AH2AH3AH4AH5AH6AH7AH8AH31000H31001H31002H31003H31004H31005H31006H31007H1BH2BH3BH4BH5BH6BH7BH8BH33000H33001H33002H33003H33004H33005H33006H33007HDS= 2000H SS=3000H BX=1000H

15、 BP=3000H MOV AX, BXMOV AX, 3000HMOV AX, BXMOV AL, BPMOV SI, 0002HMOV CX, BXSIMOV DL, BX+06HAX= 1000HAX= 2010HAX= 3412HAL= 1BHSI= 0002HCX= 7856HDL= DEH242.2 8086/8088指令系統(tǒng)指令系統(tǒng)8088/8086指令系統(tǒng)可以分為以下六個(gè)功能組:指令系統(tǒng)可以分為以下六個(gè)功能組: 數(shù)據(jù)傳送數(shù)據(jù)傳送(Data Transter) 算術(shù)運(yùn)算算術(shù)運(yùn)算(Arithmetic) 邏輯運(yùn)算邏輯運(yùn)算(Logic) 程序控制程序控制(Program Contro

16、l) 串操作串操作(String Menipulation) 標(biāo)志處理標(biāo)志處理 和和CPU控制控制(Processor Control)25一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令1. 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令格式:格式:MOV OPRD1, OPRD2功能功能: (OPRD2) OPRD1CPU內(nèi)部寄存器之間數(shù)據(jù)的傳送內(nèi)部寄存器之間數(shù)據(jù)的傳送(除除CS、IP)立即數(shù)傳送至立即數(shù)傳送至CPU內(nèi)部的通用寄存器組內(nèi)部的通用寄存器組CPU內(nèi)部的寄存器內(nèi)部的寄存器(除除CS、IP)與存儲(chǔ)器與存儲(chǔ)器(所有尋所有尋址方式址方式)之間之間能實(shí)現(xiàn)用立即數(shù)給存儲(chǔ)單元賦值能實(shí)現(xiàn)用立即數(shù)給存儲(chǔ)單元賦值26 CS,I

17、P不能作為目的操作數(shù)不能作為目的操作數(shù) MOV CS, AX 兩個(gè)段寄存器間不能直接傳送兩個(gè)段寄存器間不能直接傳送 MOV SS, DS 立即數(shù)不能直接傳送給段寄存器立即數(shù)不能直接傳送給段寄存器 MOV DS,2000H 內(nèi)存單元間不能直接傳送內(nèi)存單元間不能直接傳送 MOV SI, 2000H 立即數(shù)不能作為目的操作數(shù)立即數(shù)不能作為目的操作數(shù) MOV 1000H, AX注意:注意:27MOV BL, AXMOV 100, CXMOV SI, DIMOV CS, AXMOV SI, DIMOV BH, 2DIMOV AX, CSMOV SS, 2400HMOV BP+4, AX錯(cuò)誤,不匹配錯(cuò)誤,

18、不匹配錯(cuò)誤,立即數(shù)不能賦值錯(cuò)誤,立即數(shù)不能賦值正確正確錯(cuò)誤,錯(cuò)誤,CS不能賦值不能賦值錯(cuò)誤,內(nèi)存間不能直接傳送錯(cuò)誤,內(nèi)存間不能直接傳送正確正確正確正確錯(cuò)誤,段寄存器不能賦立即數(shù)錯(cuò)誤,段寄存器不能賦立即數(shù)正確正確282. 堆棧指令堆棧指令 堆棧是按先進(jìn)后出的原則組織的一段內(nèi)存區(qū)堆棧是按先進(jìn)后出的原則組織的一段內(nèi)存區(qū)域,一般作臨時(shí)存儲(chǔ)器用域,一般作臨時(shí)存儲(chǔ)器用(倉(cāng)庫(kù)倉(cāng)庫(kù))。其指針。其指針SP為為16位位的寄存器,始終指向棧頂?shù)募拇嫫?,始終指向棧頂(貨物堆放的位置貨物堆放的位置)。堆棧。堆棧的空間大小可用戶指定。如:的空間大小可用戶指定。如:SS的值為的值為 2000H 表示堆棧從表示堆棧從2000

19、0H處開(kāi)始處開(kāi)始20000H假設(shè)用戶定義堆棧為假設(shè)用戶定義堆棧為100個(gè)字節(jié),個(gè)字節(jié),則則SP自動(dòng)設(shè)置為自動(dòng)設(shè)置為0064H20064H100個(gè)字節(jié)個(gè)字節(jié)SP:0064H291、格式:格式:PUSH OPRD 功能功能: (OPRD)入棧入棧 FFH20000H20064H100個(gè)字節(jié)個(gè)字節(jié)SP(1) SP-1SP AHSPSP12H(2) SP-1SP ALSPSP34H先減指針先減指針, 再壓數(shù)據(jù)再壓數(shù)據(jù), 先高后低先高后低(1) SPBL SP+1SP(2) SPBH SP+1SP先出數(shù)據(jù)先出數(shù)據(jù), 再加指針再加指針,先低后高先低后高彈出低字節(jié)彈出低字節(jié)彈出高字節(jié)彈出高字節(jié)SPSP堆棧的

20、操作有兩種堆棧的操作有兩種:入棧入棧/出棧出棧例:例: MOV AX, 1234H PUSH AX;入棧入棧2、格式:格式:POP OPRD 功能功能: 棧頂內(nèi)容送棧頂內(nèi)容送OPRD30注意:注意:只能對(duì)只能對(duì)16位數(shù)進(jìn)行操作,一次壓入彈出一個(gè)字位數(shù)進(jìn)行操作,一次壓入彈出一個(gè)字PUSH AH;錯(cuò)錯(cuò)必須對(duì)寄存器的內(nèi)容或內(nèi)存單元的內(nèi)容進(jìn)行操作必須對(duì)寄存器的內(nèi)容或內(nèi)存單元的內(nèi)容進(jìn)行操作PUSH 2000H;錯(cuò)錯(cuò) PUSH 2000H; 對(duì)對(duì)例:設(shè)例:設(shè)SP為為0100H,SS為為2000H, PUSH BX后,后,棧頂?shù)奈锢淼刂肥牵簵m數(shù)奈锢淼刂肥牵?20100H2H=200FEH而執(zhí)行而執(zhí)行POP

21、 BX后,棧頂?shù)奈锢淼刂肥牵汉?,棧頂?shù)奈锢淼刂肥牵?0100H2H=20102H31MOV AX, 1000HPUSH AXMOV BX, AXPUSH BX POP 1002HPOP BX12H34H56H78H9AHBCHDEHF0H21000H21001H21002H21003H21004H21005H21006H21007H30000H30001H30060H30061H30062H30063H30064H例:設(shè)例:設(shè)DS 2000H SS3000H SP0064H,執(zhí)行下列程序:執(zhí)行下列程序:SP10H00HBX 1000H34H12H34H12HBX1000HSPSPSP323.

22、交換指令交換指令XCHG格式:格式:XCHG OPRD1, OPRD2功能功能:(OPRD1) (OPRD2) 完成完成通用寄存器之間,通用寄存器與累加器之通用寄存器之間,通用寄存器與累加器之間、與存儲(chǔ)器之間間、與存儲(chǔ)器之間8位位,16位位數(shù)據(jù)的相互交換。數(shù)據(jù)的相互交換。例如:例如:XCHG BL, AHXCHG AX, BX 內(nèi)存之間的數(shù)據(jù)、累加器之間不可相互交換內(nèi)存之間的數(shù)據(jù)、累加器之間不可相互交換 CS,IP不能參與交換不能參與交換 段寄存器和立即數(shù)不能作為一個(gè)操作數(shù)段寄存器和立即數(shù)不能作為一個(gè)操作數(shù)334. 累加器專用指令累加器專用指令(只與只與AX或或AL有關(guān),與有關(guān),與AH無(wú)關(guān)無(wú)關(guān)

23、)1)輸入輸出指令輸入輸出指令CPU存儲(chǔ)器存儲(chǔ)器輸入輸入輸出輸出INOUTAX或或AL格式:格式:IN AL , PORT IN AX, PORT功能:從功能:從PORT口輸入數(shù)據(jù)到口輸入數(shù)據(jù)到AL(AX)。格式:格式:OUT PORT , AL OUT PORT, AX功能:將功能:將AL(AX)中的內(nèi)容從中的內(nèi)容從PORT口輸出口輸出。34IN AL, 40H OUT 40H , AL IN AX, 40H OUT 40H , AX8位位16位位(40H) AL(41H) AHAL (40H) AH (41H)當(dāng)端口地址大于當(dāng)端口地址大于8位位(0FFH)時(shí),要用時(shí),要用DX間接尋址間接尋

24、址MOV DX, 352HIN AL, DXMOV DX, 400HOUT DX, ALIN, OUT只能對(duì)只能對(duì)AL, AX操作,若傳送的數(shù)據(jù)為操作,若傳送的數(shù)據(jù)為16位,位,則端口地址只能取偶數(shù)。則端口地址只能取偶數(shù)。352) 換碼(查表)指令換碼(查表)指令 XLAT將累加器將累加器AL中的內(nèi)容變換為存儲(chǔ)器(默認(rèn)數(shù)據(jù)段)表格中的內(nèi)容變換為存儲(chǔ)器(默認(rèn)數(shù)據(jù)段)表格中的某一個(gè)值,常用來(lái)實(shí)現(xiàn)編碼碼制的轉(zhuǎn)換。中的某一個(gè)值,常用來(lái)實(shí)現(xiàn)編碼碼制的轉(zhuǎn)換。要求:要求:BX指向表的首地指向表的首地址的偏移地址址的偏移地址,AL中的中的內(nèi)容為表中某一項(xiàng)與首內(nèi)容為表中某一項(xiàng)與首地址之間的偏移量。地址之間的偏移

25、量。 在執(zhí)行查表指令時(shí),在執(zhí)行查表指令時(shí),CPU將將BX與與AL的值相的值相加作為偏移地址,將它加作為偏移地址,將它所對(duì)應(yīng)單元中的內(nèi)容取所對(duì)應(yīng)單元中的內(nèi)容取出送到出送到AL中去。中去。DS段段表格首地址表格首地址11H20H33H22HBX AL+BX+0BX+ALBX+2BX+1AL36注意:注意:使用該指令前,應(yīng)先建立一張表,該表的使用該指令前,應(yīng)先建立一張表,該表的最大容量為最大容量為256字節(jié)。(默認(rèn)在數(shù)據(jù)段)字節(jié)。(默認(rèn)在數(shù)據(jù)段)例例: 將十進(jìn)制數(shù)將十進(jìn)制數(shù)09轉(zhuǎn)換成七段數(shù)碼管的顯示編碼轉(zhuǎn)換成七段數(shù)碼管的顯示編碼+5Vabcdefgabcdefgabcdefg0100 00000ab

26、cdefg0111 1001 140H79H40H79H24H30H19H12H02H78H00H10H012345678937例例: 從從5號(hào)端口輸入十進(jìn)制數(shù),轉(zhuǎn)換為顯示編碼號(hào)端口輸入十進(jìn)制數(shù),轉(zhuǎn)換為顯示編碼后從后從20號(hào)端口輸出。號(hào)端口輸出。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX, 2000HIN AL, 5HXLATOUT 20H, AL如果改為:如果改為: MOV BX, 2000H MOV AL, 5H;不同?不同? XLA

27、T OUT 20H, AL38例:向端口例:向端口40H送字符送字符35的顯示編碼。的顯示編碼。40H79H24H30H19H12H02H78H00H10H01234567892000H2001H2002H2003H2004H2005H2006H2007H2008H2009HDS段段MOV BX, 2000HMOV AL, 3XLATOUT 40H, ALMOV AL, 5XLATOUT 40H, AL395. 地址傳送指令地址傳送指令1) 取偏移地址指令取偏移地址指令 LEA格式:格式:LEA OPRD1,OPRD2功能:將源操作數(shù)的偏移地址送到目的操作數(shù)中功能:將源操作數(shù)的偏移地址送到目的

28、操作數(shù)中。要求源操作數(shù)必須為存儲(chǔ)器操作數(shù),目的操作數(shù)必須為一要求源操作數(shù)必須為存儲(chǔ)器操作數(shù),目的操作數(shù)必須為一個(gè)個(gè)16位的通用寄存器。位的通用寄存器。該指令通常用來(lái)使一個(gè)寄存器作為地址指針。該指令通常用來(lái)使一個(gè)寄存器作為地址指針。LEA BX, TAB ; 將將TAB標(biāo)號(hào)所指位置的偏移地址送標(biāo)號(hào)所指位置的偏移地址送 BXMOV AL, BX ; 以以BX為地址指針取一個(gè)數(shù)據(jù)為地址指針取一個(gè)數(shù)據(jù)402) LDS 將指定內(nèi)存中的將指定內(nèi)存中的4個(gè)字節(jié)個(gè)字節(jié)(32位位)分別裝入指定的寄分別裝入指定的寄存器和段寄存器存器和段寄存器DS中。中。30H19H79H40H24H2133H2134H2131H

29、2130H2132HDS段段例:數(shù)據(jù)段例:數(shù)據(jù)段2130H2133H單元中存放一個(gè)地址單元中存放一個(gè)地址2130H 2131H 為該地址的偏移地址為該地址的偏移地址2132H 2133H 為該地址的段地址為該地址的段地址LDS DI, 2130H執(zhí)行后:執(zhí)行后:DI 7940H DS 3024H413) LES將指定內(nèi)存中的將指定內(nèi)存中的4個(gè)字節(jié)個(gè)字節(jié)(32位位)分別裝入指定的寄分別裝入指定的寄存器和段寄存器存器和段寄存器ES中。中。例:例:DS1000H DI 0400H 10400H=FFH 10401H=00H 10402H=AAH 10403H=00H LEA SI, DI; SI=

30、0400HLES AX, DI; AX= 00FFH ES=00AAH426. 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令1)LAHF(Load AH with Flags):讀取標(biāo)志讀取標(biāo)志 標(biāo)志寄存器標(biāo)志寄存器PSW中的低中的低8位位AHOF DF IF TF SF ZFAFPFCF15 14 13 12 11 109876543210D7 D6D4D2D0AH2)SAHF(Set Flags with AH): 設(shè)置標(biāo)志設(shè)置標(biāo)志 AH標(biāo)志寄存器中的低標(biāo)志寄存器中的低8位位433)PUSHF: 標(biāo)志寄存器入棧命令標(biāo)志寄存器入棧命令4)POPF:將棧頂內(nèi)容送標(biāo)志寄存器將棧頂內(nèi)容送標(biāo)志寄存器PSW注

31、意:這個(gè)命令將改變注意:這個(gè)命令將改變PSW的內(nèi)容。的內(nèi)容。44二、算術(shù)運(yùn)算指令二、算術(shù)運(yùn)算指令 80868088提供加、減、乘、除四種基本算術(shù)提供加、減、乘、除四種基本算術(shù)操作。這些操作都可用于字節(jié)或字的運(yùn)算,也可操作。這些操作都可用于字節(jié)或字的運(yùn)算,也可以用于帶符號(hào)數(shù)與無(wú)符號(hào)數(shù)的運(yùn)算。以用于帶符號(hào)數(shù)與無(wú)符號(hào)數(shù)的運(yùn)算。 帶符號(hào)數(shù)用帶符號(hào)數(shù)用補(bǔ)碼表示。補(bǔ)碼表示。 同時(shí)同時(shí)80868088也提供了各種校正操作,故可也提供了各種校正操作,故可以進(jìn)行十進(jìn)制算術(shù)運(yùn)算。以進(jìn)行十進(jìn)制算術(shù)運(yùn)算。 45參與加、減運(yùn)算的操作數(shù)可如圖所示。參與加、減運(yùn)算的操作數(shù)可如圖所示。 461、加法指令、加法指令1) 不帶進(jìn)

32、位的加法不帶進(jìn)位的加法格式:格式:ADD OPRD1, OPRD2功能:功能:(OPRD1) + (OPRD2)OPRD1 結(jié)果影響標(biāo)志位結(jié)果影響標(biāo)志位ADD BX+DI, 2000H;錯(cuò)錯(cuò) ADD BX+DI, 2000H;存儲(chǔ)器與立即數(shù)相加存儲(chǔ)器與立即數(shù)相加 ADD DX, 50HBX+SI;通用寄存器與存通用寄存器與存 儲(chǔ)單元內(nèi)容相加儲(chǔ)單元內(nèi)容相加 47設(shè)設(shè) BX=C588H, 執(zhí)行執(zhí)行 ADD BH, BL后后? 11000101+10001000 101001101 CF=1, OF=1, ZF=0, SF=0, PF=1, AF=0MOV AL, 49HADD AL, 0D7H 0

33、1001001+11010111 100100000結(jié)果:結(jié)果:CF=1, OF=0, ZF=0, SF=0, PF=0, AF=1482) 帶進(jìn)位的加法帶進(jìn)位的加法格式:格式:ADC OPRD1, OPRD2功能:功能:(OPRD1) + (OPRD2)+CFOPRD1 結(jié)果影響標(biāo)志位結(jié)果影響標(biāo)志位該指令主要用于多字節(jié)數(shù)相加該指令主要用于多字節(jié)數(shù)相加49例:兩個(gè)四字節(jié)無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別放在數(shù)據(jù)段例:兩個(gè)四字節(jié)無(wú)符號(hào)數(shù)相加,這兩個(gè)數(shù)分別放在數(shù)據(jù)段以以2000H和和3000H開(kāi)始的存儲(chǔ)單元內(nèi),高位在高地址,低開(kāi)始的存儲(chǔ)單元內(nèi),高位在高地址,低位在低地址,要求運(yùn)算結(jié)果放在位在低地址,要求運(yùn)

34、算結(jié)果放在2000H開(kāi)始的單元內(nèi)。開(kāi)始的單元內(nèi)。40H79H24H30H2000H2001H2002H2003H40HB9HA4H30H3000H3001H3002H3003HCLCMOV SI, 2000HSIMOV AX, SI ADD AX, 3000HMOV SI, AXMOV AX, SI+2ADC AX, 3000H2MOV SI+2, AX503) 增量指令增量指令格式:格式:INC OPRD功能:功能:(OPRD) +1OPRD不影響不影響CF, 影響影響AF, OF, PF, SF和和ZFINC ALINC BXMOV AL, 0FFH; ZF=1512、 減法指令減法指令1

35、) 不帶借位的減法不帶借位的減法格式:格式:SUB OPRD1, OPRD2功能:功能: (OPRD1) ( OPRD2) OPRD1 結(jié)果影響標(biāo)志位結(jié)果影響標(biāo)志位SUB BX+DI, 2000H;錯(cuò)錯(cuò)SUB BX, DX; 通用寄存器之間通用寄存器之間 SUB AL, BX+SI; 累加器和累加器和存儲(chǔ)器之間存儲(chǔ)器之間 52MOV CX, 5049HSUB CX, 0E2D7H 5 0 4 9-E 2 D7 6 D 7 2結(jié)果:結(jié)果:CF=1, OF=0, ZF=0, SF=0, PF=1, AF=0532) 帶借位的減法帶借位的減法格式:格式:SBB OPRD1, OPRD2功能:功能:

36、(OPRD1)(OPRD2)CFOPRD1 結(jié)果影響標(biāo)志位結(jié)果影響標(biāo)志位LEA BX, BUFFSUB AL, BXSBB AH, BX+1該指令主要用于多字節(jié)數(shù)相減該指令主要用于多字節(jié)數(shù)相減543) 減量指令減量指令格式:格式:DEC OPRD功能:功能:(OPRD) - 1OPRD不影響不影響CF, 影響影響AF, OF, PF, SF和和ZFMOV CX, 1 DEC CX; ZF=1554) 求補(bǔ)指令求補(bǔ)指令格式:格式:NEG OPRD; 對(duì)操作數(shù)取補(bǔ)碼后送回對(duì)操作數(shù)取補(bǔ)碼后送回功能:功能:0 (OPRD) OPRDNEG ALNEG COUNT指令影響標(biāo)志位指令影響標(biāo)志位AF,CF,

37、OF,PF,SF和和ZF, 此指令執(zhí)行此指令執(zhí)行時(shí)時(shí), 只有當(dāng)操作數(shù)為只有當(dāng)操作數(shù)為0時(shí)時(shí), CF為為0, 否則否則CF總為總為1。若操作數(shù)為若操作數(shù)為80H或或8000H,執(zhí)行求補(bǔ)指令后,結(jié)果執(zhí)行求補(bǔ)指令后,結(jié)果沒(méi)有變化,但沒(méi)有變化,但OF置置1。565) 比較指令比較指令格式:格式:CMP OPRD1, OPRD2 功能:功能:(OPRD1) - (OPRD2) 不送回結(jié)果,只影響標(biāo)志位不送回結(jié)果,只影響標(biāo)志位 CMP AX, 2000H; 將將AX內(nèi)容與內(nèi)容與2000H相比較相比較CMP AX, BX+DI+100; 將將AX內(nèi)容與存儲(chǔ)單元內(nèi)容與存儲(chǔ)單元的值相比較的值相比較比較結(jié)果影響標(biāo)

38、志位比較結(jié)果影響標(biāo)志位AF,CF,OF,PF,SF和和ZF。57 比較指令主要用于比較兩個(gè)數(shù)之間的關(guān)系比較指令主要用于比較兩個(gè)數(shù)之間的關(guān)系 若兩者相等若兩者相等,相減以后結(jié)果為零,相減以后結(jié)果為零,ZFZF標(biāo)志為標(biāo)志為1 1,否則為否則為0 0。 大小的比較大小的比較( 假設(shè)假設(shè)CMP AX,BX ) 對(duì)無(wú)符號(hào)數(shù),對(duì)無(wú)符號(hào)數(shù),若結(jié)果沒(méi)有產(chǎn)生借位若結(jié)果沒(méi)有產(chǎn)生借位(CF=0),則則AXBX;若產(chǎn)生了借位(若產(chǎn)生了借位(CF1),),則則AXBX。 對(duì)帶符號(hào)數(shù),對(duì)帶符號(hào)數(shù),則可根據(jù)則可根據(jù)OF與與SF異或運(yùn)算的結(jié)果來(lái)異或運(yùn)算的結(jié)果來(lái)判斷,結(jié)果為判斷,結(jié)果為1,則,則AXBX,結(jié)果為結(jié)果為0,則,則

39、AXBX583、乘法指令、乘法指令約定:約定: 兩個(gè)兩個(gè)8位數(shù)相乘,有一個(gè)乘數(shù)在位數(shù)相乘,有一個(gè)乘數(shù)在AL中,另一個(gè)中,另一個(gè)乘數(shù)在寄存器或內(nèi)存中,乘積在乘數(shù)在寄存器或內(nèi)存中,乘積在AX中;中; 兩個(gè)兩個(gè)16位數(shù)相乘,有一個(gè)乘數(shù)在位數(shù)相乘,有一個(gè)乘數(shù)在AX中,另一個(gè)中,另一個(gè)乘數(shù)在寄存器或內(nèi)存中,乘積的乘數(shù)在寄存器或內(nèi)存中,乘積的高高16位在位在DX中,中,低低16位在位在AX中。中。1) 乘法有乘法有有符號(hào)數(shù)有符號(hào)數(shù)和和無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)兩套指令兩套指令8位數(shù)位數(shù)8位數(shù)位數(shù) 16位數(shù)位數(shù)16位數(shù)位數(shù)16位數(shù)位數(shù) 32位數(shù)位數(shù)59 無(wú)符號(hào)數(shù)乘法指令無(wú)符號(hào)數(shù)乘法指令格式:格式:MUL OPRD;

40、不出現(xiàn)不出現(xiàn) AL 或或 AX功能:功能:AL/AXOPRD AX / DX, AXMUL BL; AL BL AXMUL CX; AX CX DX(高位高位) , AX(低位低位)MUL BYTE PTR DI; AL ? AXMUL WORD PTR SI; AX ? ?602) 有符號(hào)數(shù)乘法指令有符號(hào)數(shù)乘法指令格式:格式:IMUL OPRD; 不出現(xiàn)不出現(xiàn) AL 或或 AXIMUL BL; AL BL AXIMUL CX; AX CX DX(高位高位) , AX(低位低位)IMUL BYTE PTR DI; 功能上與功能上與MUL相似相似, 要求兩個(gè)乘數(shù)必須為有符號(hào)數(shù)要求兩個(gè)乘數(shù)必須為有

41、符號(hào)數(shù)61乘法運(yùn)算時(shí),結(jié)果影響乘法運(yùn)算時(shí),結(jié)果影響CF和和OF,AF, PF, SF, ZF標(biāo)標(biāo)志位無(wú)意義。志位無(wú)意義。對(duì)對(duì)MUL指令指令:當(dāng)乘積的高半部分不為當(dāng)乘積的高半部分不為0,CF=1, OF=1;否則,否則,CF=0, OF=0 。對(duì)對(duì)IMUL指令:指令:當(dāng)乘積的高半部分是低半部分最高位的擴(kuò)展,當(dāng)乘積的高半部分是低半部分最高位的擴(kuò)展,乘乘積的高半部分每位與低半部分最高位相同時(shí):積的高半部分每位與低半部分最高位相同時(shí):CF=0, OF=0;否則,否則,CF=1, OF=1 。CF=1, OF=1表示高半部表示高半部分包含有結(jié)果的有效數(shù)分包含有結(jié)果的有效數(shù)62例例:MOV AL, 0FB

42、HMOV BH, 02HIMUL BH結(jié)果:結(jié)果:AX=0FFF6H, 即即-10, CF=0, OF=0MOV AL, 0FBHMOV BH, 02HMUL BH結(jié)果:結(jié)果:AX=01F6H, 即即502, CF=1, OF=1634、除法指令、除法指令約定:約定:除數(shù)必須為被除數(shù)的一半字長(zhǎng)除數(shù)必須為被除數(shù)的一半字長(zhǎng) 被除數(shù)為被除數(shù)為16位,放在位,放在AX中,除數(shù)為中,除數(shù)為8位,在寄位,在寄存器或內(nèi)存中,存器或內(nèi)存中, 8位商在位商在AL中中, 8位余數(shù)位余數(shù)AH中中; 被除數(shù)為被除數(shù)為32位,放在位,放在DX(高位高位), AX(低位低位)中,除中,除數(shù)為數(shù)為16位,在寄存器或內(nèi)存中,

43、位,在寄存器或內(nèi)存中, 16位商在位商在AX中中, 16位余數(shù)位余數(shù)DX中中。1) 除法有除法有有符號(hào)數(shù)有符號(hào)數(shù)和和無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)兩套指令兩套指令16位數(shù)位數(shù)8位數(shù)位數(shù) 8位數(shù)位數(shù)32位數(shù)位數(shù) 16位數(shù)位數(shù) 16位數(shù)位數(shù)641)無(wú)符號(hào)數(shù)除法指令)無(wú)符號(hào)數(shù)除法指令格式:格式:DIV OPRD; 不出現(xiàn)不出現(xiàn) AX 或或 DX AX功能:功能:DX,AX/AX OPRD AX/AL,DX/AHDIV BL; AXBL AL(商商) , AH(余數(shù)余數(shù))DIV CX; ? CXAX(商商) , DX(余數(shù)余數(shù))DIV BYTE PTR DI; AX? AL(商商) AH(余余數(shù)數(shù))652) 有符號(hào)

44、數(shù)乘法指令有符號(hào)數(shù)乘法指令I(lǐng)DIV OPRD; 不出現(xiàn)不出現(xiàn) AX 或或 DX AX功能上與功能上與DIV相似相似, 要求被除數(shù),除數(shù)必須為有符要求被除數(shù),除數(shù)必須為有符號(hào)數(shù)。號(hào)數(shù)。IDIV BL; AXBL AL(商商) , AH(余數(shù)余數(shù))66注意注意: 除法運(yùn)算后,所有的標(biāo)志位都是不確定的,沒(méi)除法運(yùn)算后,所有的標(biāo)志位都是不確定的,沒(méi)有意義;有意義; 用用IDIV指令時(shí),如果是雙字除以一個(gè)字,則商指令時(shí),如果是雙字除以一個(gè)字,則商的范圍為的范圍為-3276832767,如果是一個(gè)字除以一,如果是一個(gè)字除以一個(gè)字節(jié),則商的范圍為個(gè)字節(jié),則商的范圍為-128127。如果超出這。如果超出這個(gè)范圍

45、,會(huì)作為除數(shù)為個(gè)范圍,會(huì)作為除數(shù)為0來(lái)處理,產(chǎn)生來(lái)處理,產(chǎn)生0號(hào)中斷;號(hào)中斷; 8086系統(tǒng)規(guī)定余數(shù)的符號(hào)和被除數(shù)相同;系統(tǒng)規(guī)定余數(shù)的符號(hào)和被除數(shù)相同;1) 當(dāng)當(dāng)8位數(shù)除以位數(shù)除以8位數(shù),位數(shù),16位數(shù)除以位數(shù)除以16位數(shù)時(shí),必位數(shù)時(shí),必須對(duì)被除數(shù)進(jìn)行擴(kuò)展。須對(duì)被除數(shù)進(jìn)行擴(kuò)展。67將字節(jié)擴(kuò)展成字的指令:將字節(jié)擴(kuò)展成字的指令:CBW將將AL中的符號(hào)位擴(kuò)展到中的符號(hào)位擴(kuò)展到AH中。當(dāng)中。當(dāng)AL=80H時(shí),時(shí),AH=0FFH。當(dāng)遇到兩個(gè)字節(jié)或字相除時(shí),要預(yù)先執(zhí)行當(dāng)遇到兩個(gè)字節(jié)或字相除時(shí),要預(yù)先執(zhí)行CBW指指令或令或CWD指令,擴(kuò)展被除數(shù),否則不能正確執(zhí)行指令,擴(kuò)展被除數(shù),否則不能正確執(zhí)行除法操作。除

46、法操作。將將AX中的符號(hào)位擴(kuò)展到中的符號(hào)位擴(kuò)展到DX中。當(dāng)中。當(dāng)AX=8000H時(shí)時(shí),DX=0FFFFH。將字?jǐn)U展成雙字的指令:將字?jǐn)U展成雙字的指令:CWD685、十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令壓縮壓縮BCD碼碼: 一個(gè)字節(jié)中有兩一個(gè)字節(jié)中有兩位位BCD碼碼 0100 0101非壓縮非壓縮BCD碼:一個(gè)字節(jié)只用碼:一個(gè)字節(jié)只用低低4位表示一位位表示一位BCD碼,高碼,高4位位為為0。 0000 0100 0000 0101BCD碼:用二進(jìn)制形式表示的十進(jìn)制碼。每一位十進(jìn)制碼:用二進(jìn)制形式表示的十進(jìn)制碼。每一位十進(jìn)制數(shù)用數(shù)用4位二進(jìn)制表示,運(yùn)算規(guī)則是逢十進(jìn)一。位二進(jìn)制表示,運(yùn)算規(guī)則是逢十進(jìn)一。十進(jìn)

47、制十進(jìn)制BCD碼碼00000100012001030011401005010160110701118100091001BCD碼運(yùn)算時(shí),先用一般的二進(jìn)制碼運(yùn)算時(shí),先用一般的二進(jìn)制運(yùn)算,然后再進(jìn)行運(yùn)算,然后再進(jìn)行BCD碼碼調(diào)整調(diào)整。69BCD碼加法十進(jìn)制碼加法十進(jìn)制調(diào)整調(diào)整指令指令1) 非壓縮的非壓縮的BCD碼加法調(diào)整指令碼加法調(diào)整指令 AAA兩個(gè)非壓縮的兩個(gè)非壓縮的BCD碼相加,結(jié)果在碼相加,結(jié)果在AL中,執(zhí)行該中,執(zhí)行該指令后將結(jié)果調(diào)整為十進(jìn)制,放在指令后將結(jié)果調(diào)整為十進(jìn)制,放在AX中。中。MOV AL, 7HADD AL, 5HAAA; AL: 0CH; AX: 0102H CF=AF=1調(diào)

48、整原則:調(diào)整原則:在調(diào)整前若在調(diào)整前若AL低半部包含的數(shù)值大于低半部包含的數(shù)值大于9或或AF=1, 則則AAA完成下列操作:完成下列操作: AL加加6,AF和和CF置置1,AL的高的高4位清零位清零。707+5=12 用非壓縮的用非壓縮的BCD碼表示運(yùn)算過(guò)程:碼表示運(yùn)算過(guò)程:0000 01110000 0101 0000 1100BCD碼逢十進(jìn)一,碼逢十進(jìn)一,16進(jìn)制逢進(jìn)制逢16進(jìn)進(jìn)1,因?yàn)榈停驗(yàn)榈?位大位大于于9,所以在個(gè)位上加,所以在個(gè)位上加6,使其產(chǎn)生進(jìn)位,同時(shí),使其產(chǎn)生進(jìn)位,同時(shí)AF=1,CF=1。0000 11000000 0110 0001 001016進(jìn)制加法進(jìn)制加法AAA指令

49、調(diào)整為指令調(diào)整為10進(jìn)制結(jié)果進(jìn)制結(jié)果712) 壓縮壓縮BCD碼加法調(diào)整指令碼加法調(diào)整指令 DAA兩個(gè)壓縮的兩個(gè)壓縮的BCD碼相加,結(jié)果在碼相加,結(jié)果在AL中,執(zhí)行該指中,執(zhí)行該指令后將結(jié)果調(diào)整為十進(jìn)制,放在令后將結(jié)果調(diào)整為十進(jìn)制,放在AL中。中。MOV AL, 56HADD AL, 47HDAA; AL: 9DH; AL: 03H CF=1調(diào)整原則:調(diào)整原則:如果如果AF=1或或AL的低的低4位大于位大于9, 則則AL加加06H并置并置AF=1如果如果CF=1或或AL的高的高4位大于位大于9, 則則AL加加60H并置并置CF=1。1. 如果滿足上述如果滿足上述2條條, 則則AL加加66H, 并

50、置并置AF=1,CF=1。72MOV AX, 1234HMOV BX, 5678HADD AL, BLDAAMOV CL, ALMOV AL, AHADC AL, BHDAAMOV AH, ALMOV AL, CL; AL : ACH; AL : 12H CF=1; CL : 12H; AL : 12H; AL : 69H; AL : 69H CF=0; AX :6912H CF=073BCD碼減法調(diào)整指令與加法調(diào)整指令類似,只是碼減法調(diào)整指令與加法調(diào)整指令類似,只是分別將加分別將加06H, 60H, 66H改為改為減減 06H, 60H, 66H。AAS: 對(duì)非壓縮的對(duì)非壓縮的BCD碼減法調(diào)

51、整碼減法調(diào)整DAS: 對(duì)壓縮的對(duì)壓縮的BCD碼減法調(diào)整碼減法調(diào)整注意:注意:調(diào)整指令使用時(shí),必須緊跟在相對(duì)應(yīng)的調(diào)整指令使用時(shí),必須緊跟在相對(duì)應(yīng)的加減法指令后進(jìn)行。加減法指令后進(jìn)行。74BCD碼乘法十進(jìn)制調(diào)整指令碼乘法十進(jìn)制調(diào)整指令 AAM1) BCD碼均為無(wú)符號(hào)數(shù),故只有用碼均為無(wú)符號(hào)數(shù),故只有用MUL乘法指令乘法指令才能調(diào)整;才能調(diào)整;2) BCD碼乘法調(diào)整指令只能對(duì)非壓縮的碼乘法調(diào)整指令只能對(duì)非壓縮的BCD碼相碼相乘結(jié)果進(jìn)行調(diào)整;乘結(jié)果進(jìn)行調(diào)整;MOV AL, 05HMOV BH, 06HMUL BHAAM; AX : 001EH ; AX : 0300H 751) BCD碼均為無(wú)符號(hào)數(shù),

52、故只有用碼均為無(wú)符號(hào)數(shù),故只有用DIV除法指令除法指令才能調(diào)整,并且在兩個(gè)數(shù)相除前進(jìn)行調(diào)整;才能調(diào)整,并且在兩個(gè)數(shù)相除前進(jìn)行調(diào)整;2) BCD碼除法調(diào)整指令只能對(duì)非壓縮的碼除法調(diào)整指令只能對(duì)非壓縮的BCD碼相碼相乘結(jié)果進(jìn)行調(diào)整;乘結(jié)果進(jìn)行調(diào)整;MOV AX, 0300HMOV BL, 05HAADDIV BL; AX : 001EH ; AX : 0006H BCD碼除法十進(jìn)制調(diào)整指令碼除法十進(jìn)制調(diào)整指令 AAD76三、邏輯運(yùn)算指令三、邏輯運(yùn)算指令1) NOT格式:格式:NOT OPRD 功能:功能:OPRD按位取反按位取反設(shè):設(shè):AX=73H DX= 85HMOV AX, DXNOT AX0

53、000 0000 1000 01011111 1111 0111 1010 對(duì)標(biāo)志位沒(méi)有影響對(duì)標(biāo)志位沒(méi)有影響772) AND、 OR、XOR格式:格式:AND(OR/XOR) OPRD1, OPRD2功能功能:OPRD1 AND(OR/XOR) OPRD2 OPRD1 這三條指令執(zhí)行后,這三條指令執(zhí)行后,CF=0, OF=0, SF, PF, ZF發(fā)生發(fā)生變化。變化。MOV AX, 2050HAND AX, 0FFH;取取AX的低的低8位位 AX0050H PF=1, SF=0, ZF=0OR AL, 0FH; 結(jié)果?結(jié)果? AL=5FH78AL: 00001111XOR AL, 0FFH00

54、00 11111111 11111111 0000XOR AL, 00H0000 11110000 00000000 1111與與0異或,狀態(tài)不變;與異或,狀態(tài)不變;與1異或,狀態(tài)相反。異或,狀態(tài)相反。對(duì)某些位置對(duì)某些位置1用用OR;對(duì)某些位清零用對(duì)某些位清零用AND;對(duì)某些位取反用對(duì)某些位取反用XOR。793) TEST格式:格式:TEST OPRD1, OPRD2功能:功能:(OPRD1) AND (OPRD2) 結(jié)果影響標(biāo)志結(jié)果影響標(biāo)志TEST CX, 0FFFFHJZ P1TEST AL, 01HJNZ AGAIN; 檢驗(yàn)檢驗(yàn)CX是否為零是否為零; 若標(biāo)志若標(biāo)志ZF=1即即CX為為0,

55、轉(zhuǎn)向,轉(zhuǎn)向 P1; 檢驗(yàn)檢驗(yàn)AL最低位是否為零最低位是否為零; 不為零則轉(zhuǎn)移不為零則轉(zhuǎn)移804) 移位指令移位指令非循環(huán)移位指令非循環(huán)移位指令(3條條)格式:格式:SAL OPRD, M: 功能:功能:OPRD算術(shù)左移算術(shù)左移M位位格式:格式:SHL OPRD, M: 功能:功能:OPRD邏輯左移邏輯左移M位位0CF左移一位進(jìn)左移一位進(jìn)CF,右邊補(bǔ)右邊補(bǔ)0,相當(dāng)于乘相當(dāng)于乘2。影響標(biāo)志影響標(biāo)志若移位后最高位與若移位后最高位與CF不同,則不同,則OF=1,表示移位前表示移位前后數(shù)據(jù)變號(hào)。后數(shù)據(jù)變號(hào)。若移位位數(shù)大于若移位位數(shù)大于1,所移的位數(shù)用,所移的位數(shù)用CL存放。存放。81MOV AL, 02

56、HSAL AL, 1;AL: 0000 0010;AL: 0000 0100MOV AL, 02HSAL AL, 4 ;錯(cuò)錯(cuò)MOV AL, 02HMOV CL, 4SHL AL, CL;AL: 0000 0010;AL: 0010 000082格式:格式:SAR OPRD, M: 功能:功能:OPRD算術(shù)右移算術(shù)右移M位位CF最低位進(jìn)最低位進(jìn)CF, 左邊重復(fù)最高位左邊重復(fù)最高位, 即操作數(shù)符號(hào)不變。即操作數(shù)符號(hào)不變。一般用于有符號(hào)數(shù)的右移,符號(hào)擴(kuò)展。一般用于有符號(hào)數(shù)的右移,符號(hào)擴(kuò)展。若移位位數(shù)大于若移位位數(shù)大于1,所移的位數(shù)用,所移的位數(shù)用CL存放。存放。MOV AL, -4SAR AL, 1

57、;AL: 1111 1100;AL: 1111 1110-283格式:格式:SHR OPRD, M: 功能:功能:OPRD邏輯右移邏輯右移M位位CF最低位進(jìn)最低位進(jìn)CF, 左邊補(bǔ)左邊補(bǔ)0。一般用于無(wú)符號(hào)數(shù)的右移。一般用于無(wú)符號(hào)數(shù)的右移。若移位位數(shù)大于若移位位數(shù)大于1,所移的位數(shù)用,所移的位數(shù)用CL存放。存放。MOV AL, 8SHR AL, 1;AL: 0000 1000;AL: 0000 01004084MOV AL, 48HMOV AH, AL AND AL, 0FH MOV CL, 4SHR AH, CLMOV NUM, AX;AL: 0100 1000;AL: 0000 1000;AH

58、: 0000 0100; NUM: 0000 1000 NUM+1: 0000 0100該程序的功能:完成了將該程序的功能:完成了將AL中的壓縮中的壓縮BCD碼碼變成非壓縮變成非壓縮BCD碼存放在碼存放在NUM開(kāi)始的存區(qū)。開(kāi)始的存區(qū)。85試分析下面程序完成什么任務(wù)?試分析下面程序完成什么任務(wù)? 設(shè)(設(shè)(DL)=12H,(BL)=34HMOV CL, 4SHL DL, CLSHR BL, CLOR DL, BL該程序的功能:完成了將原該程序的功能:完成了將原DL中的低中的低4位與原位與原BL中的高中的高4位拼起來(lái)放在位拼起來(lái)放在DL中中 。 此時(shí),(此時(shí),(DL) 23H 86循環(huán)移位指令循環(huán)移

59、位指令(4條條)格式:格式:ROL OPRD,M : 功能:不帶進(jìn)位循環(huán)左移功能:不帶進(jìn)位循環(huán)左移CF若移位后最高位與若移位后最高位與CF不同,則不同,則OF=1,表示移位前表示移位前后數(shù)據(jù)變號(hào)。后數(shù)據(jù)變號(hào)。若移位位數(shù)大于若移位位數(shù)大于1,所移的位數(shù)用,所移的位數(shù)用CL存放。存放。87格式:格式:ROR OPRD,M : 功能:不帶進(jìn)位循環(huán)右移功能:不帶進(jìn)位循環(huán)右移CF若移位位數(shù)大于若移位位數(shù)大于1,所移的位數(shù)用,所移的位數(shù)用CL存放。存放。88格式:格式:RCL OPRD,M : 功能:帶進(jìn)位循環(huán)左移功能:帶進(jìn)位循環(huán)左移CF可實(shí)現(xiàn)多字節(jié)的移位,將可實(shí)現(xiàn)多字節(jié)的移位,將DX, AX左移左移1位

60、位SAL AX, 1RCL DX, 1CFAX0CFDXCF89格式:格式:RCR OPRD,M : 功能:帶進(jìn)位循環(huán)右移功能:帶進(jìn)位循環(huán)右移CF同樣可實(shí)現(xiàn)多字節(jié)的移位。同樣可實(shí)現(xiàn)多字節(jié)的移位。90四、程序控制指令四、程序控制指令所有的程序控制轉(zhuǎn)移類指令均不影響標(biāo)志位所有的程序控制轉(zhuǎn)移類指令均不影響標(biāo)志位JMP LL64KB內(nèi)內(nèi)段內(nèi)轉(zhuǎn)移:段內(nèi)轉(zhuǎn)移:目標(biāo)指令與目標(biāo)指令與轉(zhuǎn)移指令在轉(zhuǎn)移指令在同一代碼段同一代碼段中中,只改變只改變IP的值的值LL:新新CS :IP分為兩種情況:分為兩種情況:段內(nèi)轉(zhuǎn)移和段間段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移轉(zhuǎn)移CS:IP91JMP LL可以超過(guò)可以超過(guò)64KB段間轉(zhuǎn)移,目標(biāo)指令段間轉(zhuǎn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論