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

下載本文檔

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

文檔簡(jiǎn)介

1、匯編語言匯編語言熊迎軍熊迎軍1377665552513776655525教學(xué)樓教學(xué)樓A509/A510A509/A510Di 第三章第三章 指令系統(tǒng)指令系統(tǒng) 3.1 指令與指令系統(tǒng)3.2 IA-32指令系統(tǒng)3.3 本章小結(jié)3.1 3.1 指令與指令系統(tǒng)指令與指令系統(tǒng)指令指令 控制計(jì)算機(jī)完成某種操作的命令指令系統(tǒng)指令系統(tǒng) 處理器所能識(shí)別的所有指令的集合指令的兼容性:指令的兼容性: 同一系列機(jī)的指令都是兼容的。16位8086指令系統(tǒng)是Intel 80 x86系列微處理器指令系統(tǒng)的基礎(chǔ)零操作數(shù)指令:零操作數(shù)指令: 操作碼操作碼 單操作數(shù)指令:?jiǎn)尾僮鲾?shù)指令: 操作碼操作碼 操作數(shù)操作數(shù)雙操作數(shù)指令:雙

2、操作數(shù)指令: 操作碼操作碼 操作數(shù),操作數(shù)操作數(shù),操作數(shù)多操作數(shù)指令:多操作數(shù)指令: 三操作數(shù)及以上三操作數(shù)及以上指令指令長(zhǎng)度長(zhǎng)度指令的執(zhí)行速度指令的執(zhí)行速度指令的字長(zhǎng)影響指令的執(zhí)行速度指令的字長(zhǎng)影響指令的執(zhí)行速度對(duì)不同的操作數(shù),指令執(zhí)行的時(shí)間不同:對(duì)不同的操作數(shù),指令執(zhí)行的時(shí)間不同: 快!快!立即數(shù)立即數(shù)寄存器寄存器存儲(chǔ)器存儲(chǔ)器按功能劃分為六大類:按功能劃分為六大類:數(shù)據(jù)傳送數(shù)據(jù)傳送算術(shù)運(yùn)算算術(shù)運(yùn)算邏輯運(yùn)算和移位邏輯運(yùn)算和移位串操作串操作程序控制程序控制處理器控制處理器控制3.2 IA-323.2 IA-32指令系統(tǒng)指令系統(tǒng)Intel 8086指令系統(tǒng)共有117條基本指令 通用數(shù)據(jù)傳送通用數(shù)

3、據(jù)傳送 輸入輸出輸入輸出 地址傳送地址傳送 標(biāo)志位操作標(biāo)志位操作3.2.1 3.2.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令一般數(shù)據(jù)傳送指令一般數(shù)據(jù)傳送指令堆棧操作指令堆棧操作指令交換指令交換指令查表轉(zhuǎn)換指令查表轉(zhuǎn)換指令字位擴(kuò)展指令字位擴(kuò)展指令n特點(diǎn):特點(diǎn):n該類指令的執(zhí)行對(duì)標(biāo)志位不產(chǎn)生影響該類指令的執(zhí)行對(duì)標(biāo)志位不產(chǎn)生影響 3.2.1.1 3.2.1.1 通用數(shù)據(jù)傳送類指令通用數(shù)據(jù)傳送類指令 (1 1)一般數(shù)據(jù)傳送指令)一般數(shù)據(jù)傳送指令一般數(shù)據(jù)傳送指令:一般數(shù)據(jù)傳送指令: MOVl 格式:格式:MOV dest,srcl 操作:操作:src 例:例: MOV AL,BL dest注意點(diǎn):注意點(diǎn):l 兩

4、操作數(shù)字長(zhǎng)必須相同;l 兩操作數(shù)不允許同時(shí)為存儲(chǔ)器操作數(shù);兩操作數(shù)不允許同時(shí)為段寄存器;在源操作數(shù)是立即數(shù)時(shí),目標(biāo)操作數(shù)不能是段寄存器;l IP和CS不作為目標(biāo)操作數(shù),F(xiàn)LAGS一般也不作為操作數(shù)在指令中出現(xiàn)。 MOV CS,3000H ;不正確 MOV AX,3000H ; MOV CS,AX ;正確 MOV SS,1000H ;不正確 MOV DI,1000H MOV SS,DI ;正確如果要將數(shù)據(jù)送入段寄存器(CS、DS、ES、SS),必須先將這個(gè)數(shù)送入一個(gè)非段寄存器,然后在送到段寄存器。 例例1 判斷下列指令的正確性:lMOV AL,BX;錯(cuò)誤,操作數(shù)類型不同lMOV AX,SI05H

5、;正確lMOV BXBP,BX;錯(cuò)誤,不能將兩個(gè)基址寄存器組合一起尋址lMOV DS,1000H;錯(cuò)誤,立即數(shù)不能給段寄存器賦值lMOV 1200,SI;錯(cuò)誤,不能用1條指令完成兩個(gè)存儲(chǔ)單元之間的數(shù)據(jù)傳送 例例2 2例例 將立即數(shù)將立即數(shù)2 2AHAH送入內(nèi)存數(shù)據(jù)段送入內(nèi)存數(shù)據(jù)段1000H1000H開始的開始的100100個(gè)個(gè)單元中。單元中。題目分析:題目分析:l確定首地址確定首地址l確定數(shù)據(jù)長(zhǎng)度確定數(shù)據(jù)長(zhǎng)度l寫一次數(shù)據(jù)寫一次數(shù)據(jù)l修改單元地址修改單元地址l修改長(zhǎng)度值修改長(zhǎng)度值l判斷寫完否?判斷寫完否?l未完繼續(xù)寫入,否則結(jié)束未完繼續(xù)寫入,否則結(jié)束1063H100B1000H 2AH數(shù)據(jù)段數(shù)據(jù)

6、段2AH2AH2AH程序段:程序段: MOV DIMOV DI,1000H1000H MOV CX MOV CX,64H64H MOV AL MOV AL,2AH2AHAGAINAGAIN:MOV DIMOV DI,ALAL INC DI INC DI ;DI+1DI+1 DEC CX DEC CX ;CX-1CX-1 JNZ AGAIN JNZ AGAIN ;CX0CX0則繼續(xù)則繼續(xù)HLT HLT 上段程序在代碼段中的存放形式上段程序在代碼段中的存放形式v設(shè)設(shè)CS=109EHCS=109EH,IP=0100HIP=0100H,則各條指令在代碼段中的存則各條指令在代碼段中的存放地址如下:放地址

7、如下: CS : IP CS : IP 機(jī)器指令機(jī)器指令 匯編指令匯編指令 109E 109E:0100 B80010 MOV DI0100 B80010 MOV DI,1000H1000H 109E 109E:0103 0103 . . MOV CX MOV CX,64H64H 109E 109E:0105 0105 . . MOV AL MOV AL,2AH2AH 109E 109E:0107 0107 . . MOV DI MOV DI,ALAL 109E 109E:0109 INC DI0109 INC DI 109E 109E:010A DEC CX010A DEC CX 109E

8、109E:010B JNZ 0107H010B JNZ 0107H 109E 109E:010D HLT010D HLT 數(shù)據(jù)段中的分布數(shù)據(jù)段中的分布 送上送上2 2AHAH后數(shù)據(jù)段中相應(yīng)存儲(chǔ)單元的內(nèi)容改變?nèi)缦拢汉髷?shù)據(jù)段中相應(yīng)存儲(chǔ)單元的內(nèi)容改變?nèi)缦拢篋SDS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1010 2

9、A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2ADSDS:1040 2A 2A 2A 2A 2A 2A 2A 2A

10、-2A 2A 2A 2A 2A 2A 2A 2A 1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 001060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00偏移

11、地址偏移地址DI(2 2)堆棧操作指令)堆棧操作指令壓棧指令壓棧指令 PUSHPUSH 格式格式: PUSH OPRD: PUSH OPRD出棧指令出棧指令 POPPOP 格式格式: POP OPRD: POP OPRDOPRD只能是16位寄存器或存儲(chǔ)器操作數(shù)(兩單元) 壓棧指令壓棧指令 PUSHPUSHl 指令執(zhí)行過程:指令執(zhí)行過程:SP - 2 SP - 2 SP SP操作數(shù)高字節(jié)操作數(shù)高字節(jié) SP+1SP+1操作數(shù)低字節(jié)操作數(shù)低字節(jié) SPSP SP堆堆棧棧段段SP高高8位位低低8位位 壓棧指令的操作壓棧指令的操作設(shè)設(shè)AX=1234H,SP=1200H執(zhí)行執(zhí)行 PUSH AX 指令后堆棧區(qū)

12、的狀態(tài):指令后堆棧區(qū)的狀態(tài): 1200H 堆堆棧棧段段 SP-2=11FEH12H34H1200H 堆堆棧棧段段12H 34HAX入棧后入棧后入棧前入棧前 出棧指令出棧指令POPPOPl 指令執(zhí)行過程:指令執(zhí)行過程: SPSP SP+1 SP+1 SP SP+2 SP SP+2操作數(shù)低字節(jié)操作數(shù)低字節(jié)操作數(shù)高字節(jié)操作數(shù)高字節(jié) SP堆堆棧棧段段SP高高8位位低低8位位 出棧指令的操作出棧指令的操作執(zhí)行執(zhí)行 POP AX 12H34H11FEH 堆堆棧棧段段代代碼碼段段PUSH 12 34 AX SP+21200H 出棧后出棧后出棧前出棧前 堆棧操作指令說明堆棧操作指令說明l 指令的操作數(shù)必須是1

13、6位的;l 操作數(shù)可以是寄存器或存儲(chǔ)器兩單元,但不能是立即數(shù);l 不能從棧頂彈出一個(gè)字給CS(允許PUSH CS);l PUSH和POP指令在程序中一般成對(duì)出現(xiàn);l PUSH指令的操作方向是從高地址向低地址,而POP指令的操作正好相反。 例:例:MOV AXMOV AX,9000H9000HMOV SSMOV SS,AXAXMOV SPMOV SP,E200HE200HMOV DXMOV DX,38FFH38FFHPUSH DXPUSH DXPUSH AXPUSH AXPOP DXPOP DXPOP AXPOP AX如此,會(huì)使如此,會(huì)使DX和和AX的內(nèi)容互換的內(nèi)容互換(3 3)交換指令)交換指

14、令格式:格式: XCHG REG XCHG REG,MEM/REGMEM/REG注:注:l兩操作數(shù)必須有一個(gè)是寄存器操作數(shù)兩操作數(shù)必須有一個(gè)是寄存器操作數(shù)l不允許使用段寄存器不允許使用段寄存器l兩個(gè)操作數(shù)字長(zhǎng)要一致兩個(gè)操作數(shù)字長(zhǎng)要一致。例:例: XCHGXCHGAXAX,BXBXXCHGXCHG20002000,CLCL(4 4)查表指令)查表指令 格式:格式: XLATXLAT;(;(ALAL) (BXBX)+ +(ALAL) 或:或:XLAT src_table XLAT src_table ; (src_tablesrc_table表示要查找的表的首地址)表示要查找的表的首地址) 說明:

15、說明:l用BX的內(nèi)容代表表格首地址,AL內(nèi)容為表內(nèi)位移量,BX+AL得到要查找元素的偏移地址l表格長(zhǎng)度最大不能超過256個(gè)字節(jié) 操作:操作:將BX+AL所指單元的內(nèi)容送AL 例:例:數(shù)據(jù)段中存放有一數(shù)據(jù)段中存放有一張張ASCIIASCII碼轉(zhuǎn)換表,碼轉(zhuǎn)換表,設(shè)首地址為設(shè)首地址為20002000H H,現(xiàn)欲查出表中第現(xiàn)欲查出表中第1111個(gè)代碼的個(gè)代碼的ASCIIASCII碼碼303132.394142.45462000H+02000H+110129ABEF可用如下指令實(shí)現(xiàn):可用如下指令實(shí)現(xiàn):MOV BXMOV BX,2000H 2000H ;BXBX表首地址表首地址MOV ALMOV AL,0

16、BH 0BH ;ALAL序號(hào)序號(hào)XLATXLAT ;查表轉(zhuǎn)換查表轉(zhuǎn)換執(zhí)行后:執(zhí)行后:AL = 42HAL = 42H還可用其他方法實(shí)現(xiàn),如:還可用其他方法實(shí)現(xiàn),如:MOV BXMOV BX,2000H2000HMOV ALMOV AL,BX+0BHBX+0BH(5 5)字位擴(kuò)展指令)字位擴(kuò)展指令 將有符號(hào)數(shù)的符號(hào)位擴(kuò)展到高位;將有符號(hào)數(shù)的符號(hào)位擴(kuò)展到高位;指令為零操作數(shù)指令,采用隱含尋址,隱含的操指令為零操作數(shù)指令,采用隱含尋址,隱含的操作數(shù)為作數(shù)為AXAX及及AXAX,DXDX無符號(hào)數(shù)的擴(kuò)展規(guī)則為在高位補(bǔ)無符號(hào)數(shù)的擴(kuò)展規(guī)則為在高位補(bǔ)0 0 字節(jié)到字的擴(kuò)展指令字節(jié)到字的擴(kuò)展指令l 格式:格式:

17、 CBWl 操作:操作: 將將AL內(nèi)容擴(kuò)展到內(nèi)容擴(kuò)展到AXl 規(guī)則:規(guī)則: 若最高位若最高位=1,則執(zhí)行后,則執(zhí)行后AH=FFH 若最高位若最高位=0,則執(zhí)行后,則執(zhí)行后AH=00H 字到雙字的擴(kuò)展指令字到雙字的擴(kuò)展指令l 格式:格式: CWDl 操作:操作: 將將AX內(nèi)容擴(kuò)展到內(nèi)容擴(kuò)展到DX AX,高位存放在,高位存放在DX中中,隱含了操作數(shù),隱含了操作數(shù)AX。l 規(guī)則:規(guī)則: 若最高位若最高位=1,則執(zhí)行后,則執(zhí)行后DX=FFFFH 若最高位若最高位=0,則執(zhí)行后,則執(zhí)行后DX=0000H 例:例:判斷以下指令執(zhí)行結(jié)果:判斷以下指令執(zhí)行結(jié)果: MOV AL MOV AL,44H44H CB

18、W CBW MOV AX MOV AX,0AFDEH0AFDEH CWD CWD MOV AL MOV AL,86H86H CBW CBW掌握:掌握:指令的格式及操作指令的格式及操作指令的兩種尋址方式指令的兩種尋址方式指令對(duì)操作數(shù)的要求指令對(duì)操作數(shù)的要求3.4.1.2 3.4.1.2 輸入輸出指令輸入輸出指令專門面向?qū)iT面向I/OI/O端口操作的指令端口操作的指令指令格式:指令格式: 輸入指令:輸入指令: IN acc,PORT 輸出指令輸出指令 :OUT PORT,acc端口地址端口地址根據(jù)端口地址碼的長(zhǎng)度,指令具有根據(jù)端口地址碼的長(zhǎng)度,指令具有兩種不同的端兩種不同的端口地址表現(xiàn)形式口地址表

19、現(xiàn)形式。l 直接地址直接地址 端口地址為端口地址為8位時(shí),指令中直接給出位時(shí),指令中直接給出8位端口地址(立位端口地址(立即數(shù)方式);即數(shù)方式); 尋址尋址256個(gè)端口。個(gè)端口。l 間接地址間接地址 端口地址為端口地址為16位時(shí),指令中的端口地址必須由位時(shí),指令中的端口地址必須由DX指定;指定; 可尋址可尋址64K個(gè)端口。個(gè)端口。 例:例:IN AXIN AX,80H80HMOV DXMOV DX,2400H2400HIN ALIN AL,DXDXOUT 35H OUT 35H ,AXAXOUT AXOUT AX,35H35H取偏移地址指令取偏移地址指令LEALEA* *LDSLDS指令指令*

20、 *LESLES指令指令3.4.1.3 3.4.1.3 地址傳送指令地址傳送指令(1 1)取偏移地址指令)取偏移地址指令LEALEAl 操作:操作:將變量的將變量的1616位偏移地址取出送目標(biāo)寄存器位偏移地址取出送目標(biāo)寄存器l 當(dāng)程序中用符號(hào)地址表示內(nèi)存偏移地址時(shí),須使用該當(dāng)程序中用符號(hào)地址表示內(nèi)存偏移地址時(shí),須使用該指令。指令。l 格式:格式: LEA REG LEA REG,MEM MEM l 指令要求:指令要求:源操作數(shù)源操作數(shù)MEMMEM必須是一個(gè)必須是一個(gè)存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù),目標(biāo)操作數(shù),目標(biāo)操作數(shù)必須是必須是1616位通用寄存器,一般是間址寄存器(位通用寄存器,一般是間址寄存器

21、(BXBX,BPBP,SISI,DIDI)。)。例例1 1:設(shè)(設(shè)(BXBX)=1000H=1000H,(,(DSDS)=6000H=6000H,(,(61050H61050H)=33H=33H,(,(61051H61051H)=44H=44H。比較以下兩條指令的執(zhí)行結(jié)果。比較以下兩條指令的執(zhí)行結(jié)果。LEA BXLEA BX,BX+50HBX+50HMOV BXMOV BX,BX+1BX+1則,第則,第1 1條指令執(zhí)行后,(條指令執(zhí)行后,(BXBX)= =?,第?,第2 2條指令執(zhí)行后,條指令執(zhí)行后,(BXBX)= =?。?。例例2:將數(shù)據(jù)段中首地址為將數(shù)據(jù)段中首地址為MEM1 的的50個(gè)字節(jié)

22、的數(shù)據(jù)傳個(gè)字節(jié)的數(shù)據(jù)傳送到同一邏輯段首地址為送到同一邏輯段首地址為MEM2的區(qū)域存放。編的區(qū)域存放。編寫相應(yīng)的程序段寫相應(yīng)的程序段 。 開開 始始取源地址取源地址取目標(biāo)地址取目標(biāo)地址送數(shù)據(jù)塊長(zhǎng)度送數(shù)據(jù)塊長(zhǎng)度到到CL傳送一個(gè)字節(jié)傳送一個(gè)字節(jié)修改地址指針修改地址指針修改計(jì)數(shù)值修改計(jì)數(shù)值計(jì)數(shù)值計(jì)數(shù)值=0? 結(jié)結(jié) 束束NY LEA SI LEA SI,MEM1MEM1 LEA DI LEA DI,MEM2 MEM2 MOV CL MOV CL,5050NEXTNEXT: MOV AL MOV AL,SISI MOV DI MOV DI,ALAL INC SI INC SI INC DI INC DI

23、DEC CL DEC CL JNZ NEXT JNZ NEXT HLT HLT MEM112H34HMEM2(2 2)LDSLDS指令指令l LDS reg16LDS reg16,mem32mem32; (reg16reg16) (mem32)+1:(mem32)(mem32)+1:(mem32) (DS) (mem32)+3 (DS) (mem32)+3:(mem32)+2:(mem32)+2) )其中,源操作數(shù)其中,源操作數(shù)mem32mem32位存儲(chǔ)器操作數(shù),給出的是內(nèi)存中位存儲(chǔ)器操作數(shù),給出的是內(nèi)存中4 4個(gè)連續(xù)的存儲(chǔ)單元的首地址。個(gè)連續(xù)的存儲(chǔ)單元的首地址。目標(biāo)操作數(shù)目標(biāo)操作數(shù)reg16

24、reg16必須必須是是BXBX、BPBP、SISI、DIDI等等4 4個(gè)間址寄存器之一個(gè)間址寄存器之一。該指令用于把存儲(chǔ)器該指令用于把存儲(chǔ)器mem32mem32中存放的一個(gè)中存放的一個(gè)3232位遠(yuǎn)地址指針位遠(yuǎn)地址指針(包括偏移地址)送到(包括偏移地址)送到reg16reg16和和DSDS。4 4個(gè)存儲(chǔ)單元的前個(gè)存儲(chǔ)單元的前兩個(gè)單元的內(nèi)容作為偏移地址送兩個(gè)單元的內(nèi)容作為偏移地址送reg16reg16,后兩個(gè)單元的,后兩個(gè)單元的內(nèi)容作為段地址裝入段寄存器內(nèi)容作為段地址裝入段寄存器DSDS例例1 1:設(shè)(設(shè)(DSDS)=6000H=6000H,內(nèi)存地址為,內(nèi)存地址為60348H60348H開始的開始

25、的4 4個(gè)單元中存放了個(gè)單元中存放了一個(gè)一個(gè)3232位的遠(yuǎn)指針位的遠(yuǎn)指針98011H98011H(該地址存放的內(nèi)容是(該地址存放的內(nèi)容是3412H3412H),),以下指令將該指針裝入以下指令將該指針裝入DSDS:SISI中。中。l LDS SILDS SI,0348H0348Hl MOV AXMOV AX,SISI指令執(zhí)行后:(指令執(zhí)行后:(SISI)=8011H=8011H,(,(DSDS)=9000H=9000H,(,(AXAX)=3412H=3412H(3 3)LESLES指令指令 這條指令的格式及功能與LDS指令非常類似,不同的是,兩個(gè)高地址單元中給出的段地址不是送往DS,而是送到E

26、S。例如:將上例中的LDS指令改為L(zhǎng)ES指令,則指令執(zhí)行后: (SI)=8011H,(ES)=9000H,而DS內(nèi)容沒有改變LAHFSAHFPUSHFPOPF隱含操作數(shù)隱含操作數(shù)AH隱含操作數(shù)隱含操作數(shù)FLAGS3.4.1.4 3.4.1.4 標(biāo)志位操作指令標(biāo)志位操作指令(1 1)LAHFLAHF,SAHFSAHFLAHF 操作:操作: 將將FLAGS的低的低8位的位的SF,ZF,AF,PF,和,和CF裝入裝入AH對(duì)應(yīng)位置,對(duì)應(yīng)位置,8位中其余位中其余3位為無效位位為無效位CFPFAFZFCF.AHFLAGSD15D0D7D0n SAHF執(zhí)行與執(zhí)行與LAHF相反的操作相反的操作(2 2)PUS

27、HFPUSHF,POPFPOPF針對(duì)FLAGS的堆棧操作指令 將標(biāo)志寄存器壓?;驈亩褩棾鰈 PUSHF:(指令本身不影響標(biāo)志位) SP-1 SP-1 (FLAGSFLAGSH H) SP-2 SP-2 (FLAGSFLAGSL L) (SPSP) (SPSP)-2-2l POPF:(指令影響標(biāo)志位) (FLAGSFLAGSL L) SPSP (FLAGSFLAGSH H) SP+1SP+1 (SPSP) (SPSP)+2+2加法運(yùn)算指令加法運(yùn)算指令減法運(yùn)算指令減法運(yùn)算指令乘法指令乘法指令除法指令除法指令算術(shù)運(yùn)算指令的執(zhí)行大多對(duì)狀態(tài)標(biāo)志位會(huì)產(chǎn)生影響算術(shù)運(yùn)算指令的執(zhí)行大多對(duì)狀態(tài)標(biāo)志位會(huì)產(chǎn)生影響3

28、.4.2 3.4.2 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 普通加法指令普通加法指令A(yù)DD 帶進(jìn)位位的加法指令帶進(jìn)位位的加法指令A(yù)DC 加加1指令指令I(lǐng)NC加法指令對(duì)操作數(shù)的要求與加法指令對(duì)操作數(shù)的要求與MOV指令相同指令相同3.4.2.1 3.4.2.1 加法指令加法指令(1 1)ADDADD指令指令格式:格式: ADD OPRD1,OPRD2操作:操作: OPRD1+OPRD2ADD指令的執(zhí)行對(duì)全部指令的執(zhí)行對(duì)全部6個(gè)狀態(tài)標(biāo)志位都產(chǎn)生影響個(gè)狀態(tài)標(biāo)志位都產(chǎn)生影響OPRD1注意:源操作數(shù)和目標(biāo)操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù); 不能對(duì)段寄存器進(jìn)行運(yùn)算。 01111000 + 10011001 000100

29、011標(biāo)志位狀態(tài):標(biāo)志位狀態(tài): CF= SF= AF= ZF= PF= OF=101010 例:例: MOV AL,78H ADD AL,99H指令執(zhí)行后指令執(zhí)行后6個(gè)狀態(tài)標(biāo)志位的狀態(tài)個(gè)狀態(tài)標(biāo)志位的狀態(tài)(2 2)ADCADC指令指令指令格式、對(duì)操作數(shù)的要求、對(duì)標(biāo)志位的影響指令格式、對(duì)操作數(shù)的要求、對(duì)標(biāo)志位的影響與與ADD指令完全一樣指令完全一樣指令的操作:指令的操作: OPRD1+OPRD2+CF OPRD1ADC指令多用于多字節(jié)數(shù)相加,使用前要先指令多用于多字節(jié)數(shù)相加,使用前要先將將CF清零。清零。例:例:求兩個(gè)求兩個(gè)20B20B數(shù)的和數(shù)的和 LEA SI LEA SI,M1M1 LEA D

30、I LEA DI,M2M2 MOV CX MOV CX,2020 CLC CLC ;使;使CF=0CF=0NEXT NEXT : MOV AL MOV AL,SISI ADC DIADC DI,ALAL INC SI INC SI INC DI INC DI DEC CX DEC CX JNZ NEXT JNZ NEXTHLTHLT M112H34HM2(3 3)INCINC指令指令 格式:格式: INC OPRD 操作:操作: OPRD+1 OPRD常用于在程序中修改地址指針常用于在程序中修改地址指針不能是段寄存器不能是段寄存器或立即數(shù)或立即數(shù)INC指令不影響CF標(biāo)志位,但對(duì)其它5個(gè)狀態(tài)標(biāo)志

31、AF、OF、PF、SF及ZF會(huì)產(chǎn)生影響普通減法指令普通減法指令SUB考慮借位的減法指令考慮借位的減法指令SBB減減1指令指令DEC比較指令比較指令CMP求補(bǔ)指令求補(bǔ)指令NEG減法指令對(duì)操作數(shù)的要求與對(duì)應(yīng)的加法指令相同減法指令對(duì)操作數(shù)的要求與對(duì)應(yīng)的加法指令相同3.4.2.2 3.4.2.2 減法指令減法指令(1 1)SUBSUB指令指令 格式:格式: SUB OPRD1SUB OPRD1,OPRD2OPRD2 操作:操作: OPRD1- OPRD2 OPRD1OPRD1- OPRD2 OPRD1 對(duì)標(biāo)志位的影響與對(duì)標(biāo)志位的影響與ADDADD指令相同指令相同(2 2)SBBSBB指令指令指令格式、

32、對(duì)操作數(shù)的要求、對(duì)標(biāo)志位的影響指令格式、對(duì)操作數(shù)的要求、對(duì)標(biāo)志位的影響與與SUBSUB指令完全一樣。指令完全一樣。主要用于多字節(jié)減法運(yùn)算。主要用于多字節(jié)減法運(yùn)算。指令的操作:指令的操作: OPRD1- OPRD2- CF OPRD1OPRD1- OPRD2- CF OPRD1(3 3)DECDEC指令指令格式:格式: DEC OPRDDEC OPRD操作:操作: OPRD - 1 OPRDOPRD - 1 OPRDl 指令對(duì)操作數(shù)的要求與指令對(duì)操作數(shù)的要求與INCINC相同(不能是段寄存相同(不能是段寄存器或立即數(shù))器或立即數(shù))l 指令常用于在程序中修改計(jì)數(shù)值指令常用于在程序中修改計(jì)數(shù)值 例:

33、例: MOV BL MOV BL,2 2 NEXT1 NEXT1: MOV CX MOV CX,0FFFFH0FFFFH NEXT2 NEXT2: DEC CX DEC CX JNZ NEXT2 ; ZF=0 JNZ NEXT2 ; ZF=0轉(zhuǎn)轉(zhuǎn)NEXT2NEXT2 DEC BL DEC BL JNZ NEXT1 ; ZF=0 JNZ NEXT1 ; ZF=0轉(zhuǎn)轉(zhuǎn)NEXT1NEXT1 HLT ; HLT ; 暫停執(zhí)行暫停執(zhí)行(4 4)NEGNEG指令(求補(bǔ)指令)指令(求補(bǔ)指令)格式:格式: NEG OPRD操作:操作: 0 - OPRD OPRD8/16位寄存器或位寄存器或存儲(chǔ)器操作數(shù)存儲(chǔ)器操

34、作數(shù)用用0減去操作數(shù),相當(dāng)于對(duì)該操作數(shù)求補(bǔ)碼減去操作數(shù),相當(dāng)于對(duì)該操作數(shù)求補(bǔ)碼NEG指令對(duì)6個(gè)狀態(tài)標(biāo)志位均有影響,但要注意以下兩點(diǎn):執(zhí)行NEG指令后,一般情況都會(huì)使CF為1,除非給定操作數(shù)為0,CF才會(huì)為0。當(dāng)指定的操作數(shù)為80H(-128)或?yàn)?000H(-32768),則執(zhí)行NEG指令后,結(jié)果不變,但OF置1,其它情況下OF均值0(5 5)CMPCMP指令指令 格式:格式: CMP OPRD1CMP OPRD1,OPRD2OPRD2 操作:操作: OPRD1- OPRD2 OPRD1- OPRD2 用途:用于比較兩個(gè)數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件 指令執(zhí)行的結(jié)果不影響目標(biāo)操作數(shù),僅

35、影響標(biāo)志位! 指令對(duì)操作數(shù)的要求及對(duì)標(biāo)志位的影響與SUB指令相同兩個(gè)帶符號(hào)數(shù)的比較 CMP AX,BX 兩個(gè)數(shù)的大小由OF和SF共同決定 OF和SF狀態(tài)相同 AX BX OF和SF狀態(tài)不同 AX BX CF=0 若 AX 9或AF=1,則(AL)+06H (AL),并使AF=1l 若(AL)中高4位9或CF=1,則(AL)+60H (AL),并使CF=1例1:編程用BCD數(shù)計(jì)算48+27=?MOV AL,48HADD AL,27HDAA則ADD結(jié)果為:01101111。而BCD數(shù)48H+27H應(yīng)該等于75H,但ADD運(yùn)算結(jié)果為6FH,結(jié)果不正確,應(yīng)該采用DAA指令進(jìn)行調(diào)整。因?yàn)榈?位(1111

36、)9,故進(jìn)行加6調(diào)整:01101111+00000110=01110101可以看出,調(diào)整后:(AL)=75H,AF=1,CF=0,結(jié)果正確。(2)非壓縮BCD碼加法十進(jìn)制調(diào)整指令A(yù)AA AAA指令用于對(duì)兩個(gè)非壓縮BCD數(shù)相加之和(結(jié)果必須存入AL)進(jìn)行調(diào)整,形成一個(gè)正確的非壓縮BCD碼,調(diào)整后的結(jié)果低位存入AL,高位存入AH。 具體步驟為:l若(AL)中低4位9或AF=1,則(AL)+6,(AH)+1,AF=1;l屏蔽掉(AL)高4位,即(AL)(AL)0FH;lCFAF例例1 1: 用非壓縮用非壓縮BCDBCD碼計(jì)算碼計(jì)算9+4=9+4=? MOV AL MOV AL,09H 09H ;BC

37、DBCD數(shù)數(shù)9 9 MOV BL MOV BL,04H04H ;BCDBCD數(shù)數(shù)4 4 ADD AL ADD AL,BL BL ;(;(ALAL)=09H+04H=0DH=09H+04H=0DH AAA AAA ;(;(ALAL)=0DH+06H=03H=0DH+06H=03H(高(高4 4位清零)位清零) ;(;(AHAH)=1=1;(;(CFCF)=1=1例例2 2: 計(jì)算計(jì)算8 89 0000 10009 0000 1000 +0000 1001 +0000 1001 000 0001 1 0001 0001 1111 結(jié)果應(yīng)為結(jié)果應(yīng)為1717,而計(jì)算機(jī)相加為,而計(jì)算機(jī)相加為1111,原

38、因在于運(yùn)算過程中,如,原因在于運(yùn)算過程中,如遇到低遇到低4 4位往高位往高4 4位產(chǎn)生進(jìn)位時(shí)(此時(shí)位產(chǎn)生進(jìn)位時(shí)(此時(shí)AF=1AF=1)是按逢十六進(jìn))是按逢十六進(jìn)一的規(guī)則,但一的規(guī)則,但BCDBCD碼要求逢十進(jìn)一,因此只要產(chǎn)生進(jìn)位,個(gè)碼要求逢十進(jìn)一,因此只要產(chǎn)生進(jìn)位,個(gè)位就會(huì)少位就會(huì)少6 6,這就要進(jìn)行加,這就要進(jìn)行加6 6調(diào)正。調(diào)正。這個(gè)這個(gè)1代表了代表了16,而實(shí)際上,而實(shí)際上僅應(yīng)為僅應(yīng)為10,即多進(jìn)了,即多進(jìn)了6。 實(shí)際上實(shí)際上當(dāng)?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)整 ( (原因是逢十沒有進(jìn)位,故用加原因是逢十沒有進(jìn)位,

39、故用加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 0001 0111 0001 0111 17 17 (3)壓縮BCD碼減法十進(jìn)制調(diào)整指令DASDAS用于對(duì)兩個(gè)壓縮BCD碼相減后的結(jié)果(存入AL)進(jìn)行調(diào)整,產(chǎn)生正確的壓縮BCD碼。對(duì)標(biāo)志位的影響與DAA指令相同。調(diào)整方法如下:l 若(AL)中低4位9或AF=1,則(AL)-06H,AF=1l 若(AL)中高4位9或CF=1,則(AL)-60H,CF=1(3)非壓縮BCD碼減法十進(jìn)制調(diào)

40、整AASAAS用于對(duì)兩個(gè)非壓縮BCD碼相減后的結(jié)果(存入AL)進(jìn)行調(diào)整,產(chǎn)生正確的非壓縮BCD碼,其低位存入AL,高位存入AH。對(duì)標(biāo)志位的影響與AAA指令相同。調(diào)整方法如下:l 若(AL)中低4位9或AF=1,則(AL)-06H,(AH)-1,AF=1l 屏蔽掉(AL)高4位,即(AL)(AL)0FH;l CFAF(4)乘法的十進(jìn)制調(diào)整指令A(yù)AM AAM是非壓縮BCD碼乘法的十進(jìn)制調(diào)整指令。對(duì)兩個(gè)非壓縮BCD碼數(shù)相乘的結(jié)果(存入AX)進(jìn)行調(diào)整,以得到正確的結(jié)果。具體步驟:(AH)(AL)/0AH(AL)(AL)%0AH即把AL寄存器的內(nèi)容除以O(shè)AH,商存入AH,余數(shù)存入AL。說明:說明:l A

41、AM的實(shí)質(zhì)是把AL中的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),所以對(duì)于不超過99的二進(jìn)制數(shù),只用一條AAM指令即可實(shí)現(xiàn)二-十進(jìn)制轉(zhuǎn)換l AAM指令影響PF、SF和ZF標(biāo)志位l 執(zhí)行AAM指令前須有一條MUL指令(BCD碼總視為無符號(hào)數(shù))將兩個(gè)非壓縮BCD碼相乘,結(jié)果放入AL,然后用AAM指令進(jìn)行調(diào)整。例:例:用非壓縮BCD碼計(jì)算7*9=?MOV AL,07H ;(AL)=07H,即非壓縮BCD數(shù)7MOV BL,09H ;(AL)=09H,即非壓縮BCD數(shù)9MUL BL ;(AX)=07H*09H=003HAAM ;(AX)=0603H,即非壓縮BCD數(shù)63,SF=0, ; ZF=0,PF=1(5)除法的十進(jìn)制

42、調(diào)整指令A(yù)AD 在兩個(gè)非壓縮BCD碼相除之前,先用一條AAD指令進(jìn)行調(diào)整,然后再用DIV指令。具體步驟:(AL)(AH)*10+(AL)(AH)0 即把AX中的非壓縮BCD碼(十位數(shù)放AH,個(gè)位數(shù)放AL)調(diào)整為二進(jìn)制數(shù),并將結(jié)果放入AL中。AAD的操作實(shí)質(zhì)上是把AX中的兩位十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),所以對(duì)于不超過99的十進(jìn)制數(shù),只用一條AAD指令即可實(shí)現(xiàn)十-二進(jìn)制轉(zhuǎn)換。 AAD指令影響PF、SF和ZF標(biāo)志位。例:例:計(jì)算計(jì)算23/4=23/4=?MOV AX,0203H ;(AX)=0203H,即非壓縮BCD數(shù)23MOV BL,4 ;(BL)=04H,即非壓縮BCD數(shù)4AAD ;(AX)=02H

43、*0AH+03H=0017HDIV BL ;(AH)=03H,(AL)=05H,即商5余3執(zhí)行完AAD后,(AH)=0,(AL)=17;再執(zhí)行DIV指令后,(AH)=03H,(AL)=05H 邏輯運(yùn)算 與,或,非,異或 移位操作 非循環(huán)移位,循環(huán)移位3.4.3 3.4.3 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令 說明l 邏輯運(yùn)算指令對(duì)操作數(shù)的 要求大多與MOV指令相同。l 除“非”運(yùn)算指令 外,其余指令的執(zhí)行都會(huì)使標(biāo)志位OF=CF=0(1 1)“與與”指令指令A(yù)NDAND:l 格式:格式: AND OPRD1AND OPRD1,OPRD2OPRD2l 操作:操作: 兩操作數(shù)相兩操作數(shù)相“與與”,

44、結(jié)果送目標(biāo)地址。,結(jié)果送目標(biāo)地址。說明: 源操作數(shù)OPRD2可以是寄存器、存儲(chǔ)器或立即數(shù),但目標(biāo)操作數(shù)OPRD1只能是寄存器或存儲(chǔ)器3.4.3.1 3.4.3.1 邏輯運(yùn)算指令邏輯運(yùn)算指令 “與與”指令的應(yīng)用指令的應(yīng)用l 實(shí)現(xiàn)兩操作數(shù)按位相與的運(yùn)算實(shí)現(xiàn)兩操作數(shù)按位相與的運(yùn)算AND BLAND BL,SISIl 使目標(biāo)操作數(shù)的某些位不變,某些位清零使目標(biāo)操作數(shù)的某些位不變,某些位清零AND ALAND AL,0FH0FHl 在操作數(shù)不變的情況下使在操作數(shù)不變的情況下使CFCF和和OFOF清零清零AND AXAND AX,AXAX例例 從地址為從地址為3F8H3F8H端口中讀入一個(gè)字節(jié)數(shù),如果該數(shù)

45、端口中讀入一個(gè)字節(jié)數(shù),如果該數(shù)bit1bit1位為位為1 1,則可從,則可從3838FHFH端口將端口將DATADATA為首地址的一個(gè)字輸出,為首地址的一個(gè)字輸出,否則就不能進(jìn)行數(shù)據(jù)傳送。編寫相應(yīng)的程序段。否則就不能進(jìn)行數(shù)據(jù)傳送。編寫相應(yīng)的程序段。開開 始始取待輸出數(shù)的取待輸出數(shù)的偏移地址偏移地址讀入狀態(tài)字讀入狀態(tài)字測(cè)試測(cè)試bit1位狀態(tài)位狀態(tài)Bit1=1?取輸入口地址取輸入口地址取輸出口地址取輸出口地址 輸出一個(gè)字輸出一個(gè)字NY LEA SILEA SI,DATADATA MOV DX MOV DX,3F8H3F8H WATT WATT:IN ALIN AL,DXDX AND AL AND

46、AL,02H02H JZ WATT JZ WATT ;ZF=1ZF=1轉(zhuǎn)移轉(zhuǎn)移 MOV DX MOV DX,38FH38FH MOV AX MOV AX,SISI OUT DX OUT DX,AXAX(2 2)“或或”運(yùn)算指令運(yùn)算指令ORORl 格式:格式: OR OPRD1OR OPRD1,OPRD2OPRD2l 操作:操作: 兩操作數(shù)相兩操作數(shù)相“或或”,結(jié)果送目標(biāo)地址。,結(jié)果送目標(biāo)地址。 “或或”指令的應(yīng)用指令的應(yīng)用l 實(shí)現(xiàn)兩操作數(shù)相實(shí)現(xiàn)兩操作數(shù)相“或或”的運(yùn)算的運(yùn)算 OR AXOR AX,DIDIl 使某些位不變,某些位置使某些位不變,某些位置“1”“1” OR CLOR CL,0FH

47、0FHl 在不改變操作數(shù)的情況下使在不改變操作數(shù)的情況下使OF=CF=0OF=CF=0 OR AXOR AX,AXAX 例例奇偶校驗(yàn)奇偶校驗(yàn)例例 OR ALOR AL,ALAL JPE GOON JPE GOON OR AL OR AL,80H80H GOONGOON:.PF=1轉(zhuǎn)移轉(zhuǎn)移(3)“非非”運(yùn)算指令運(yùn)算指令格式: NOT OPRD操作: 操作數(shù)按位取反再送回原地址注: 指令中的操作數(shù)不能是立即數(shù) 指令的執(zhí)行對(duì)標(biāo)志位無影響例:NOT BYTE PTRBX(4)“異或異或”運(yùn)算指令運(yùn)算指令 格式: XOR OPRD1,OPRD2 操作: 兩操作數(shù)相“異或”,結(jié)果送目標(biāo)地址 例: XOR

48、BL,80H XOR AX,AX(5 5)“測(cè)試測(cè)試”指令指令TESTTEST 格式: TEST OPRD1,OPRD2 操作: 執(zhí)行“與”運(yùn)算,但運(yùn)算的結(jié)果不送回目標(biāo)地址,只是影響標(biāo)志位。 應(yīng)用: 常用于測(cè)試某些位的狀態(tài) 例: TEST AL,02H;若AL中D1位為1,則ZF=0,否則ZF=1 TEST AX,8000H;若AX中最高位為1,則ZF=0,否則ZF=1 非循環(huán)移位指令非循環(huán)移位指令 循環(huán)移位指令循環(huán)移位指令注:注:n 移動(dòng)一位時(shí)由指令直接給出;移動(dòng)一位時(shí)由指令直接給出;n 移動(dòng)兩位及以上,則移位次數(shù)由移動(dòng)兩位及以上,則移位次數(shù)由CLCL指定。指定。3.4.3.2 3.4.3.

49、2 移位指令移位指令(1 1)非循環(huán)移位)非循環(huán)移位指令指令邏輯左移邏輯左移SHLSHL算術(shù)左移算術(shù)左移SALSAL邏輯右移邏輯右移SHRSHR算術(shù)右移算術(shù)右移SARSARl 左移可實(shí)現(xiàn)乘法運(yùn)算l 右移可實(shí)現(xiàn)除法運(yùn)算 算術(shù)左移和邏輯左移算術(shù)左移和邏輯左移l 算術(shù)左移指算術(shù)左移指 令:令: SAL OPRD SAL OPRD,1 1 SAL OPRD SAL OPRD,CLCLl 邏輯左移指邏輯左移指 令:令: SHL OPRD SHL OPRD,1 1 SHL OPRD SHL OPRD,CLCL有符號(hào)數(shù)有符號(hào)數(shù)無符號(hào)數(shù)無符號(hào)數(shù)0CF 在移動(dòng)次數(shù)為1的情況下,若移位之后,操作數(shù)的最高位與CF標(biāo)

50、志位的值不相等,則溢出標(biāo)志位OF=1,否則OF=0.此外,指令還影響標(biāo)志位PF、SF和ZF。 SHL指令和SAL指令的區(qū)別是:邏輯左移指令SHL將操作數(shù)視為無符號(hào)數(shù),而算術(shù)左移指令SAL將操作數(shù)視為有符號(hào)數(shù)。OF=1對(duì)SHL指令不表示左移后溢出,而對(duì)SAL指令表示移位后超出了符號(hào)數(shù)的表示范圍。例:例: MOV AL,41H SHL AL,1 執(zhí)行結(jié)果:(AL)=82H,CF=0,OF=1.若視82H位無符號(hào)數(shù),則它沒有溢出(82H7FH),因?yàn)橐莆缓笳龜?shù)變成了負(fù)數(shù)。 邏輯右移邏輯右移SHRl 格式:格式: SHR OPRDSHR OPRD,1 1 SHR OPRD SHR OPRD,CLCL0

51、CF無符號(hào)數(shù)的右移無符號(hào)數(shù)的右移它將目標(biāo)操作數(shù)視為無符號(hào)數(shù),其操作是將目的操作數(shù)順序向右移1位或CL指定的位數(shù),每右移1位,右邊的最低位移入標(biāo)志位CF,而在左邊的最高位補(bǔ)零。 SHR指令也影響標(biāo)志位CF和OF。如果移動(dòng)次數(shù)為1,且移位之后新的最高位和次高位不相等,則標(biāo)志位OF=1,否則OF=0。若移位次數(shù)不為1,則OF狀態(tài)不定。108 例例1:MOV ALMOV AL,68H68HMOV CLMOV CL,2 2SHR ALSHR AL,CLCL0CF0 1 1 0 1 0 0 0 AL0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 ALCF0 0移動(dòng)移動(dòng)1次次

52、移動(dòng)移動(dòng)2次次例例2 2 將1000H開始存放的4個(gè)壓縮BCD碼轉(zhuǎn)換為ASCII碼存放在3000H開始的單元中去。12H34H56H78H1000H3000H MOV SI,1000HMOV SI,1000H MOV DI,3000H MOV DI,3000H MOV CX,4 MOV CX,4NextNext:MOV AL,SIMOV AL,SI MOV BL,ALMOV BL,AL AND AL,0FH AND AL,0FH OR AL,30H OR AL,30H MOV DI,ALMOV DI,AL INC DI INC DI MOV AL,BL MOV AL,BLPUSH CXPUSH

53、 CXMOV CL,4MOV CL,4 算術(shù)右移算術(shù)右移l 格式:格式: SAR OPRDSAR OPRD,1 1 SAR OPRD SAR OPRD,CLCL有符號(hào)數(shù)有符號(hào)數(shù)的右移的右移CF SAR指令將目標(biāo)操作數(shù)視為有符號(hào)數(shù),格式與SHR相同。指令的操作是將目標(biāo)操作數(shù)順序向右移1位或CL指定的位數(shù),操作數(shù)最低位移入標(biāo)志位CF。 與SHR指令的區(qū)別是:算術(shù)右移時(shí)最高位不是補(bǔ)零,而是保持不變。 對(duì)標(biāo)志位CF、OF、PF、SF和ZF有影響,但使AF值不定。(2)循環(huán)移位指令)循環(huán)移位指令不帶進(jìn)位的循環(huán)移位不帶進(jìn)位的循環(huán)移位帶進(jìn)位位的循環(huán)移位帶進(jìn)位位的循環(huán)移位左移左移 ROLROL右移右移 ROR

54、ROR左移左移 RCLRCL右移右移 RCRRCR指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同不帶進(jìn)位的循環(huán)移位不帶進(jìn)位的循環(huán)移位CFCF左移 ROL右移 ROR帶進(jìn)位的循環(huán)移位帶進(jìn)位的循環(huán)移位CFCF左移 RCL右移 RCR3.4.4 3.4.4 串操作指令串操作指令 針對(duì)數(shù)據(jù)塊或字符串的操作; 可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送; 待操作的數(shù)據(jù)串稱為源串,目標(biāo)地址稱為目標(biāo)串。 源串一般存放在DS段,偏移地址由SI指定,允許段重設(shè);目標(biāo)串必須在ES段,偏移地址由DI指定;指令自動(dòng)修改地址指針,修改方向由DF決定。 DF=0 DF=1 數(shù)據(jù)塊長(zhǎng)度值由CX

55、指定 可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改CX內(nèi)容。增地址方向減地址方向 重復(fù)前綴重復(fù)前綴l 無條件重復(fù)無條件重復(fù) REPREPl 條件重復(fù)條件重復(fù) REPE REPE 相等重復(fù)相等重復(fù) REPZ REPZ 為零重復(fù)為零重復(fù) REPNE REPNE 不相等重復(fù)不相等重復(fù) REPNZ REPNZ 不為零重復(fù)不為零重復(fù)CX0 ZF=1CX0 ZF=1CX0 ZF=0CX0 ZF=0CX0 重復(fù)重復(fù) 串操作指令流程串操作指令流程( (以傳送操作為例以傳送操作為例) )取源串地址取源串地址取目標(biāo)串地址取目標(biāo)串地址設(shè)串長(zhǎng)度設(shè)串長(zhǎng)度傳送一個(gè)字節(jié)或字傳送一個(gè)字節(jié)或字修改地址指針修改地址指針修改串長(zhǎng)度值修改串長(zhǎng)度

56、值傳送完否?傳送完否?NY設(shè)操作方向設(shè)操作方向 串操作指令串操作指令l 串傳送串傳送 MOVSMOVSl 串比較串比較 CMPSCMPSl 串掃描串掃描 SCASSCASl 串裝入串裝入 LODSLODSl 串送存串送存 STOSSTOS(1 1)串傳送指令)串傳送指令 格式:格式: MOVS OPRD1MOVS OPRD1,OPRD2 OPRD2 ;多用在需要段超越的場(chǎng)合;多用在需要段超越的場(chǎng)合 MOVSB MOVSB ;隱含了操作數(shù)地址,源串和目標(biāo)串地址取默認(rèn)值;隱含了操作數(shù)地址,源串和目標(biāo)串地址取默認(rèn)值 MOVSW MOVSW ;與;與MOVSBMOVSB類似,差別是該指令一次傳送一個(gè)字

57、類似,差別是該指令一次傳送一個(gè)字 串傳送指令常與無條件重復(fù)前綴連用串傳送指令常與無條件重復(fù)前綴連用串傳送指令允許進(jìn)行內(nèi)存單元到內(nèi)存單元的數(shù)據(jù)傳送,解決了MOV指令不能直接在內(nèi)存單元之間傳送數(shù)據(jù)的限制。例 對(duì)比用MOV指令和MOVS指令實(shí)現(xiàn)將200個(gè)字節(jié)數(shù)據(jù)從內(nèi)存的一個(gè)區(qū)域送到另一個(gè)區(qū)域的程序段。LEA SI,MEM1LEA DI,MEM2MOV CX,200CLDREP MOVSBHLT(2 2)串比較指令)串比較指令 格式: CMPS OPRD1,OPRD2 CMPSB CMPSW 串比較指令常與條件重復(fù)前綴連用,指令的執(zhí)行不改變操作數(shù),僅影響標(biāo)志位。 前綴的操作對(duì)標(biāo)志位不影響將源串地址中的

58、字節(jié)(或字)與目標(biāo)串地址中的字節(jié)(或字)相比較,但比較(相減)結(jié)果不送回目標(biāo)串地址中,而是反映在標(biāo)志位上。例例測(cè)試200個(gè)字節(jié)數(shù)據(jù)是否傳送正確:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH JZ STOP STOP:HLT (3 3)串掃描指令)串掃描指令格式:格式: SCAS OPRDSCAS OPRD SCASB SCASB SCASW SCASW執(zhí)行與執(zhí)行與CMPSCMPS指令相似的操作,只是這里的源操作指令相似的操作,只是這里的源操作數(shù)是數(shù)是AXAX或或ALAL。常用于在指定存儲(chǔ)區(qū)域中尋找某個(gè)關(guān)鍵字。目目 標(biāo)標(biāo)

59、操作數(shù)操作數(shù)(4)串裝入指令)串裝入指令格式:格式: LODS OPRDLODS OPRD LODSB LODSB LODSW LODSW操作:操作:l對(duì)字節(jié):對(duì)字節(jié):l對(duì)對(duì) 字:字:源操作數(shù)源操作數(shù)DS:SIDS:SIDS:SIDS:SIALALAXAX用于將內(nèi)存某個(gè)區(qū)域的數(shù)據(jù)串依次裝入累加器,以便顯示或輸出到接口。LODS指令一般不加重復(fù)前綴。(5 5)串存儲(chǔ)指令)串存儲(chǔ)指令 格式:格式: STOS OPRDSTOS OPRD STOSB STOSB STOSW STOSW 操作:操作:l對(duì)字節(jié):對(duì)字節(jié): ALALl對(duì)對(duì) 字:字: AXAX目目 標(biāo)標(biāo)操作數(shù)操作數(shù)ES:DIES:DI常用于將

60、內(nèi)存某個(gè)區(qū)域置同樣的值此時(shí):l將待送存的數(shù)據(jù)放入AL(字節(jié)數(shù))或AX(字?jǐn)?shù)據(jù))l確定操作方向(增地址/減地址)和區(qū)域大?。ùL(zhǎng)度值)l使用串存儲(chǔ)指令+無條件重復(fù)前綴,實(shí)現(xiàn)數(shù)據(jù)傳送例將內(nèi)存某單元清零。設(shè)計(jì)思想如下: 區(qū)域首地址送區(qū)域首地址送ES:DI串長(zhǎng)度送串長(zhǎng)度送CX置方向標(biāo)志置方向標(biāo)志DF0送累加器送累加器AL執(zhí)行串送存指令執(zhí)行串送存指令 轉(zhuǎn)移指令轉(zhuǎn)移指令 循環(huán)控制循環(huán)控制 過程調(diào)用過程調(diào)用 中斷控制中斷控制3.4.5 3.4.5 程序控制指令程序控制指令 程序的執(zhí)行方向程序的執(zhí)行方向l 程序控制類指令的本質(zhì)是:程序控制類指令的本質(zhì)是:控制程序的執(zhí)行方向控制程序的執(zhí)行方向l 決定程序執(zhí)行方向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論