微機接口第4章8086指令系統(tǒng)ppt課件_第1頁
微機接口第4章8086指令系統(tǒng)ppt課件_第2頁
微機接口第4章8086指令系統(tǒng)ppt課件_第3頁
微機接口第4章8086指令系統(tǒng)ppt課件_第4頁
微機接口第4章8086指令系統(tǒng)ppt課件_第5頁
已閱讀5頁,還剩72頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、微機原理與接口技術微機原理與接口技術徐建平徐建平 成貴學成貴學第第4 4章章 8086 8086指令系統(tǒng)下)指令系統(tǒng)下)【本章內容提要】【本章內容提要】 n掌握字符串操作指令的功能與用法掌握字符串操作指令的功能與用法n掌握處理器控制類指令的功能與用法掌握處理器控制類指令的功能與用法n掌握程序控制類指令的功能與用法掌握程序控制類指令的功能與用法4.1 字符串操作指令字符串操作指令n存儲器中若干個連續(xù)地址存儲的字符稱存儲器中若干個連續(xù)地址存儲的字符稱為字符串,一個字符串可能包含若干個為字符串,一個字符串可能包含若干個字節(jié)或字。字節(jié)或字。n字符串操作指令用于對存儲器中的字節(jié)字符串操作指令用于對存儲器

2、中的字節(jié)串或字串進行處理。串或字串進行處理。n字符串操作指令可以在兩組存儲單元之字符串操作指令可以在兩組存儲單元之間進行操作。間進行操作。n源串源操作數(shù)一般存放在當前數(shù)據(jù)段中,即源串源操作數(shù)一般存放在當前數(shù)據(jù)段中,即寄存器寄存器DSDS中的內容為其段地址,寄存器中的內容為其段地址,寄存器SISI中的內中的內容為其偏移地址,因此,源串地址為容為其偏移地址,因此,源串地址為DSDS:SISI;n目的串目的操作數(shù)一般存放在附加數(shù)據(jù)段目的串目的操作數(shù)一般存放在附加數(shù)據(jù)段ESES中,即寄存器中,即寄存器ESES中的內容為其段地址,寄存器中的內容為其段地址,寄存器DIDI中的內容為其偏移地址,因此,目的串

3、地址為中的內容為其偏移地址,因此,目的串地址為ESES:DIDI。n另外,若要使用重復前綴指令時,字符串的長度另外,若要使用重復前綴指令時,字符串的長度必須存放在必須存放在CXCX寄存器中。寄存器中。n每次執(zhí)行字符串操作后,每次執(zhí)行字符串操作后,SISI和和DIDI中的內容中的內容會自動修改,從而指向下一個字節(jié)或字。會自動修改,從而指向下一個字節(jié)或字。 nSISI和和DIDI的修改方式取決于標志位的修改方式取決于標志位DFDF的值:的值:n如果如果DFDF0 0,則字符串操作由低地址向高地,則字符串操作由低地址向高地址進行,址進行,SISI和和DIDI的值自動增加;的值自動增加;n如果如果DF

4、DF1 1,則字符串操作由高地址向低地,則字符串操作由高地址向低地址進行,址進行,SISI和和DIDI的值自動減少。的值自動減少。 n增減量的大小取決于操作數(shù)類型:字節(jié)操作增減量的大小取決于操作數(shù)類型:字節(jié)操作時,增減量為時,增減量為1 1;字操作時,增減量為;字操作時,增減量為2 2。n字節(jié)型和字型數(shù)據(jù)對應的指令的助記符為字節(jié)型和字型數(shù)據(jù)對應的指令的助記符為B B和和W W。4.1.1 基本串操作指令基本串操作指令 1串傳送指令串傳送指令n格式:格式:MOVSBMOVSB字節(jié)串傳送)字節(jié)串傳送)n 或或MOVSWMOVSW字串傳送)字串傳送)n 或或MOVS DSTMOVS DST,SRCS

5、RCn功能:將功能:將SISI所指向的源串中的一個字節(jié)或所指向的源串中的一個字節(jié)或字傳送到字傳送到DIDI所指向的目的串中。所指向的目的串中。n留意:該指令對標志位無影響。留意:該指令對標志位無影響。 n在執(zhí)行串傳送指令前,一般要預先設置在執(zhí)行串傳送指令前,一般要預先設置源串地址源串地址DSDS:SISI、目的串地址、目的串地址ESES:DIDI和和方向標志位方向標志位DFDF的值。的值。n方向標志位方向標志位DFDF的設置方法為:的設置方法為:CLDCLD指令可指令可將將DFDF的設置為的設置為0 0;STDSTD指令可將指令可將DFDF的值設的值設置為置為1 1。2串比較指令串比較指令n格

6、式:格式:CMPSBCMPSB字節(jié)串比較)字節(jié)串比較)n 或或CMPSWCMPSW字串比較)字串比較)n 或或CMPS DSTCMPS DST,SRCSRCn功能:將功能:將SISI所指向的源串中的一個字節(jié)或字所指向的源串中的一個字節(jié)或字與與DIDI所指向的目的串中的一個字節(jié)或字相減,所指向的目的串中的一個字節(jié)或字相減,不保存結果,只是根據(jù)結果設置標志位。不保存結果,只是根據(jù)結果設置標志位。n留意:受影響的標志位有:留意:受影響的標志位有:OFOF、SFSF、ZFZF、AFAF、PFPF和和CFCF。n在執(zhí)行串比較指令前,一般要預先設置在執(zhí)行串比較指令前,一般要預先設置源串地址源串地址DSDS

7、:SISI、目的串地址、目的串地址ESES:DIDI和和方向標志位方向標志位DFDF的值,方法同上。的值,方法同上。 3串掃描指令串掃描指令n格式:格式:SCASBSCASB字節(jié)串掃描)字節(jié)串掃描)n 或或SCASWSCASW字串掃描)字串掃描)n 或或SCAS DSTSCAS DSTn功能:將寄存器功能:將寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操作中字操作中的內容與的內容與DIDI所指向的目的串中的一個字節(jié)或字相減,所指向的目的串中的一個字節(jié)或字相減,不保存結果,只是根據(jù)結果設置標志位。不保存結果,只是根據(jù)結果設置標志位。n留意:受影響的標志位有:留意:受影響的標志位有:OFOF、SF

8、SF、ZFZF、AFAF、PFPF和和CFCF。 n在執(zhí)行串掃描指令前,一般要預先設置寄存在執(zhí)行串掃描指令前,一般要預先設置寄存器器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方向標和方向標志位志位DFDF的值。的值。 4 4串裝入指令串裝入指令n格式:格式:LODSBLODSB字節(jié)串裝入)字節(jié)串裝入)n 或或LODSWLODSW字串裝入)字串裝入)n 或或LODS SRCLODS SRCn功能:將功能:將SISI所指向的源串中的一個字節(jié)或字所指向的源串中的一個字節(jié)或字送入寄存器送入寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操作字操作中。中。n留意:此指令對標志位無影

9、響。留意:此指令對標志位無影響。n在執(zhí)行串裝入指令前,一般要預先設置在執(zhí)行串裝入指令前,一般要預先設置源串地址源串地址DSDS:SISI和方向標志位和方向標志位DFDF的值。的值。此指令一般不使用重復前綴。此指令一般不使用重復前綴。5 5串存儲指令串存儲指令n格式:格式:STOSBSTOSB字節(jié)存儲)字節(jié)存儲)n 或或STOSWSTOSW字存儲)字存儲)n 或或STOS DSTSTOS DSTn功能:將寄存器功能:將寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操字操作中的一個字節(jié)或字存入作中的一個字節(jié)或字存入DIDI所指向的目的所指向的目的串中。串中。n留意:此指令對標志位無影響。留意:此指令

10、對標志位無影響。n在執(zhí)行串存儲指令前,一般要預先設置寄在執(zhí)行串存儲指令前,一般要預先設置寄存器存器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方和方向標志位向標志位DFDF的值。的值。4.1.2 4.1.2 重復前綴指令重復前綴指令n基本串操作指令每完成一次操作后,只能對基本串操作指令每完成一次操作后,只能對字符串中的一個字節(jié)或字進行操作,字符串中的一個字節(jié)或字進行操作,n若要對一個字節(jié)串或字串進行操作,就要在若要對一個字節(jié)串或字串進行操作,就要在這些指令的前面加一個重復前綴,使該指令這些指令的前面加一個重復前綴,使該指令能重復執(zhí)行。能重復執(zhí)行。n使用重復前綴指令前,先

11、要將字符串的長度使用重復前綴指令前,先要將字符串的長度裝入裝入CXCX寄存器,每執(zhí)行一次基本串操作指令寄存器,每執(zhí)行一次基本串操作指令后,后,CXCX的值自動減的值自動減1 1,直到,直到CXCX0 0。1REP前綴n格式:格式:REP REP 串操作指令串操作指令n功能:重復執(zhí)行串操作指令,直到功能:重復執(zhí)行串操作指令,直到CXCX中的值中的值為為0 0時結束操作。時結束操作。 n串傳送指令與串傳送指令與REPREP連用,常用于從存儲器到連用,常用于從存儲器到存儲器的字符串成塊傳送,可簡化程序,存儲器的字符串成塊傳送,可簡化程序,提高程序運行速度。提高程序運行速度。n串存儲指令與串存儲指令與

12、REPREP連用,常用于對某一存儲連用,常用于對某一存儲區(qū)域進行初始化。區(qū)域進行初始化。2REPE/REPZ前綴n格式:格式:REPE/REPZ REPE/REPZ 串比較或串掃描指令串比較或串掃描指令n功能:在執(zhí)行串比較或串掃描指令時,若功能:在執(zhí)行串比較或串掃描指令時,若CX0CX0且且ZFZF1 1要比較的兩個字節(jié)或字相等或要比較的兩個字節(jié)或字相等或相減為零時重復執(zhí)行串比較或串掃描指令;相減為零時重復執(zhí)行串比較或串掃描指令;否則,結束操作。否則,結束操作。3REPNE/REPNZ前綴n格式:格式:REPNE/REPNZ REPNE/REPNZ 串比較或串掃描指令串比較或串掃描指令n功能:

13、在執(zhí)行串比較或串掃描指令時,若功能:在執(zhí)行串比較或串掃描指令時,若CX0CX0且且ZFZF0 0要比較的兩個字節(jié)或字不相要比較的兩個字節(jié)或字不相等或相減不為零時重復執(zhí)行串比較或串掃等或相減不為零時重復執(zhí)行串比較或串掃描指令;否則,結束操作。描指令;否則,結束操作。n串比較指令與串比較指令與REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ連用,連用,常用于判斷兩個字符串是否相等。常用于判斷兩個字符串是否相等。n串掃描指令與串掃描指令與REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ連用,連用,常用于搜索字符串中是否存在某個特

14、定的字常用于搜索字符串中是否存在某個特定的字符。符。留意:留意:n重復前綴指令不能單獨使用,后面必須跟重復前綴指令不能單獨使用,后面必須跟基本串操作指令?;敬僮髦噶?。n重復前綴指令不影響標志位。重復前綴指令不影響標志位。【例【例4-1】n將將1000H1000H:0200H0200H地址開始的地址開始的100100個字節(jié)傳送個字節(jié)傳送到到2000H:1000H2000H:1000H開始的存儲單元中。程序段開始的存儲單元中。程序段如下:如下:MOV AXMOV AX,1000H 1000H MOV DSMOV DS,AXAX ; ;設置源串段地址設置源串段地址MOV AXMOV AX,200

15、0H 2000H MOV ESMOV ES,AXAX ; ;設置目的串段地址設置目的串段地址MOV SIMOV SI,0200H0200H; ;設置源串偏移地址設置源串偏移地址MOV DIMOV DI,1000H1000H; ;設置目的串偏移地址設置目的串偏移地址MOV CXMOV CX,100100 ; ;將串的長度送入將串的長度送入CXCXCLDCLD ; ;將將DFDF置為置為0 0,地址自動遞增,地址自動遞增REP MOVSBREP MOVSB; ;重復執(zhí)行串傳送指令,每次重復執(zhí)行串傳送指令,每次傳送一個字節(jié)傳送一個字節(jié)n【例【例4-2】 對附加段中從對附加段中從BUFF開始的開始的1

16、00個連續(xù)的內存單元進行清個連續(xù)的內存單元進行清0操作。程操作。程序段如下:序段如下:LEA DILEA DI,BUFFBUFF; ;將目的串的偏移地址送入將目的串的偏移地址送入DIDIMOV ALMOV AL,00H00H ; ;將將0 0送入送入ALALMOV CXMOV CX,100100 ; ;將串的長度送入將串的長度送入CXCXCLDCLD ; ;將將DFDF置為置為0 0,地址自動遞增,地址自動遞增REP STOSBREP STOSB; ;重復執(zhí)行串存儲指令,將重復執(zhí)行串存儲指令,將100100 ; ;個連續(xù)的內存單元清個連續(xù)的內存單元清0 04.2 4.2 處理器控制類指令處理器

17、控制類指令n處理器控制類指令用于對處理器控制類指令用于對CPUCPU進行控制。進行控制。4.2.1 4.2.1 標志位操作指令標志位操作指令n標志位操作指令共標志位操作指令共7 7條,用于設置標志位條,用于設置標志位CFCF、DFDF和和IFIF的值,對其他標志位無影響,如表的值,對其他標志位無影響,如表4-14-1所示。所示。 4.2.2 外部同步指令外部同步指令n外部同步指令共外部同步指令共5 5條,用于控制處理器的狀條,用于控制處理器的狀態(tài),它們的操作不影響標志位,如表態(tài),它們的操作不影響標志位,如表4-24-2所所示。示。實訓實訓4-1 4-1 尋找字符串中指定字符尋找字符串中指定字符

18、n【算法分析】【算法分析】n在文章的每一段開頭,一般要縮進幾個空格。在文章的每一段開頭,一般要縮進幾個空格。現(xiàn)有一個以空格開頭的字符串,找出其中第現(xiàn)有一個以空格開頭的字符串,找出其中第一個非空格字符,并把其偏移地址存入指定一個非空格字符,并把其偏移地址存入指定內存單元內存單元ADDRADDR中。中。n首先,將字符串首地址送入首先,將字符串首地址送入DIDI,設置字符串,設置字符串操作方向,將字符串長度送入操作方向,將字符串長度送入CXCX,并為,并為ADDRADDR設置初值。設置初值。n重復執(zhí)行傳掃描指令,直到找到第一個非空重復執(zhí)行傳掃描指令,直到找到第一個非空格字符,使格字符,使DIDI指向

19、第一個非空格字符,并將指向第一個非空格字符,并將其偏移地址存入其偏移地址存入ADDRADDR。n若未找到非空格字符,則程序結束。若未找到非空格字符,則程序結束?!驹闯绦颉緿SEG SEGMENT;DSEG SEGMENT;數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲空間數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲空間 STR DB This is a string!$ STR DB This is a string!$ ; ;定義源字符串定義源字符串 NUM EQU $-STR NUM EQU $-STR ;NUM;NUM為字符串為字符串STRSTR的長度的長度DSEG ENDSDSEG ENDSESEG SEGME

20、NT ESEG SEGMENT ; ;附加段附加段 DB NUM DUP (?) DB NUM DUP (?)ESEG ENDSESEG ENDSSSEG SEGMENT STACKSSEG SEGMENT STACK; ;堆棧段堆棧段 DB 100 DUP (?) DB 100 DUP (?)SSEG ENDSSSEG ENDSCSEG SEGMENTCSEG SEGMENT; ;代碼段代碼段ASSUME CS: CSEG, DS: DSEG, SS: SSEG, ES: ESEGASSUME CS: CSEG, DS: DSEG, SS: SSEG, ES: ESEGSTART: STAR

21、T: MOV AX, DSEG MOV AX, DSEG; ;將源串的段地址送入數(shù)據(jù)段寄存器將源串的段地址送入數(shù)據(jù)段寄存器MOV DS, AXMOV DS, AXLEA DI, STRLEA DI, STR; ;將字符串的首地址送入將字符串的首地址送入DIDICLDCLD ; ;設置方向標志,使設置方向標志,使DFDF0 0MOV CX, NUMMOV CX, NUM; ;將字符串長度將字符串長度NUMNUM送入送入CXCX MOV AL, 20H MOV AL, 20H; ;將空格字符的將空格字符的ASCIIASCII碼送入碼送入ALAL MOV ADDR, 0FFFFH MOV ADDR,

22、 0FFFFH; ;將將ADDRADDR的初始值設為的初始值設為0FFFFH0FFFFHREPZ SCASB ;REPZ SCASB ;若當前字符是空格,若當前字符是空格, ; ;則重復執(zhí)行串掃描指令則重復執(zhí)行串掃描指令 JZ EXIT JZ EXIT ; ;若全部是空格,則程序轉移至若全部是空格,則程序轉移至EXITEXIT DEC DI DEC DI ; ;使使DIDI指向第一個非空格字符指向第一個非空格字符 MOV ADDR, DI MOV ADDR, DI; ;將第一個非空格字符的偏移地址存入將第一個非空格字符的偏移地址存入ADDRADDREXIT: MOV AH, 4CH;系統(tǒng)功能調

23、用, ;結束程序返回DOS INT 21H CSEG ENDSEND START4.3 程序控制類指令程序控制類指令n一般情況下,一般情況下,CPUCPU執(zhí)行程序是按照指令的順執(zhí)行程序是按照指令的順序逐條執(zhí)行的,但實際上很多時候都需要改序逐條執(zhí)行的,但實際上很多時候都需要改變程序的執(zhí)行順序,使程序直接轉移到目標變程序的執(zhí)行順序,使程序直接轉移到目標位置去執(zhí)行,這時就要使用程序控制類指令位置去執(zhí)行,這時就要使用程序控制類指令來控制程序的轉向。來控制程序的轉向。4.3.1 無條件轉移指令無條件轉移指令n無條件轉移指令是指,不需要判斷條件,程序直接無條件轉移指令是指,不需要判斷條件,程序直接跳轉到目

24、標地址處去執(zhí)行。跳轉到目標地址處去執(zhí)行。n無條件轉移指令可分為段內轉移和段間轉移兩大類。無條件轉移指令可分為段內轉移和段間轉移兩大類。n段內轉移是指程序在當前代碼段內進行轉移,這時段內轉移是指程序在當前代碼段內進行轉移,這時只需改變只需改變IPIP寄存器中的內容,寄存器中的內容,CSCS寄存器中的內容不寄存器中的內容不變,即可指定目標地址;變,即可指定目標地址;n段間轉移是指程序由當前代碼段轉移到另一個代碼段間轉移是指程序由當前代碼段轉移到另一個代碼段去執(zhí)行,這時需要指定新的段地址和偏移地址,段去執(zhí)行,這時需要指定新的段地址和偏移地址,即即CSCS寄存器和寄存器和IPIP寄存器中的內容都將改變

25、。寄存器中的內容都將改變。1 1段內直接短轉移段內直接短轉移n格式:格式:JMP SHORT OPRJMP SHORT OPRn功能:功能:SHORTSHORT表明程序轉移的目標地址與表明程序轉移的目標地址與JMPJMP指令在同一個代碼段內,操作數(shù)可以是目標指令在同一個代碼段內,操作數(shù)可以是目標地址的標號或指定一個地址的標號或指定一個8 8位的偏移量,轉移范位的偏移量,轉移范圍為圍為-128127-128127字節(jié)。字節(jié)。SHORTSHORT可省略??墒÷?。n指令執(zhí)行后,指令執(zhí)行后,CSCS的內容不變,的內容不變,IPIP的值即的值即JMPJMP指令的下一條指令與指令的下一條指令與8 8位偏移

26、量之和被賦于位偏移量之和被賦于當前的當前的IPIP?!纠纠?-3】 JMP SHORT NEXT L: MOV AL, 12H NEXT: MOV CX, 1234H 分析:分析:JMP指令中的指令中的NEXT是一個段內指令標號,它代表了標是一個段內指令標號,它代表了標號號L和和NEXT之間的偏移量,設此偏移量為之間的偏移量,設此偏移量為08H。執(zhí)行執(zhí)行JMP指令時,如果當前指令時,如果當前IP的內容為的內容為1000H此時此時IP已指向已指向標號標號L處),標號處),標號NEXT的偏移地址為的偏移地址為1000H08H=1008H,即即IP的內容更新為的內容更新為1008H。2 2段內直接

27、近轉移段內直接近轉移n格式:格式:JMP NEAR PTR OPRJMP NEAR PTR OPRn功能:功能:NEAR PTRNEAR PTR表明程序轉移的目標地址與表明程序轉移的目標地址與JMPJMP指指令在同一個代碼段內,操作數(shù)可以是目標地址的標令在同一個代碼段內,操作數(shù)可以是目標地址的標號或指定一個號或指定一個1616位的偏移量,轉移范圍為位的偏移量,轉移范圍為- -32768327673276832767字節(jié)。字節(jié)。NEAR PTRNEAR PTR可省略??墒÷浴指令執(zhí)行后,指令執(zhí)行后,CSCS的內容不變,的內容不變,IPIP的值即的值即JMPJMP指令指令的下一條指令與的下一條指

28、令與1616位偏移量之和被賦于當前的位偏移量之和被賦于當前的IPIP。3 3段內間接轉移段內間接轉移n格式:格式:JMP WORD PTR OPRJMP WORD PTR OPRn功能:程序轉移的目標地址與功能:程序轉移的目標地址與JMPJMP指令在同一個代指令在同一個代碼段內,指令中的操作數(shù)是碼段內,指令中的操作數(shù)是1616位寄存器或存儲器單位寄存器或存儲器單元元n段內轉移的偏移地址存放在段內轉移的偏移地址存放在1616位寄存器或存儲器中位寄存器或存儲器中連續(xù)兩個字節(jié)的存儲單元中。使用寄存器作為操作連續(xù)兩個字節(jié)的存儲單元中。使用寄存器作為操作數(shù)時,數(shù)時,WORD PTRWORD PTR省略,

29、如省略,如JMP BXJMP BX。n指令執(zhí)行后,指令執(zhí)行后,CSCS的內容不變,寄存器中的內容或存的內容不變,寄存器中的內容或存儲器中指定地址開始的連續(xù)兩個字節(jié)單元的內容被儲器中指定地址開始的連續(xù)兩個字節(jié)單元的內容被賦于當前的賦于當前的IPIP。4 4段間直接轉移段間直接轉移n格式:格式:JMP FAR PTR OPRJMP FAR PTR OPRn功能:功能:FAR PTRFAR PTR表明程序轉移的目標地址與表明程序轉移的目標地址與JMPJMP指令指令不在同一個代碼段內不在同一個代碼段內n操作數(shù)可以是目標地址的標號,指令操作碼后的連操作數(shù)可以是目標地址的標號,指令操作碼后的連續(xù)兩個字給出

30、轉移后的偏移地址低續(xù)兩個字給出轉移后的偏移地址低1616位和段地位和段地址高址高1616位)。位)。FAR PTRFAR PTR可省略。可省略。n指令執(zhí)行后,段地址和偏移地址分別被賦于當前的指令執(zhí)行后,段地址和偏移地址分別被賦于當前的CSCS和和IPIP,程序轉移到另一個代碼段中相應位置去執(zhí),程序轉移到另一個代碼段中相應位置去執(zhí)行。行。5 5段間間接轉移段間間接轉移n格式:格式:JMP DWORD PTR OPRJMP DWORD PTR OPRn功能:功能:DWORD PTRDWORD PTR表明程序轉移的目標地址與表明程序轉移的目標地址與JMPJMP指令不在同一個代碼段內指令不在同一個代碼

31、段內n指令中的操作數(shù)是一個雙字存儲器單元,偏移地指令中的操作數(shù)是一個雙字存儲器單元,偏移地址和段地址分別存放在連續(xù)兩個字的存儲單元中。址和段地址分別存放在連續(xù)兩個字的存儲單元中。n指令執(zhí)行后,段地址高指令執(zhí)行后,段地址高1616位和偏移地址低位和偏移地址低1616位分別被賦于當前的位分別被賦于當前的CSCS和和IPIP,程序轉移到另,程序轉移到另一個代碼段中相應位置去執(zhí)行。例如:一個代碼段中相應位置去執(zhí)行。例如:n JMP DWORD PTR BXSI JMP DWORD PTR BXSIn 就是實現(xiàn)段間間接轉移的指令。就是實現(xiàn)段間間接轉移的指令。留意:留意:n無條件轉移指令對標志位無影響。無

32、條件轉移指令對標志位無影響。4.3.2 4.3.2 條件轉移指令條件轉移指令n條件轉移指令是指,根據(jù)當前標志位的狀態(tài)條件轉移指令是指,根據(jù)當前標志位的狀態(tài)來決定程序是否轉移來決定程序是否轉移n若滿足指令的轉移條件,則程序轉移到目標若滿足指令的轉移條件,則程序轉移到目標地址處執(zhí)行;地址處執(zhí)行;n若不滿足條件,則繼續(xù)執(zhí)行下一條指令。若不滿足條件,則繼續(xù)執(zhí)行下一條指令。留意:留意:n所有的條件轉移指令都是短轉移,即轉移的所有的條件轉移指令都是短轉移,即轉移的目標地址必須在當前代碼段內,偏移量的范目標地址必須在當前代碼段內,偏移量的范圍為圍為128127字節(jié)。字節(jié)。n條件轉移指令對標志位無影響。條件轉

33、移指令對標志位無影響。 【例【例4-4】n比較兩個帶符號數(shù)比較兩個帶符號數(shù)A A和和B B的大小,把大數(shù)存的大小,把大數(shù)存入入MAXMAX單元。實現(xiàn)這個過程的程序段如下:單元。實現(xiàn)這個過程的程序段如下: MOV AX, A MOV AX, A; ;將將A A存入存入AXAX MOV BX, B MOV BX, B; ;將將B B存入存入BXBX CMP AX, BX CMP AX, BX; ;比較比較AXAX和和BXBX的大小的大小 JG NEXT JG NEXT;AX;AX大于大于BXBX時程序轉移至時程序轉移至NEXTNEXT MOV MAX, BX MOV MAX, BX;AX;AX小于

34、或等于小于或等于BXBX時,時, ; ;將將BXBX的內容送入的內容送入MAXMAX單元單元 JMP EXIT JMP EXIT; ;程序轉移至程序轉移至EXITEXITNEXT: MOV MAX, AX ; AXNEXT: MOV MAX, AX ; AX大于大于BXBX時,時, ; ;將將AXAX的內容送入的內容送入MAXMAX單元單元EXIT: EXIT: 4.3.3 循環(huán)控制指令循環(huán)控制指令n循環(huán)控制指令是在循環(huán)程序中用來控制循環(huán)的。循環(huán)控制指令是在循環(huán)程序中用來控制循環(huán)的。n循環(huán)控制指令使用循環(huán)控制指令使用CXCX寄存器作為循環(huán)計數(shù)器,因此,寄存器作為循環(huán)計數(shù)器,因此,在使用循環(huán)指令

35、前,必須先將循環(huán)次數(shù)存入在使用循環(huán)指令前,必須先將循環(huán)次數(shù)存入CXCX中。中。n每執(zhí)行一次循環(huán)控制指令,每執(zhí)行一次循環(huán)控制指令,CXCX中的值自動減中的值自動減1 1,然,然后對循環(huán)條件進行判斷。后對循環(huán)條件進行判斷。n若滿足條件,則程序轉移至目標地址處繼續(xù)循環(huán);若滿足條件,則程序轉移至目標地址處繼續(xù)循環(huán);n否則,退出循環(huán),執(zhí)行下一條指令。否則,退出循環(huán),執(zhí)行下一條指令。留意:留意:n循環(huán)控制指令是短轉移,即轉移的目標地址循環(huán)控制指令是短轉移,即轉移的目標地址必須在當前代碼段內,偏移量的范圍為必須在當前代碼段內,偏移量的范圍為128128到到127127字節(jié)。字節(jié)。n循環(huán)指令對標志位無影響。循

36、環(huán)指令對標志位無影響?!纠?-5】 將以將以BUFFERBUFFER開始的開始的100100個內存單元都減去個內存單元都減去1 1,如果,如果某個單元減某個單元減1 1后為后為0 0則不再執(zhí)行此操作。程序段如下:則不再執(zhí)行此操作。程序段如下: MOV DI, 0 MOV DI, 0 ; ;將將DIDI的初始值設為的初始值設為0 0 MOV CX, 100 MOV CX, 100; ;將字節(jié)數(shù)循環(huán)次數(shù)送入將字節(jié)數(shù)循環(huán)次數(shù)送入CXCXLOP:INC DILOP:INC DI; ;地址指針加地址指針加1 1 DEC BUFFERDI DEC BUFFERDI ; ;將當前內存單元中的內容減將當前內存

37、單元中的內容減1 1 LOOPNZ LOP LOOPNZ LOP; ;結果不為結果不為0 0時執(zhí)行循環(huán)時執(zhí)行循環(huán)4.3.4 子程序調用子程序調用n為節(jié)省存儲空間,在程序中常常要將某為節(jié)省存儲空間,在程序中常常要將某些具有獨立功能的程序段單獨作為一個些具有獨立功能的程序段單獨作為一個模塊,這樣的程序模塊稱為子程序。模塊,這樣的程序模塊稱為子程序。n當程序中需要這些功能時,可使用子程當程序中需要這些功能時,可使用子程序調用指令隨時調用這些子程序。序調用指令隨時調用這些子程序。n調用子程序的程序稱為主程序。調用子程序的程序稱為主程序。1段內直接調用段內直接調用n格式:格式:CALL NEAR PTR

38、 OPRn功能:主程序和子程序在同一個代碼段功能:主程序和子程序在同一個代碼段內,操作數(shù)為子程序名,指令中直接給內,操作數(shù)為子程序名,指令中直接給出要調用的子程序的入口偏移地址。出要調用的子程序的入口偏移地址。NEAR PTR可省略??墒÷?。【例【例4-6】 n知:知:(CS)1000H,(IP)0100H,子程,子程序序SUM的入口地址為的入口地址為1000H:0200H,執(zhí),執(zhí)行指令:行指令:CALL SUM。n指令執(zhí)行過程如圖指令執(zhí)行過程如圖4-1所示。所示。2段內間接調用段內間接調用n格式:格式:CALL WORD PTR OPRn功能:主程序和子程序在同一個代碼段內,功能:主程序和子

39、程序在同一個代碼段內,操作數(shù)為操作數(shù)為16位寄存器或位寄存器或16位存儲器單元,位存儲器單元,其內容為要調用的子程序的入口偏移地址。其內容為要調用的子程序的入口偏移地址。n使用寄存器作為操作數(shù)時,使用寄存器作為操作數(shù)時,WORD PTR省省略。略?!纠纠?-7】 n知:知:(CS)1000H,(IP)0100H,(DS)2000H,(BX)0200H,(20200H)34H,(20201H)12H,n執(zhí)行指令:執(zhí)行指令:CALL WORD PTR BX。n指令執(zhí)行過程如圖指令執(zhí)行過程如圖4-2所示。所示。3段間直接調用段間直接調用n格式:格式:CALL FAR PTR OPRn功能:主程序和

40、子程序不在同一個代碼功能:主程序和子程序不在同一個代碼段內,操作數(shù)為子程序名,指令中直接段內,操作數(shù)為子程序名,指令中直接給出要調用的子程序的入口段地址和偏給出要調用的子程序的入口段地址和偏移地址。移地址?!纠?-8】 n知:主程序所在代碼段的段地址為知:主程序所在代碼段的段地址為1000H,(IP)0100H,n子程序子程序SUM的入口地址為的入口地址為2000H:0200H,n執(zhí)行指令:執(zhí)行指令:CALL FAR PTR SUM。n指令執(zhí)行過程如圖指令執(zhí)行過程如圖4-3所示。所示。4段間間接調用段間間接調用n格式:格式:CALL DWORD PTR OPRn功能:主程序和子程序不在同一個代

41、碼功能:主程序和子程序不在同一個代碼段內,操作數(shù)為一個段內,操作數(shù)為一個32位存儲器單元,位存儲器單元,n其內容為要調用的子程序的入口偏移地其內容為要調用的子程序的入口偏移地址低址低16位和段地址高位和段地址高16位)。位)?!纠纠?-9】 n知:主程序所在代碼段的段地址為知:主程序所在代碼段的段地址為1000H,(IP)0100H,n(DS)2000H,(BX)0200H,n(20200H)78H,(20201H)56H,(20202H)34H,(20203H)12H,n執(zhí)行指令:執(zhí)行指令:CALL DWORD PTR BX。4.3.5 返回指令返回指令n子程序執(zhí)行完后,通過返回指令返回主子程序執(zhí)行完后,通過返回指令返回主程序繼續(xù)執(zhí)行。程序繼續(xù)執(zhí)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論