匯編語言指令系統(tǒng)和尋址方式_第1頁
匯編語言指令系統(tǒng)和尋址方式_第2頁
匯編語言指令系統(tǒng)和尋址方式_第3頁
匯編語言指令系統(tǒng)和尋址方式_第4頁
匯編語言指令系統(tǒng)和尋址方式_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1 指令系統(tǒng)指令系統(tǒng) 一組指令的集合一組指令的集合第第3章章 80 x86的指令系統(tǒng)和尋址方式的指令系統(tǒng)和尋址方式 操作碼操作碼 操作數(shù)操作數(shù) . 操作數(shù)操作數(shù)指令指令 尋址方式尋址方式 與數(shù)據(jù)有關(guān)的尋址方式與數(shù)據(jù)有關(guān)的尋址方式 與轉(zhuǎn)移地址有關(guān)的尋址方式與轉(zhuǎn)移地址有關(guān)的尋址方式21. 8086的尋址方式的尋址方式 與數(shù)據(jù)有關(guān)的尋址方式與數(shù)據(jù)有關(guān)的尋址方式:以以 MOV 指令為例指令為例 立即尋址立即尋址 MOV AX , 3069H寄存器尋址寄存器尋址 MOV AL , BH直接尋址直接尋址 MOV AX , 2000H 寄存器間接尋址寄存器間接尋址 MOV AX , BX 寄存器相對(duì)尋址寄存

2、器相對(duì)尋址 MOV AX , COUNT SI 基址變址尋址基址變址尋址 MOV AX , BP DI 相對(duì)基址變址尋址相對(duì)基址變址尋址 MOV AX , MASK BX SI 存儲(chǔ)器尋址存儲(chǔ)器尋址3(1) 立即尋址方式立即尋址方式* 操作數(shù)在指令中給出操作數(shù)在指令中給出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A* 只能用于只能用于 SRC 字段字段 MOV 40H, AL * SRC 和和 DST 的字長一致的字長一致 MOV AH, 3064H 4(2) 寄存器尋址方式寄存器尋址方式* 操作數(shù)在指定的寄存器中操作數(shù)在指定的寄存器中 MOV AX, BX

3、 MOV AL, BH MOV AX, 3064H* 字節(jié)寄存器只有字節(jié)寄存器只有 AH AL BH BL CH CL DH DL* SRC 和和 DST 的字長一致的字長一致 MOV AH, BX * CS 不能用不能用 MOV 指令改變指令改變 MOV CS, AX 5(3) 直接尋址方式直接尋址方式* 有效地址有效地址EA由指令直接給出由指令直接給出 例例:MOV AX, 2000H EA=2000H, 假設(shè)假設(shè)(DS)=3000H, 那么那么PA=32000H* 隱含的段為數(shù)據(jù)段隱含的段為數(shù)據(jù)段 DS* 可使用段跨越前綴可使用段跨越前綴 MOV AX, ES: 2000H* 操作數(shù)地址

4、可由變量(符號(hào)地址)表示操作數(shù)地址可由變量(符號(hào)地址)表示, 但要注意但要注意VALUE DB 10 變量的屬性變量的屬性MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE 5030 32000AH AL3050(AX) = 3050H6(4) 寄存器間接尋址寄存器間接尋址* EA 在基址寄存器在基址寄存器(BX/BP) 或變址寄存器或變址寄存器(SI/DI) 中中 MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS

5、) + (BP) * 不允許使用不允許使用AX、CX、DX 存放存放 EA MOV AX, CX * SRC 和和 DST 的字長一致的字長一致 MOV DL, BX ; BX指示一個(gè)字節(jié)單元指示一個(gè)字節(jié)單元 MOV DX, BX ; BX指示一個(gè)字單元指示一個(gè)字單元 * 適于數(shù)組、字符串、表格的處理適于數(shù)組、字符串、表格的處理7 有效地址有效地址 =(BX)(BP) 8位位(SI) 16位位(DI)+位移量位移量(5) 寄存器相對(duì)尋址方式寄存器相對(duì)尋址方式* 指令格式指令格式: MOV AX, COUNTSI MOV AX, COUNTSI 或或 MOV AX, COUNT+SI MOV A

6、X, COUNT+SI 假設(shè)假設(shè) (DS)=3000H, (SI)=2000H, COUNT=3000H(DS)=3000H, (SI)=2000H, COUNT=3000H, 則則: PA = 35000HPA = 35000H 假設(shè)假設(shè)(35000H)=1234H, (35000H)=1234H, 那那么么 (AX)=1234H(AX)=1234H* 適于數(shù)組、字符串、表格的處理適于數(shù)組、字符串、表格的處理8(6) 基址變址尋址方式基址變址尋址方式*指令格式:指令格式: MOV AX, BX DIMOV AX, BX DI MOV AX, BX+DI MOV AX, BX+DI MOV A

7、X, ES:BX SI MOV AX, ES:BX SI* 適于數(shù)組、字符串、表格的處理適于數(shù)組、字符串、表格的處理* 必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合 MOV AX, BX BP MOV AX, SI DI 有效地址有效地址 =(BX) (SI)(BP) (DI)+9( 7 ) 相對(duì)基址變址尋址方式相對(duì)基址變址尋址方式 MOV AX, MASK BX SI 或或 MOV AX, MASK BX+SI 或或 MOV AX, MASK+BX+SI 有效地址有效地址 =(BX) (SI) 8位位(BP) (DI) 16位位+位移量位移量1080

8、x86 新增的尋址方式新增的尋址方式 EA= = (基址寄存器基址寄存器) + (變址寄存器變址寄存器) 比例因子比例因子 + 位移量位移量( 1 ) 比例變址尋址方式比例變址尋址方式 例:例:MOV EAX, COUNT ESI 4 11(2) 基址比例變址尋址方式基址比例變址尋址方式 例:例:MOV ECX, EAX EDI 4 (3) 相對(duì)基址比例變址尋址方式相對(duì)基址比例變址尋址方式 例:例:MOV EAX, TABLE EBP EDI 4 16 16位和位和3232位尋址的差異位尋址的差異地址成分地址成分 1616位尋址位尋址 3232位尋址位尋址基址寄存器基址寄存器 BXBX、BP

9、BP 任何任何3232位通用寄存器位通用寄存器變址寄存器變址寄存器 SISI、DI DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 1 11 1、2 2、4 4、8 8 12與轉(zhuǎn)移地址有關(guān)的尋址方式:與轉(zhuǎn)移地址有關(guān)的尋址方式: 段內(nèi)尋址段內(nèi)尋址 段內(nèi)直接尋址段內(nèi)直接尋址 JMP NEAR PTR NEXT 段內(nèi)間接尋址段內(nèi)間接尋址 JMP TABLE BX 段間尋址段間尋址 段間直接尋址段間直接尋址 JMP FAR PTR NEXT 段間間接尋址段間間接尋址 JMP DWORD PTR BX 用來確定轉(zhuǎn)移指令及轉(zhuǎn)子指令的轉(zhuǎn)向地址用來確定轉(zhuǎn)移指令及轉(zhuǎn)子指令

10、的轉(zhuǎn)向地址。13 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)指令算術(shù)指令 邏輯指令邏輯指令 串處理指令串處理指令 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令 處理機(jī)控制與雜項(xiàng)操作指令處理機(jī)控制與雜項(xiàng)操作指令2. 8086的指令系統(tǒng)的指令系統(tǒng)14數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令: 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令 MOV、PUSH、POP、XCHG 累加器專用傳送指令累加器專用傳送指令 IN、OUT、XLAT 地址傳送指令地址傳送指令 LEA、LDS、LES 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令 LAHF、SAHF、PUSHF、POPF 類型轉(zhuǎn)換指令類型轉(zhuǎn)換指令 CBW、CWD 15傳送指令:傳送指令: MOV DST, SRC執(zhí)行

11、操作:執(zhí)行操作: (DST) (SRC)注意注意: * DST、SRC 不能同時(shí)為段寄存器不能同時(shí)為段寄存器 MOV DS, ES * 立即數(shù)不能直接送段寄存器立即數(shù)不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即數(shù)和不能是立即數(shù)和CS* DST、SRC 不能同時(shí)為存儲(chǔ)器尋址不能同時(shí)為存儲(chǔ)器尋址* 不影響標(biāo)志位不影響標(biāo)志位 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV AX, DSEGMOV DS, AX16 進(jìn)棧指令:進(jìn)棧指令: PUSH SRC 執(zhí)行操作:執(zhí)行操作: (SP) (SP) 2 ( (SP)+1, (SP) ) (SRC) 出棧指令:出棧指令: POP DST

12、執(zhí)行操作:執(zhí)行操作: (DST) ( (SP)+1, (SP) ) (SP) (SP) + 2堆棧:堆棧:先進(jìn)后出先進(jìn)后出的存儲(chǔ)區(qū),段地址存放在的存儲(chǔ)區(qū),段地址存放在SSSS中,中, SP在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改在任何時(shí)候都指向棧頂,進(jìn)出棧后自動(dòng)修改SPSP。 注意注意: * 堆棧操作必須以字為單位。堆棧操作必須以字為單位。 * 不影響標(biāo)志位不影響標(biāo)志位 * 不能用立即尋址方式不能用立即尋址方式 PUSH 1234H * DST不能是不能是CS POP CS 17 交換指令:交換指令: XCHG OPR1, OPR2 執(zhí)行操作:執(zhí)行操作: (OPR1) (OPR2)注意注意: *

13、 不影響標(biāo)志位不影響標(biāo)志位 * 不允許使用段寄存器不允許使用段寄存器 例:例:XCHG BX, BP+SI XCHG AL, BH18 累加器專用傳送指令累加器專用傳送指令(只限使用(只限使用AX或或AL) 輸入指令輸入指令 IN (I/O CPU) 長格式:長格式: IN AL, PORT (字節(jié))(字節(jié)) IN AX, PORT (字)(字) 執(zhí)行操作:執(zhí)行操作:(AL) ( PORT ) (字節(jié))(字節(jié)) (AX) ( PORT+1, PORT )(字)(字) 短格式:短格式: IN AL, DX (字節(jié))(字節(jié)) IN AX, DX (字)(字) 執(zhí)行操作:執(zhí)行操作:(AL) ( (D

14、X) ) (字節(jié))(字節(jié)) (AX) ( (DX)+1, (DX) )(字)(字) 19輸出指令輸出指令 OUT (CPU I/O)長格式:長格式: OUT PORT, AL (字節(jié))(字節(jié)) OUT PORT, AX (字)(字)執(zhí)行操作:執(zhí)行操作:( PORT ) (AL) (字節(jié))(字節(jié)) ( PORT+1, PORT ) (AX)(字)(字)短格式:短格式: OUT DX, AL (字節(jié))(字節(jié)) OUT DX, AX (字)(字)執(zhí)行操作:執(zhí)行操作:( (DX) ) (AL) (字節(jié))(字節(jié)) ( (DX)+1, (DX) ) (AX)(字)(字)20注意注意: * 不影響標(biāo)志位不影

15、響標(biāo)志位* 前前256個(gè)端口號(hào)個(gè)端口號(hào)00HFFH可直接在指令中指定(長格式)可直接在指令中指定(長格式)* 如果如果端口號(hào)端口號(hào) 256,端口號(hào)端口號(hào) DX(短格式)(短格式)例:例: IN AX, 28H IN AX, 28H MOV DATA_WORD, AX MOV DATA_WORD, AX例:例: MOV DX, 3FCH MOV DX, 3FCH IN AX, DX IN AX, DX例:例: OUT 5, AL OUT 5, AL例:測試某狀態(tài)寄存器(端口號(hào)例:測試某狀態(tài)寄存器(端口號(hào)27H27H)的第)的第2 2位是否為位是否為1 1 IN AL, 27H IN AL, 27

16、H TEST AL, 00000100B TEST AL, 00000100B JNZ ERROR JNZ ERROR ;若第2位為1,轉(zhuǎn)ERROR處理21(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE(DS)=F000H換碼指令:換碼指令:XLAT 或或XLAT OPR執(zhí)行操作:執(zhí)行操作:(AL) ( (BX) + (AL) )例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令執(zhí)行后指令執(zhí)行后 (AL)=33H注意注意: * 不影響標(biāo)志位不影響標(biāo)

17、志位* 字節(jié)表格字節(jié)表格(長度不超過長度不超過256) 首地址首地址 (BX)* 需轉(zhuǎn)換的代碼位移量需轉(zhuǎn)換的代碼位移量 (AL)22 地址傳送指令地址傳送指令 有效地址送寄存器指令:有效地址送寄存器指令: LEA REG, SRC 執(zhí)行操作:執(zhí)行操作: (REG) SRC 指針?biāo)图拇嫫骱椭羔標(biāo)图拇嫫骱虳S指令:指令: LDS REG, SRC 執(zhí)行操作:執(zhí)行操作: (REG) (SRC) (DS) (SRC+2) 相繼二字相繼二字 寄存器、寄存器、DS 指針?biāo)图拇嫫骱椭羔標(biāo)图拇嫫骱虴S指令:指令: LES REG, SRC 執(zhí)行操作:執(zhí)行操作: (REG) (SRC) (ES) (SRC+2)

18、 相繼二字相繼二字 寄存器、寄存器、ES 23例:例:LEA BX, BX+SI+0F62H LDS SI, 10H LES DI, BX40 H00 H00 H30 H TABLE(DS):1000HMOV BX, TABLE ; (BX)=0040HMOV BX, OFFSET TABLE ; (BX)=1000HLEA BX, TABLE ; (BX)=1000HLDS BX, TABLE ; (BX)=0040H ; (DS)=3000HLES BX, TABLE ; (BX)=0040H ; (ES)=3000H注意注意: * 不影響標(biāo)志位不影響標(biāo)志位 * REG 不能是段寄存器不能

19、是段寄存器 * SRC 必須為存儲(chǔ)器尋址方式必須為存儲(chǔ)器尋址方式24 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令 標(biāo)志送標(biāo)志送AH指令:指令: LAHF 執(zhí)行操作:執(zhí)行操作: (AH) (FLAGS的低字節(jié)的低字節(jié)) AH送標(biāo)志寄存器指令:送標(biāo)志寄存器指令: SAHF 執(zhí)行操作:執(zhí)行操作: (FLAGS的低字節(jié)的低字節(jié)) (AH) 標(biāo)志進(jìn)棧指令:標(biāo)志進(jìn)棧指令: PUSHF 執(zhí)行操作:執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1, (SP) ) (FLAGS) 標(biāo)志出棧標(biāo)志出棧指令:指令: POPF 執(zhí)行操作:執(zhí)行操作: (FLAGS) ( (SP)+1, (SP) ) (SP) (SP)

20、 + 2* 影響標(biāo)志位影響標(biāo)志位25 類型轉(zhuǎn)換指令類型轉(zhuǎn)換指令 CBW AL AX 執(zhí)行操作:執(zhí)行操作: 若若(AL)的最高有效位為的最高有效位為0,則,則(AH)= 00H 若若(AL)的最高有效位為的最高有效位為1,則,則(AH)= FFH CWD AX (DX,AX) 執(zhí)行操作:若執(zhí)行操作:若(AX)的最高有效位為的最高有效位為0,則,則(DX)= 0000H 若若(AX)的最高有效位為的最高有效位為1,則,則(DX)= FFFFH 例:例:(AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H注意注意: * 無操作數(shù)指令

21、無操作數(shù)指令 * 隱含對(duì)隱含對(duì)AL 或或AX 進(jìn)行符號(hào)擴(kuò)展進(jìn)行符號(hào)擴(kuò)展 * 不影響條件標(biāo)志位不影響條件標(biāo)志位26算術(shù)指令:算術(shù)指令: 加法指令加法指令 ADD、ADC、INC 減法指令減法指令 SUB、SBB、DEC、NEG、CMP 乘法指令乘法指令 MUL、IMUL 除法指令除法指令 DIV、IDIV 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 DAA、DAS、 AAA、AAS、AAM、AAD27 加法指令加法指令 加法指令:加法指令: ADD DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (SRC) + (DST) 帶進(jìn)位加法指令:帶進(jìn)位加法指令: ADC DST, SRC 執(zhí)行操作:執(zhí)行操作:

22、(DST) (SRC) + (DST) + CF 加加1指令:指令: INC OPR 執(zhí)行操作:執(zhí)行操作: (OPR) (OPR) + 1注意注意: * 除除INC指令不影響指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。標(biāo)志外,均對(duì)條件標(biāo)志位有影響。28加法指令對(duì)加法指令對(duì)條件標(biāo)志位條件標(biāo)志位的影響的影響CF 位表示位表示 無符號(hào)數(shù)無符號(hào)數(shù) 相加的溢出。相加的溢出。OF 位表示位表示 帶符號(hào)數(shù)帶符號(hào)數(shù) 相加的溢出。相加的溢出。1 結(jié)果為負(fù)結(jié)果為負(fù)0 否則否則SF=1 結(jié)果為結(jié)果為00 否則否則ZF=1 和的最高有效位和的最高有效位 有有 向高位的進(jìn)位向高位的進(jìn)位0 否則否則CF=1 兩個(gè)操作數(shù)符

23、號(hào)相同,而結(jié)果符號(hào)與之相反兩個(gè)操作數(shù)符號(hào)相同,而結(jié)果符號(hào)與之相反0 否則否則OF=29舉例舉例: n=8 bit 帶符號(hào)數(shù)帶符號(hào)數(shù)(-128127) , 無符號(hào)數(shù)無符號(hào)數(shù)(0255) 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1帶:帶:(+4)+(+11)=+15 OF=0無:無:4+11=15 CF=0帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 帶帶: (+9)+(+124)=-123 OF=1 無無: 9+124=133 CF=

24、0帶符號(hào)數(shù)溢出帶符號(hào)數(shù)溢出無符號(hào)數(shù)溢出無符號(hào)數(shù)溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0帶:帶:(+7)+(-5)=+2 OF=0無:無:7+251=2 CF=1帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0帶:帶:(-121)+(-11)=+124 OF=1無:無:135+245=124 CF=130 減法指令減法指令減法指令:減法指令: SUB DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (DST) - (SRC

25、)帶借位減法指令:帶借位減法指令: SBB DST, SRC 執(zhí)行操作:執(zhí)行操作: (DST) (DST) - (SRC) - CF減減1指令:指令: DEC OPR 執(zhí)行操作:執(zhí)行操作: (OPR) (OPR) - 1求補(bǔ)指令:求補(bǔ)指令: NEG OPR 執(zhí)行操作:執(zhí)行操作: (OPR) - (OPR)比較指令:比較指令: CMP OPR1, OPR2 執(zhí)行操作:執(zhí)行操作: (OPR1) - (OPR2)注意注意: * 除除DEC指令不影響指令不影響 CF標(biāo)志外,均對(duì)條標(biāo)志外,均對(duì)條 件標(biāo)志位有影響。件標(biāo)志位有影響。31減法指令對(duì)條件標(biāo)志位(減法指令對(duì)條件標(biāo)志位(CF/OF/ZF/SF)的影

26、響:)的影響:CF 位表示位表示 無符號(hào)數(shù)無符號(hào)數(shù) 減法的溢出。減法的溢出。OF 位表示位表示 帶符號(hào)數(shù)帶符號(hào)數(shù) 減法的溢出。減法的溢出。1 被減數(shù)的最高有效位被減數(shù)的最高有效位 有有 向高位的借位向高位的借位0 否則否則CF=1 兩個(gè)操作數(shù)符號(hào)相反,而結(jié)果的符號(hào)與減數(shù)相同兩個(gè)操作數(shù)符號(hào)相反,而結(jié)果的符號(hào)與減數(shù)相同0 否則否則OF=1 減法轉(zhuǎn)換為加法運(yùn)算時(shí)減法轉(zhuǎn)換為加法運(yùn)算時(shí) 無無 進(jìn)位進(jìn)位0 否則否則CF=或或32例:例:x、y、z 均為雙精度數(shù),分別存放在地址為均為雙精度數(shù),分別存放在地址為X, X+2; Y, Y+2;Z, Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)

27、w x + y + 24 - z ,并用,并用W, W+2單元存放單元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADC DX, Y+2 ; x+yADC DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC DX, 0 ; x+y+24SUB AX, ZSUB AX, ZSBB DX, Z+2 ; x+y+24-zSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 結(jié)果存入結(jié)果

28、存入W, W+2W, W+2單元單元33 乘法指令乘法指令 無符號(hào)數(shù)乘法指令:無符號(hào)數(shù)乘法指令: MUL SRC 帶符號(hào)數(shù)乘法指令:帶符號(hào)數(shù)乘法指令: IMUL SRC 執(zhí)行操作:執(zhí)行操作: 字節(jié)操作數(shù)字節(jié)操作數(shù) (AX) (AL) * (SRC) 字操作數(shù)字操作數(shù) (DX, AX) (AX) * (SRC)注意注意: * AL (AX) 為隱含的乘數(shù)寄存器。為隱含的乘數(shù)寄存器。* AX (DX,AX) 為隱含的乘積寄存器。為隱含的乘積寄存器。* SRC不能為立即數(shù)。不能為立即數(shù)。* 除除CF和和OF外,對(duì)條件標(biāo)志位無定義。外,對(duì)條件標(biāo)志位無定義。34乘法指令對(duì)乘法指令對(duì) CF/OF 的影響:

29、的影響:例:例:(AX) = 16A5H,(BX) = 0611H (1) IMUL BL ; (AX) (AL) * (BL) ; A5*11 5B*11=060B F9F5 ; (AX) = 0F9F5H CF=OF=1 (2) MUL BX ; (DX, AX) (AX) * (BX) ; 16A5*0611=0089 5EF5 ; (DX)=0089H (AX)=5EF5H CF=OF=100 乘積的高一半為零乘積的高一半為零11 否則否則MUL指令指令: CF,OF =00 乘積的高一半是低一半的符號(hào)擴(kuò)展乘積的高一半是低一半的符號(hào)擴(kuò)展11 否則否則 IMUL指令指令: CF,OF =

30、35 除法指令除法指令 無符號(hào)數(shù)除法指令:無符號(hào)數(shù)除法指令: DIV SRC 帶符號(hào)數(shù)除法指令:帶符號(hào)數(shù)除法指令: IDIV SRC 執(zhí)行操作:執(zhí)行操作: 字節(jié)操作字節(jié)操作 (AL) (AX) / (SRC) 的商的商 (AH) (AX) / (SRC) 的余數(shù)的余數(shù) 字操作字操作 (AX) (DX, AX) / (SRC) 的商的商 (DX) (DX, AX) / (SRC) 的余數(shù)的余數(shù)注意注意: * AX (DX,AX) 為隱含的被除數(shù)寄存器。為隱含的被除數(shù)寄存器。 * AL (AX) 為隱含的商寄存器。為隱含的商寄存器。 * AH (DX) 為隱含的余數(shù)寄存器。為隱含的余數(shù)寄存器。 *

31、 SRC不能為立即數(shù)。不能為立即數(shù)。 * 對(duì)所有條件標(biāo)志位均無定義。對(duì)所有條件標(biāo)志位均無定義。如何判別結(jié)果有效?如何判別結(jié)果有效?36例:例:x , y , z , v 均為均為16位帶符號(hào)數(shù),計(jì)算位帶符號(hào)數(shù),計(jì)算 ( v - ( x*y + z 540 ) ) / xMOV AX, X MOV AX, X IMUL Y ; xIMUL Y ; x* *y y (DX,AXDX,AX)MOV CX, AXMOV CX, AXMOV BX, DXMOV BX, DXMOV AX, ZMOV AX, ZCWD CWD ;Z Z (DXDX,AXAX)ADD CX, AXADD CX, AXADC

32、BX, DX ; xADC BX, DX ; x* *y+z y+z (BXBX,CXCX)SUB CX, 540 SUB CX, 540 SBB BX, 0 ; xSBB BX, 0 ; x* *y+z-540y+z-540MOV AX, VMOV AX, VCWD CWD ;V V (DXDX,AXAX)SUB AX, CXSUB AX, CXSBB DX, BX ; v-(xSBB DX, BX ; v-(x* *y+z-540)y+z-540)IDIV X ; (v-(xIDIV X ; (v-(x* *y+z-540)/xy+z-540)/x(AXAX) 余數(shù)余數(shù) (DXDX)37

33、十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令BCD碼:用二進(jìn)制編碼的十進(jìn)制數(shù),碼:用二進(jìn)制編碼的十進(jìn)制數(shù),又稱又稱二二-十進(jìn)制數(shù)十進(jìn)制數(shù)壓縮的壓縮的BCD碼:用碼:用 4 位二進(jìn)制數(shù)表示位二進(jìn)制數(shù)表示 1 位十進(jìn)制數(shù)位十進(jìn)制數(shù) 例:例:( 59 )10 ( 0101 1001 )BCD非壓縮的非壓縮的BCD碼:用碼:用 8 位二進(jìn)制數(shù)表示位二進(jìn)制數(shù)表示 1 位十進(jìn)制數(shù)位十進(jìn)制數(shù) 例:例:( 59 )10 ( 0000 0101 0000 1001 )BCD數(shù)字的數(shù)字的 ASCII 碼是一種碼是一種 非壓縮的非壓縮的 BCD 碼碼 DIGIT ASCII BCD030H0011 0000131H0011 000

34、1232H0011 0010 939H0011 100138例:寫出例:寫出( 3590 )10的壓縮的壓縮 BCD 碼和非壓縮碼和非壓縮BCD碼,并分碼,并分 別別 把它們存入數(shù)據(jù)區(qū)把它們存入數(shù)據(jù)區(qū) PAKED 和和 UNPAK壓縮壓縮BCD:( 3590 )10( 0011 0101 1001 0000 )BCD非壓縮非壓縮BCD: ( 3590 )10( 00000011 00000101 00001001 00000000 )BCD PAKED 90H 35H UNPAK 00H 09H 05H 03H39(1)壓縮的)壓縮的BCD碼調(diào)整指令碼調(diào)整指令 DAA 加法的十進(jìn)制調(diào)整指令加法

35、的十進(jìn)制調(diào)整指令 DAS 減法的十進(jìn)制調(diào)整指令減法的十進(jìn)制調(diào)整指令 (2)非壓縮的)非壓縮的BCD碼調(diào)整指令碼調(diào)整指令 AAA 加法的加法的ASCII碼調(diào)整指令碼調(diào)整指令 AAS 減法的減法的ASCII碼調(diào)整指令碼調(diào)整指令 AAM 乘法的乘法的ASCII碼調(diào)整指令碼調(diào)整指令 AAD 除法的除法的ASCII碼調(diào)整指令碼調(diào)整指令40邏輯指令:邏輯指令: 邏輯運(yùn)算指令邏輯運(yùn)算指令 AND、OR、NOT、XOR、TEST 移位指令移位指令 SHL、SHR 、 SAL 、SAR、 ROL、ROR、RCL、RCR41邏輯非指令:邏輯非指令:NOT OPR * OPR不能為立即數(shù)不能為立即數(shù)執(zhí)行操作:執(zhí)行操

36、作: (OPR) (OPR) * 不影響標(biāo)志位不影響標(biāo)志位 邏輯與指令:邏輯與指令:AND DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)邏輯或指令:邏輯或指令:OR DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)異或指令:異或指令: XOR DST, SRC執(zhí)行操作:執(zhí)行操作: (DST) (DST) (SRC)測試指令:測試指令: TEST OPR1, OPR2執(zhí)行操作:執(zhí)行操作: (OPR1) (OPR2)CF OF SF ZF PF AF 0 0 * * * 無定義無定義 根據(jù)運(yùn)算結(jié)果設(shè)置根據(jù)運(yùn)算結(jié)果設(shè)置 邏輯運(yùn)算指令邏輯運(yùn)算指令42

37、例:屏蔽例:屏蔽AL的第的第0、1兩位兩位 AND AL, 0FCH例:置例:置AL的第的第5位為位為1 OR AL, 20H 例:使例:使AL的第的第0、1位變反位變反 XOR AL, 3例:測試某些位是例:測試某些位是0是是1 TEST AL, 1 JZ EVEN * * * * * * * * OR 0 0 1 0 0 0 0 0 * * 1 * * * * * * * * * * * 0 1 XOR 0 0 0 0 0 0 1 1 * * * * * * 1 0 * * * * * * * * AND 1 1 1 1 1 1 0 0 * * * * * * 0 0 * * * * *

38、* * * AND 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 *43邏輯左移邏輯左移 SHL OPR, CNT邏輯右移邏輯右移 SHR OPR, CNT算術(shù)左移算術(shù)左移 SAL OPR, CNT(同邏輯左移)(同邏輯左移)算術(shù)右移算術(shù)右移 SAR OPR, CNT CF 0 0 CFCF 移位指令移位指令44循環(huán)左移循環(huán)左移 ROL OPR, CNT循環(huán)右移循環(huán)右移 ROR OPR, CNT帶進(jìn)位循環(huán)左移帶進(jìn)位循環(huán)左移 RCL OPR, CNT帶進(jìn)位循環(huán)右移帶進(jìn)位循環(huán)右移 RCR OPR, CNTCF CFCFCF45注意注意: * OPR可用除立即數(shù)以外的任何尋址方式可用除

39、立即數(shù)以外的任何尋址方式 * CNT=1,SHL OPR, 1 CNT1,MOV CL, CNT SHL OPR, CL ; 以以SHL為例為例* 條件標(biāo)志位:條件標(biāo)志位: CF = 移入的數(shù)值移入的數(shù)值 1 CNT=1時(shí),最高有效位的值發(fā)生變化時(shí),最高有效位的值發(fā)生變化 0 CNT=1時(shí),最高有效位的值不變時(shí),最高有效位的值不變 移位指令:移位指令: SF、ZF、PF 根據(jù)移位結(jié)果設(shè)置,根據(jù)移位結(jié)果設(shè)置,AF無定義無定義 循環(huán)移位指令:循環(huán)移位指令: 不影響不影響 SF、ZF、PF、AFOF =46串處理指令:串處理指令: 設(shè)置方向標(biāo)志指令設(shè)置方向標(biāo)志指令 CLD、STD 串處理指令串處理指

40、令 串重復(fù)前綴串重復(fù)前綴 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW 47與與 REP 配合工作的配合工作的 MOVS / STOS / LODS REP 執(zhí)行操作:執(zhí)行操作:(1) 如如 (CX)=0 則退出則退出 REP,否則轉(zhuǎn),否則轉(zhuǎn)(2)(2) (CX) (CX) -1(3) 執(zhí)行執(zhí)行 MOVS / STOS / LODS(4) 重復(fù)重復(fù) (1) (3)48MOVS 串傳送指令:串傳送指令:MOVS DST, SRCMOVSB (字

41、節(jié))(字節(jié))MOVSW (字)(字)例:例:MOVS ES: BYTE PTR DI, DS: SI 執(zhí)行操作:執(zhí)行操作: (1) (DI) (SI) (2) 字節(jié)操作:字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)2 方向標(biāo)志方向標(biāo)志 DF=0 時(shí)用時(shí)用 + ,DF=1 時(shí)用時(shí)用 - 。 REP MOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。 源串(數(shù)據(jù)段)源串(數(shù)據(jù)段) 目的串(附加段)目的串(附加段)49執(zhí)行執(zhí)行 REP MOVS 之前,應(yīng)先做好:之前,應(yīng)先做好:(1) 源串首地址(末地址

42、)源串首地址(末地址) SI(2) 目的串首地址(末地址)目的串首地址(末地址) DI(3) 串長度串長度 CX(4) 建立方向標(biāo)志建立方向標(biāo)志 ( CLD 使使 DF=0,STD 使使 DF=1 ) 50STOS 存入串指令:存入串指令:STOS DSTSTOSB (字節(jié))(字節(jié))STOSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(DI)(AL), (DI)(DI)1 字操作:字操作:(DI)(AX), (DI)(DI)2例:把例:把 附加段附加段 中的中的 10 個(gè)字節(jié)緩沖區(qū)置為個(gè)字節(jié)緩沖區(qū)置為 20Hlea di, mess2lea di, mess2mov al, 20

43、Hmov al, 20Hmov cx, 10mov cx, 10cldcldrep stosbrep stosblea di, mess2lea di, mess2mov ax, 2020Hmov ax, 2020Hmov cx, 5mov cx, 5cldcldrep stoswrep stosw51LODS 從串取指令:從串取指令: LODS SRC LODSB (字節(jié))(字節(jié)) LODSW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(AL)(SI), (SI)(SI)1 字操作:字操作:(AX)(SI), (SI)(SI)2注意注意: * LODS 指令一般不與指令一般不與

44、REP 聯(lián)用聯(lián)用* 源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改), 目的串必須在附加段中目的串必須在附加段中* 不影響條件標(biāo)志位不影響條件標(biāo)志位52與與 REPE / REPZ(REPNE / REPNZ)配合工作的)配合工作的 CMPS 和和 SCAS REPE / REPZ REPNE / REPNZ 執(zhí)行操作:執(zhí)行操作: (1) 如如 (CX)=0 或或 ZF=0 (ZF=1) 則退出串操作,則退出串操作, 否則轉(zhuǎn)否則轉(zhuǎn)(2) (2) (CX)(CX) -1 (3) 執(zhí)行執(zhí)行 CMPS / SCAS (4) 重復(fù)重復(fù) (1) (3)53C

45、MPS 串比較指令:串比較指令: CMPS SRC, DST CMPSB (字節(jié))(字節(jié)) CMPSW (字)(字) 執(zhí)行操作:執(zhí)行操作: (1) (SI) - (DI) 根據(jù)比較結(jié)果置條件標(biāo)志位:相等根據(jù)比較結(jié)果置條件標(biāo)志位:相等 ZF=1 不等不等 ZF=0 (2) 字節(jié)操作:字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作:字操作: (SI)(SI)2, (DI)(DI)254SCAS 串掃描指令:串掃描指令: SCAS DST SCASB (字節(jié))(字節(jié)) SCASW (字)(字)執(zhí)行操作:執(zhí)行操作: 字節(jié)操作:字節(jié)操作:(AL) - (DI), (DI)(DI)1 字操作:

46、字操作: (AX) - (DI), (DI)(DI)255 控制轉(zhuǎn)移指令:控制轉(zhuǎn)移指令: 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令 JMP 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、JLE / JNLE、 JCXZ 循環(huán)指令循環(huán)指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE 子程序調(diào)用和返回指令子程序調(diào)用和返回指令 CALL、RET 中斷與中斷返回指令中斷與中斷返回指令 INT、INTO、IRET56無條件轉(zhuǎn)移指令:無條件轉(zhuǎn)移指令:段內(nèi)

47、直接短轉(zhuǎn)移:段內(nèi)直接短轉(zhuǎn)移:JMP SHORT OPR 執(zhí)行操作:執(zhí)行操作:(IP) (IP) + 8位位移量位位移量段內(nèi)直接近轉(zhuǎn)移:段內(nèi)直接近轉(zhuǎn)移:JMP NEAR PTR OPR 執(zhí)行操作:執(zhí)行操作:(IP) (IP) + 16位位移量位位移量段內(nèi)間接轉(zhuǎn)移:段內(nèi)間接轉(zhuǎn)移: JMP WORD PTR OPR 執(zhí)行操作:執(zhí)行操作: (IP) (EA)57段間直接遠(yuǎn)轉(zhuǎn)移:段間直接遠(yuǎn)轉(zhuǎn)移:JMP FAR PTR OPR 執(zhí)行操作:執(zhí)行操作:(IP) OPR 的段內(nèi)偏移地址的段內(nèi)偏移地址 (CS) OPR 所在段的段地址所在段的段地址段間間接轉(zhuǎn)移:段間間接轉(zhuǎn)移: JMP DWORD PTR OPR

48、執(zhí)行操作:執(zhí)行操作: (IP) (EA) (CS) (EA+2)58條件轉(zhuǎn)移指令:條件轉(zhuǎn)移指令:注意:只能使用段內(nèi)直接尋址的注意:只能使用段內(nèi)直接尋址的8 位位移量位位移量(1) 根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移 格式格式 測試條件測試條件JZ(JE) OPR ZF = 1JNZ(JNE) OPR ZF = 0JS OPR SF = 1JNS OPR SF = 0JO OPR OF = 1JNO OPR OF = 0JP OPR PF = 1JNP OPR PF = 0JC OPR CF = 1JNC OPR CF = 059(2) 比較兩個(gè)無符號(hào)數(shù),并根據(jù)比較結(jié)果

49、轉(zhuǎn)移比較兩個(gè)無符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移* 格式格式 測試條件測試條件 JB (JNAE,JC) OPR CF = 1 JNB (JAE,JNC) OPR CF = 0 JBE (JNA) OPR CFZF = 1 JNBE (JA) OPR CFZF = 0* 適用于地址或雙精度數(shù)低位字的比較適用于地址或雙精度數(shù)低位字的比較60(3) 比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移* 格式格式 測試條件測試條件 JL (JNGE) OPR SF OF = 1 JNL (JGE) OPR SF OF = 0 JLE (JNG) OPR (SF OF)ZF = 1 JN

50、LE (JG) OPR (SF OF)ZF = 0* 適用于帶符號(hào)數(shù)的比較適用于帶符號(hào)數(shù)的比較(4) 測試測試 CX 的值為的值為 0 則轉(zhuǎn)移則轉(zhuǎn)移 格式格式 測試條件測試條件 JCXZ OPR (CX)=061循環(huán)指令:循環(huán)指令:注意:注意:* CX 中存放循環(huán)次數(shù)中存放循環(huán)次數(shù)* 只能使用段內(nèi)直接尋址的只能使用段內(nèi)直接尋址的8 位位移量位位移量LOOPLOOPZ / LOOPELOOPNZ / LOOPNE 執(zhí)行步驟:執(zhí)行步驟: (1) (CX) (CX) - 1 (2) 檢查是否滿足測試條件,如滿足則檢查是否滿足測試條件,如滿足則 (IP) (IP) + 8位位移量,實(shí)行循環(huán);位位移量,

51、實(shí)行循環(huán); 不滿足則不滿足則 IP 不變,退出循環(huán)。不變,退出循環(huán)。62循環(huán)指令:循環(huán)指令:LOOP OPR測試條件:測試條件:(CX) 0為零或相等時(shí)循環(huán)指令:為零或相等時(shí)循環(huán)指令:LOOPZ(LOOPE) OPR測試條件:測試條件:ZF=1 且且 (CX) 0不為零或不相等時(shí)循環(huán)指令:不為零或不相等時(shí)循環(huán)指令:LOOPNZ(LOOPNE) OPR測試條件:測試條件:ZF=0 且且 (CX) 0LOOP AGAIN DEC CX JNZ AGAIN63子程序調(diào)用和返回指令:子程序調(diào)用和返回指令:code1 segmentcode1 segmentmain proc main proc far

52、far callcall far ptr subp far ptr subp ret retmain endpmain endpcode1 endscode1 endscode2 segmentcode2 segmentsubp proc subp proc farfar retretsubp endpsubp endpcode2 endscode2 ends 段間調(diào)用和返回段間調(diào)用和返回code segmentcode segmentmain proc main proc farfar call call subp subp ret retmain endpmain endpsubp pro

53、c subp proc nearnear retretsubp endpsubp endpcode endscode ends 段內(nèi)調(diào)用和返回段內(nèi)調(diào)用和返回64 CALL 調(diào)用指令調(diào)用指令段內(nèi)直接近調(diào)用:段內(nèi)直接近調(diào)用:CALL DST執(zhí)行操作:執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (IP) + 16位位移量位位移量段內(nèi)間接近調(diào)用:段內(nèi)間接近調(diào)用:CALL DST執(zhí)行操作:執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (EA)65段間直接遠(yuǎn)調(diào)用:段間直接遠(yuǎn)調(diào)用:CALL DST執(zhí)行操作:執(zhí)行操作

54、: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) 偏移地址偏移地址 (CS) 段地址段地址段間間接遠(yuǎn)調(diào)用:段間間接遠(yuǎn)調(diào)用:CALL DST執(zhí)行操作:執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (EA) (CS) (EA+2)66RET 返回指令返回指令段內(nèi)近返回:段內(nèi)近返回:RET執(zhí)行操作:執(zhí)行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2段內(nèi)帶

55、立即數(shù)近返回:段內(nèi)帶立即數(shù)近返回:RET EXP段間遠(yuǎn)返回:段間遠(yuǎn)返回:RET執(zhí)行操作:執(zhí)行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2 (CS) ( (SP)+1,(SP) ) (SP) (SP) + 2段間帶立即數(shù)遠(yuǎn)返回:段間帶立即數(shù)遠(yuǎn)返回:RET EXP67中斷指令:中斷指令: 類型類型0的的(IP) 類型類型0的的(CS) 類型類型1的的(IP) 類型類型1的的(CS) 類型類型N的的(IP) 類型類型N的的(CS) 類型類型255的的(IP) 類型類型255的的(CS)0000000004 4*N003FC中斷向量表中斷向量表中斷向量:中斷向量:中斷例行程序的入口地址,中斷例行程序的入口地址,存放于中斷向量區(qū)。存放于中斷向量區(qū)。 00000H003FFHA0000HC0000HF0000H640K (RAM)640K (RAM)128K (RAM)128K (RAM)192K (ROM)192K (ROM) 64K (ROM) 64K (ROM)68中斷指令:中斷指令: INT TYPE 或或 INT執(zhí)行操作:執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) )

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論