版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、微機(jī)原理與接口技術(shù)微機(jī)原理與接口技術(shù)徐建平徐建平 成貴學(xué)成貴學(xué)第第4 4章章 8086 8086指令系統(tǒng)下)指令系統(tǒng)下)【本章內(nèi)容提要】【本章內(nèi)容提要】 n掌握字符串操作指令的功能與用法掌握字符串操作指令的功能與用法n掌握處理器控制類指令的功能與用法掌握處理器控制類指令的功能與用法n掌握程序控制類指令的功能與用法掌握程序控制類指令的功能與用法4.1 字符串操作指令字符串操作指令n存儲器中若干個(gè)連續(xù)地址存儲的字符稱存儲器中若干個(gè)連續(xù)地址存儲的字符稱為字符串,一個(gè)字符串可能包含若干個(gè)為字符串,一個(gè)字符串可能包含若干個(gè)字節(jié)或字。字節(jié)或字。n字符串操作指令用于對存儲器中的字節(jié)字符串操作指令用于對存儲器
2、中的字節(jié)串或字串進(jìn)行處理。串或字串進(jìn)行處理。n字符串操作指令可以在兩組存儲單元之字符串操作指令可以在兩組存儲單元之間進(jìn)行操作。間進(jìn)行操作。n源串源操作數(shù)一般存放在當(dāng)前數(shù)據(jù)段中,即源串源操作數(shù)一般存放在當(dāng)前數(shù)據(jù)段中,即寄存器寄存器DSDS中的內(nèi)容為其段地址,寄存器中的內(nèi)容為其段地址,寄存器SISI中的內(nèi)中的內(nèi)容為其偏移地址,因此,源串地址為容為其偏移地址,因此,源串地址為DSDS:SISI;n目的串目的操作數(shù)一般存放在附加數(shù)據(jù)段目的串目的操作數(shù)一般存放在附加數(shù)據(jù)段ESES中,即寄存器中,即寄存器ESES中的內(nèi)容為其段地址,寄存器中的內(nèi)容為其段地址,寄存器DIDI中的內(nèi)容為其偏移地址,因此,目的串
3、地址為中的內(nèi)容為其偏移地址,因此,目的串地址為ESES:DIDI。n另外,若要使用重復(fù)前綴指令時(shí),字符串的長度另外,若要使用重復(fù)前綴指令時(shí),字符串的長度必須存放在必須存放在CXCX寄存器中。寄存器中。n每次執(zhí)行字符串操作后,每次執(zhí)行字符串操作后,SISI和和DIDI中的內(nèi)容中的內(nèi)容會(huì)自動(dòng)修改,從而指向下一個(gè)字節(jié)或字。會(huì)自動(dòng)修改,從而指向下一個(gè)字節(jié)或字。 nSISI和和DIDI的修改方式取決于標(biāo)志位的修改方式取決于標(biāo)志位DFDF的值:的值:n如果如果DFDF0 0,則字符串操作由低地址向高地,則字符串操作由低地址向高地址進(jìn)行,址進(jìn)行,SISI和和DIDI的值自動(dòng)增加;的值自動(dòng)增加;n如果如果DF
4、DF1 1,則字符串操作由高地址向低地,則字符串操作由高地址向低地址進(jìn)行,址進(jìn)行,SISI和和DIDI的值自動(dòng)減少。的值自動(dòng)減少。 n增減量的大小取決于操作數(shù)類型:字節(jié)操作增減量的大小取決于操作數(shù)類型:字節(jié)操作時(shí),增減量為時(shí),增減量為1 1;字操作時(shí),增減量為;字操作時(shí),增減量為2 2。n字節(jié)型和字型數(shù)據(jù)對應(yīng)的指令的助記符為字節(jié)型和字型數(shù)據(jù)對應(yīng)的指令的助記符為B B和和W W。4.1.1 基本串操作指令基本串操作指令 1串傳送指令串傳送指令n格式:格式:MOVSBMOVSB字節(jié)串傳送)字節(jié)串傳送)n 或或MOVSWMOVSW字串傳送)字串傳送)n 或或MOVS DSTMOVS DST,SRCS
5、RCn功能:將功能:將SISI所指向的源串中的一個(gè)字節(jié)或所指向的源串中的一個(gè)字節(jié)或字傳送到字傳送到DIDI所指向的目的串中。所指向的目的串中。n留意:該指令對標(biāo)志位無影響。留意:該指令對標(biāo)志位無影響。 n在執(zhí)行串傳送指令前,一般要預(yù)先設(shè)置在執(zhí)行串傳送指令前,一般要預(yù)先設(shè)置源串地址源串地址DSDS:SISI、目的串地址、目的串地址ESES:DIDI和和方向標(biāo)志位方向標(biāo)志位DFDF的值。的值。n方向標(biāo)志位方向標(biāo)志位DFDF的設(shè)置方法為:的設(shè)置方法為:CLDCLD指令可指令可將將DFDF的設(shè)置為的設(shè)置為0 0;STDSTD指令可將指令可將DFDF的值設(shè)的值設(shè)置為置為1 1。2串比較指令串比較指令n格
6、式:格式:CMPSBCMPSB字節(jié)串比較)字節(jié)串比較)n 或或CMPSWCMPSW字串比較)字串比較)n 或或CMPS DSTCMPS DST,SRCSRCn功能:將功能:將SISI所指向的源串中的一個(gè)字節(jié)或字所指向的源串中的一個(gè)字節(jié)或字與與DIDI所指向的目的串中的一個(gè)字節(jié)或字相減,所指向的目的串中的一個(gè)字節(jié)或字相減,不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。n留意:受影響的標(biāo)志位有:留意:受影響的標(biāo)志位有:OFOF、SFSF、ZFZF、AFAF、PFPF和和CFCF。n在執(zhí)行串比較指令前,一般要預(yù)先設(shè)置在執(zhí)行串比較指令前,一般要預(yù)先設(shè)置源串地址源串地址DSDS
7、:SISI、目的串地址、目的串地址ESES:DIDI和和方向標(biāo)志位方向標(biāo)志位DFDF的值,方法同上。的值,方法同上。 3串掃描指令串掃描指令n格式:格式:SCASBSCASB字節(jié)串掃描)字節(jié)串掃描)n 或或SCASWSCASW字串掃描)字串掃描)n 或或SCAS DSTSCAS DSTn功能:將寄存器功能:將寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操作中字操作中的內(nèi)容與的內(nèi)容與DIDI所指向的目的串中的一個(gè)字節(jié)或字相減,所指向的目的串中的一個(gè)字節(jié)或字相減,不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。不保存結(jié)果,只是根據(jù)結(jié)果設(shè)置標(biāo)志位。n留意:受影響的標(biāo)志位有:留意:受影響的標(biāo)志位有:OFOF、SF
8、SF、ZFZF、AFAF、PFPF和和CFCF。 n在執(zhí)行串掃描指令前,一般要預(yù)先設(shè)置寄存在執(zhí)行串掃描指令前,一般要預(yù)先設(shè)置寄存器器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方向標(biāo)和方向標(biāo)志位志位DFDF的值。的值。 4 4串裝入指令串裝入指令n格式:格式:LODSBLODSB字節(jié)串裝入)字節(jié)串裝入)n 或或LODSWLODSW字串裝入)字串裝入)n 或或LODS SRCLODS SRCn功能:將功能:將SISI所指向的源串中的一個(gè)字節(jié)或字所指向的源串中的一個(gè)字節(jié)或字送入寄存器送入寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操作字操作中。中。n留意:此指令對標(biāo)志位無影
9、響。留意:此指令對標(biāo)志位無影響。n在執(zhí)行串裝入指令前,一般要預(yù)先設(shè)置在執(zhí)行串裝入指令前,一般要預(yù)先設(shè)置源串地址源串地址DSDS:SISI和方向標(biāo)志位和方向標(biāo)志位DFDF的值。的值。此指令一般不使用重復(fù)前綴。此指令一般不使用重復(fù)前綴。5 5串存儲指令串存儲指令n格式:格式:STOSBSTOSB字節(jié)存儲)字節(jié)存儲)n 或或STOSWSTOSW字存儲)字存儲)n 或或STOS DSTSTOS DSTn功能:將寄存器功能:將寄存器ALAL字節(jié)操作或字節(jié)操作或AXAX字操字操作中的一個(gè)字節(jié)或字存入作中的一個(gè)字節(jié)或字存入DIDI所指向的目的所指向的目的串中。串中。n留意:此指令對標(biāo)志位無影響。留意:此指令
10、對標(biāo)志位無影響。n在執(zhí)行串存儲指令前,一般要預(yù)先設(shè)置寄在執(zhí)行串存儲指令前,一般要預(yù)先設(shè)置寄存器存器ALAL或或AXAX)、目的串地址)、目的串地址ESES:DIDI和方和方向標(biāo)志位向標(biāo)志位DFDF的值。的值。4.1.2 4.1.2 重復(fù)前綴指令重復(fù)前綴指令n基本串操作指令每完成一次操作后,只能對基本串操作指令每完成一次操作后,只能對字符串中的一個(gè)字節(jié)或字進(jìn)行操作,字符串中的一個(gè)字節(jié)或字進(jìn)行操作,n若要對一個(gè)字節(jié)串或字串進(jìn)行操作,就要在若要對一個(gè)字節(jié)串或字串進(jìn)行操作,就要在這些指令的前面加一個(gè)重復(fù)前綴,使該指令這些指令的前面加一個(gè)重復(fù)前綴,使該指令能重復(fù)執(zhí)行。能重復(fù)執(zhí)行。n使用重復(fù)前綴指令前,先
11、要將字符串的長度使用重復(fù)前綴指令前,先要將字符串的長度裝入裝入CXCX寄存器,每執(zhí)行一次基本串操作指令寄存器,每執(zhí)行一次基本串操作指令后,后,CXCX的值自動(dòng)減的值自動(dòng)減1 1,直到,直到CXCX0 0。1REP前綴n格式:格式:REP REP 串操作指令串操作指令n功能:重復(fù)執(zhí)行串操作指令,直到功能:重復(fù)執(zhí)行串操作指令,直到CXCX中的值中的值為為0 0時(shí)結(jié)束操作。時(shí)結(jié)束操作。 n串傳送指令與串傳送指令與REPREP連用,常用于從存儲器到連用,常用于從存儲器到存儲器的字符串成塊傳送,可簡化程序,存儲器的字符串成塊傳送,可簡化程序,提高程序運(yùn)行速度。提高程序運(yùn)行速度。n串存儲指令與串存儲指令與
12、REPREP連用,常用于對某一存儲連用,常用于對某一存儲區(qū)域進(jìn)行初始化。區(qū)域進(jìn)行初始化。2REPE/REPZ前綴n格式:格式:REPE/REPZ REPE/REPZ 串比較或串掃描指令串比較或串掃描指令n功能:在執(zhí)行串比較或串掃描指令時(shí),若功能:在執(zhí)行串比較或串掃描指令時(shí),若CX0CX0且且ZFZF1 1要比較的兩個(gè)字節(jié)或字相等或要比較的兩個(gè)字節(jié)或字相等或相減為零時(shí)重復(fù)執(zhí)行串比較或串掃描指令;相減為零時(shí)重復(fù)執(zhí)行串比較或串掃描指令;否則,結(jié)束操作。否則,結(jié)束操作。3REPNE/REPNZ前綴n格式:格式:REPNE/REPNZ REPNE/REPNZ 串比較或串掃描指令串比較或串掃描指令n功能:
13、在執(zhí)行串比較或串掃描指令時(shí),若功能:在執(zhí)行串比較或串掃描指令時(shí),若CX0CX0且且ZFZF0 0要比較的兩個(gè)字節(jié)或字不相要比較的兩個(gè)字節(jié)或字不相等或相減不為零時(shí)重復(fù)執(zhí)行串比較或串掃等或相減不為零時(shí)重復(fù)執(zhí)行串比較或串掃描指令;否則,結(jié)束操作。描指令;否則,結(jié)束操作。n串比較指令與串比較指令與REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ連用,連用,常用于判斷兩個(gè)字符串是否相等。常用于判斷兩個(gè)字符串是否相等。n串掃描指令與串掃描指令與REPE/REPZREPE/REPZ或或REPNE/REPNZREPNE/REPNZ連用,連用,常用于搜索字符串中是否存在某個(gè)特
14、定的字常用于搜索字符串中是否存在某個(gè)特定的字符。符。留意:留意:n重復(fù)前綴指令不能單獨(dú)使用,后面必須跟重復(fù)前綴指令不能單獨(dú)使用,后面必須跟基本串操作指令?;敬僮髦噶?。n重復(fù)前綴指令不影響標(biāo)志位。重復(fù)前綴指令不影響標(biāo)志位。【例【例4-1】n將將1000H1000H:0200H0200H地址開始的地址開始的100100個(gè)字節(jié)傳送個(gè)字節(jié)傳送到到2000H:1000H2000H:1000H開始的存儲單元中。程序段開始的存儲單元中。程序段如下:如下:MOV AXMOV AX,1000H 1000H MOV DSMOV DS,AXAX ; ;設(shè)置源串段地址設(shè)置源串段地址MOV AXMOV AX,200
15、0H 2000H MOV ESMOV ES,AXAX ; ;設(shè)置目的串段地址設(shè)置目的串段地址MOV SIMOV SI,0200H0200H; ;設(shè)置源串偏移地址設(shè)置源串偏移地址MOV DIMOV DI,1000H1000H; ;設(shè)置目的串偏移地址設(shè)置目的串偏移地址MOV CXMOV CX,100100 ; ;將串的長度送入將串的長度送入CXCXCLDCLD ; ;將將DFDF置為置為0 0,地址自動(dòng)遞增,地址自動(dòng)遞增REP MOVSBREP MOVSB; ;重復(fù)執(zhí)行串傳送指令,每次重復(fù)執(zhí)行串傳送指令,每次傳送一個(gè)字節(jié)傳送一個(gè)字節(jié)n【例【例4-2】 對附加段中從對附加段中從BUFF開始的開始的1
16、00個(gè)連續(xù)的內(nèi)存單元進(jìn)行清個(gè)連續(xù)的內(nèi)存單元進(jìn)行清0操作。程操作。程序段如下:序段如下:LEA DILEA DI,BUFFBUFF; ;將目的串的偏移地址送入將目的串的偏移地址送入DIDIMOV ALMOV AL,00H00H ; ;將將0 0送入送入ALALMOV CXMOV CX,100100 ; ;將串的長度送入將串的長度送入CXCXCLDCLD ; ;將將DFDF置為置為0 0,地址自動(dòng)遞增,地址自動(dòng)遞增REP STOSBREP STOSB; ;重復(fù)執(zhí)行串存儲指令,將重復(fù)執(zhí)行串存儲指令,將100100 ; ;個(gè)連續(xù)的內(nèi)存單元清個(gè)連續(xù)的內(nèi)存單元清0 04.2 4.2 處理器控制類指令處理器
17、控制類指令n處理器控制類指令用于對處理器控制類指令用于對CPUCPU進(jìn)行控制。進(jìn)行控制。4.2.1 4.2.1 標(biāo)志位操作指令標(biāo)志位操作指令n標(biāo)志位操作指令共標(biāo)志位操作指令共7 7條,用于設(shè)置標(biāo)志位條,用于設(shè)置標(biāo)志位CFCF、DFDF和和IFIF的值,對其他標(biāo)志位無影響,如表的值,對其他標(biāo)志位無影響,如表4-14-1所示。所示。 4.2.2 外部同步指令外部同步指令n外部同步指令共外部同步指令共5 5條,用于控制處理器的狀條,用于控制處理器的狀態(tài),它們的操作不影響標(biāo)志位,如表態(tài),它們的操作不影響標(biāo)志位,如表4-24-2所所示。示。實(shí)訓(xùn)實(shí)訓(xùn)4-1 4-1 尋找字符串中指定字符尋找字符串中指定字符
18、n【算法分析】【算法分析】n在文章的每一段開頭,一般要縮進(jìn)幾個(gè)空格。在文章的每一段開頭,一般要縮進(jìn)幾個(gè)空格?,F(xiàn)有一個(gè)以空格開頭的字符串,找出其中第現(xiàn)有一個(gè)以空格開頭的字符串,找出其中第一個(gè)非空格字符,并把其偏移地址存入指定一個(gè)非空格字符,并把其偏移地址存入指定內(nèi)存單元內(nèi)存單元ADDRADDR中。中。n首先,將字符串首地址送入首先,將字符串首地址送入DIDI,設(shè)置字符串,設(shè)置字符串操作方向,將字符串長度送入操作方向,將字符串長度送入CXCX,并為,并為ADDRADDR設(shè)置初值。設(shè)置初值。n重復(fù)執(zhí)行傳掃描指令,直到找到第一個(gè)非空重復(fù)執(zhí)行傳掃描指令,直到找到第一個(gè)非空格字符,使格字符,使DIDI指向
19、第一個(gè)非空格字符,并將指向第一個(gè)非空格字符,并將其偏移地址存入其偏移地址存入ADDRADDR。n若未找到非空格字符,則程序結(jié)束。若未找到非空格字符,則程序結(jié)束?!驹闯绦颉緿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 ; ;設(shè)置方向標(biāo)志,使設(shè)置方向標(biāo)志,使DFDF0 0MOV CX, NUMMOV CX, NUM; ;將字符串長度將字符串長度NUMNUM送入送入CXCX MOV AL, 20H MOV AL, 20H; ;將空格字符的將空格字符的ASCIIASCII碼送入碼送入ALAL MOV ADDR, 0FFFFH MOV ADDR,
22、 0FFFFH; ;將將ADDRADDR的初始值設(shè)為的初始值設(shè)為0FFFFH0FFFFHREPZ SCASB ;REPZ SCASB ;若當(dāng)前字符是空格,若當(dāng)前字符是空格, ; ;則重復(fù)執(zhí)行串掃描指令則重復(fù)執(zhí)行串掃描指令 JZ EXIT JZ EXIT ; ;若全部是空格,則程序轉(zhuǎn)移至若全部是空格,則程序轉(zhuǎn)移至EXITEXIT DEC DI DEC DI ; ;使使DIDI指向第一個(gè)非空格字符指向第一個(gè)非空格字符 MOV ADDR, DI MOV ADDR, DI; ;將第一個(gè)非空格字符的偏移地址存入將第一個(gè)非空格字符的偏移地址存入ADDRADDREXIT: MOV AH, 4CH;系統(tǒng)功能調(diào)
23、用, ;結(jié)束程序返回DOS INT 21H CSEG ENDSEND START4.3 程序控制類指令程序控制類指令n一般情況下,一般情況下,CPUCPU執(zhí)行程序是按照指令的順執(zhí)行程序是按照指令的順序逐條執(zhí)行的,但實(shí)際上很多時(shí)候都需要改序逐條執(zhí)行的,但實(shí)際上很多時(shí)候都需要改變程序的執(zhí)行順序,使程序直接轉(zhuǎn)移到目標(biāo)變程序的執(zhí)行順序,使程序直接轉(zhuǎn)移到目標(biāo)位置去執(zhí)行,這時(shí)就要使用程序控制類指令位置去執(zhí)行,這時(shí)就要使用程序控制類指令來控制程序的轉(zhuǎn)向。來控制程序的轉(zhuǎn)向。4.3.1 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令n無條件轉(zhuǎn)移指令是指,不需要判斷條件,程序直接無條件轉(zhuǎn)移指令是指,不需要判斷條件,程序直接跳轉(zhuǎn)到目
24、標(biāo)地址處去執(zhí)行。跳轉(zhuǎn)到目標(biāo)地址處去執(zhí)行。n無條件轉(zhuǎn)移指令可分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移兩大類。無條件轉(zhuǎn)移指令可分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移兩大類。n段內(nèi)轉(zhuǎn)移是指程序在當(dāng)前代碼段內(nèi)進(jìn)行轉(zhuǎn)移,這時(shí)段內(nèi)轉(zhuǎn)移是指程序在當(dāng)前代碼段內(nèi)進(jìn)行轉(zhuǎn)移,這時(shí)只需改變只需改變IPIP寄存器中的內(nèi)容,寄存器中的內(nèi)容,CSCS寄存器中的內(nèi)容不寄存器中的內(nèi)容不變,即可指定目標(biāo)地址;變,即可指定目標(biāo)地址;n段間轉(zhuǎn)移是指程序由當(dāng)前代碼段轉(zhuǎn)移到另一個(gè)代碼段間轉(zhuǎn)移是指程序由當(dāng)前代碼段轉(zhuǎn)移到另一個(gè)代碼段去執(zhí)行,這時(shí)需要指定新的段地址和偏移地址,段去執(zhí)行,這時(shí)需要指定新的段地址和偏移地址,即即CSCS寄存器和寄存器和IPIP寄存器中的內(nèi)容都將改變
25、。寄存器中的內(nèi)容都將改變。1 1段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移n格式:格式:JMP SHORT OPRJMP SHORT OPRn功能:功能:SHORTSHORT表明程序轉(zhuǎn)移的目標(biāo)地址與表明程序轉(zhuǎn)移的目標(biāo)地址與JMPJMP指令在同一個(gè)代碼段內(nèi),操作數(shù)可以是目標(biāo)指令在同一個(gè)代碼段內(nèi),操作數(shù)可以是目標(biāo)地址的標(biāo)號或指定一個(gè)地址的標(biāo)號或指定一個(gè)8 8位的偏移量,轉(zhuǎn)移范位的偏移量,轉(zhuǎn)移范圍為圍為-128127-128127字節(jié)。字節(jié)。SHORTSHORT可省略。可省略。n指令執(zhí)行后,指令執(zhí)行后,CSCS的內(nèi)容不變,的內(nèi)容不變,IPIP的值即的值即JMPJMP指令的下一條指令與指令的下一條指令與8 8位偏移
26、量之和被賦于位偏移量之和被賦于當(dāng)前的當(dāng)前的IPIP。【例【例4-3】 JMP SHORT NEXT L: MOV AL, 12H NEXT: MOV CX, 1234H 分析:分析:JMP指令中的指令中的NEXT是一個(gè)段內(nèi)指令標(biāo)號,它代表了標(biāo)是一個(gè)段內(nèi)指令標(biāo)號,它代表了標(biāo)號號L和和NEXT之間的偏移量,設(shè)此偏移量為之間的偏移量,設(shè)此偏移量為08H。執(zhí)行執(zhí)行JMP指令時(shí),如果當(dāng)前指令時(shí),如果當(dāng)前IP的內(nèi)容為的內(nèi)容為1000H此時(shí)此時(shí)IP已指向已指向標(biāo)號標(biāo)號L處),標(biāo)號處),標(biāo)號NEXT的偏移地址為的偏移地址為1000H08H=1008H,即即IP的內(nèi)容更新為的內(nèi)容更新為1008H。2 2段內(nèi)直接
27、近轉(zhuǎn)移段內(nèi)直接近轉(zhuǎn)移n格式:格式:JMP NEAR PTR OPRJMP NEAR PTR OPRn功能:功能:NEAR PTRNEAR PTR表明程序轉(zhuǎn)移的目標(biāo)地址與表明程序轉(zhuǎn)移的目標(biāo)地址與JMPJMP指指令在同一個(gè)代碼段內(nèi),操作數(shù)可以是目標(biāo)地址的標(biāo)令在同一個(gè)代碼段內(nèi),操作數(shù)可以是目標(biāo)地址的標(biāo)號或指定一個(gè)號或指定一個(gè)1616位的偏移量,轉(zhuǎn)移范圍為位的偏移量,轉(zhuǎn)移范圍為- -32768327673276832767字節(jié)。字節(jié)。NEAR PTRNEAR PTR可省略??墒÷?。n指令執(zhí)行后,指令執(zhí)行后,CSCS的內(nèi)容不變,的內(nèi)容不變,IPIP的值即的值即JMPJMP指令指令的下一條指令與的下一條指
28、令與1616位偏移量之和被賦于當(dāng)前的位偏移量之和被賦于當(dāng)前的IPIP。3 3段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移n格式:格式:JMP WORD PTR OPRJMP WORD PTR OPRn功能:程序轉(zhuǎn)移的目標(biāo)地址與功能:程序轉(zhuǎn)移的目標(biāo)地址與JMPJMP指令在同一個(gè)代指令在同一個(gè)代碼段內(nèi),指令中的操作數(shù)是碼段內(nèi),指令中的操作數(shù)是1616位寄存器或存儲器單位寄存器或存儲器單元元n段內(nèi)轉(zhuǎn)移的偏移地址存放在段內(nèi)轉(zhuǎn)移的偏移地址存放在1616位寄存器或存儲器中位寄存器或存儲器中連續(xù)兩個(gè)字節(jié)的存儲單元中。使用寄存器作為操作連續(xù)兩個(gè)字節(jié)的存儲單元中。使用寄存器作為操作數(shù)時(shí),數(shù)時(shí),WORD PTRWORD PTR省略,
29、如省略,如JMP BXJMP BX。n指令執(zhí)行后,指令執(zhí)行后,CSCS的內(nèi)容不變,寄存器中的內(nèi)容或存的內(nèi)容不變,寄存器中的內(nèi)容或存儲器中指定地址開始的連續(xù)兩個(gè)字節(jié)單元的內(nèi)容被儲器中指定地址開始的連續(xù)兩個(gè)字節(jié)單元的內(nèi)容被賦于當(dāng)前的賦于當(dāng)前的IPIP。4 4段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移n格式:格式:JMP FAR PTR OPRJMP FAR PTR OPRn功能:功能:FAR PTRFAR PTR表明程序轉(zhuǎn)移的目標(biāo)地址與表明程序轉(zhuǎn)移的目標(biāo)地址與JMPJMP指令指令不在同一個(gè)代碼段內(nèi)不在同一個(gè)代碼段內(nèi)n操作數(shù)可以是目標(biāo)地址的標(biāo)號,指令操作碼后的連操作數(shù)可以是目標(biāo)地址的標(biāo)號,指令操作碼后的連續(xù)兩個(gè)字給出
30、轉(zhuǎn)移后的偏移地址低續(xù)兩個(gè)字給出轉(zhuǎn)移后的偏移地址低1616位和段地位和段地址高址高1616位)。位)。FAR PTRFAR PTR可省略。可省略。n指令執(zhí)行后,段地址和偏移地址分別被賦于當(dāng)前的指令執(zhí)行后,段地址和偏移地址分別被賦于當(dāng)前的CSCS和和IPIP,程序轉(zhuǎn)移到另一個(gè)代碼段中相應(yīng)位置去執(zhí),程序轉(zhuǎn)移到另一個(gè)代碼段中相應(yīng)位置去執(zhí)行。行。5 5段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移n格式:格式:JMP DWORD PTR OPRJMP DWORD PTR OPRn功能:功能:DWORD PTRDWORD PTR表明程序轉(zhuǎn)移的目標(biāo)地址與表明程序轉(zhuǎn)移的目標(biāo)地址與JMPJMP指令不在同一個(gè)代碼段內(nèi)指令不在同一個(gè)代碼
31、段內(nèi)n指令中的操作數(shù)是一個(gè)雙字存儲器單元,偏移地指令中的操作數(shù)是一個(gè)雙字存儲器單元,偏移地址和段地址分別存放在連續(xù)兩個(gè)字的存儲單元中。址和段地址分別存放在連續(xù)兩個(gè)字的存儲單元中。n指令執(zhí)行后,段地址高指令執(zhí)行后,段地址高1616位和偏移地址低位和偏移地址低1616位分別被賦于當(dāng)前的位分別被賦于當(dāng)前的CSCS和和IPIP,程序轉(zhuǎn)移到另,程序轉(zhuǎn)移到另一個(gè)代碼段中相應(yīng)位置去執(zhí)行。例如:一個(gè)代碼段中相應(yīng)位置去執(zhí)行。例如:n JMP DWORD PTR BXSI JMP DWORD PTR BXSIn 就是實(shí)現(xiàn)段間間接轉(zhuǎn)移的指令。就是實(shí)現(xiàn)段間間接轉(zhuǎn)移的指令。留意:留意:n無條件轉(zhuǎn)移指令對標(biāo)志位無影響。無
32、條件轉(zhuǎn)移指令對標(biāo)志位無影響。4.3.2 4.3.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令n條件轉(zhuǎn)移指令是指,根據(jù)當(dāng)前標(biāo)志位的狀態(tài)條件轉(zhuǎn)移指令是指,根據(jù)當(dāng)前標(biāo)志位的狀態(tài)來決定程序是否轉(zhuǎn)移來決定程序是否轉(zhuǎn)移n若滿足指令的轉(zhuǎn)移條件,則程序轉(zhuǎn)移到目標(biāo)若滿足指令的轉(zhuǎn)移條件,則程序轉(zhuǎn)移到目標(biāo)地址處執(zhí)行;地址處執(zhí)行;n若不滿足條件,則繼續(xù)執(zhí)行下一條指令。若不滿足條件,則繼續(xù)執(zhí)行下一條指令。留意:留意:n所有的條件轉(zhuǎn)移指令都是短轉(zhuǎn)移,即轉(zhuǎn)移的所有的條件轉(zhuǎn)移指令都是短轉(zhuǎn)移,即轉(zhuǎn)移的目標(biāo)地址必須在當(dāng)前代碼段內(nèi),偏移量的范目標(biāo)地址必須在當(dāng)前代碼段內(nèi),偏移量的范圍為圍為128127字節(jié)。字節(jié)。n條件轉(zhuǎn)移指令對標(biāo)志位無影響。條件轉(zhuǎn)
33、移指令對標(biāo)志位無影響。 【例【例4-4】n比較兩個(gè)帶符號數(shù)比較兩個(gè)帶符號數(shù)A A和和B B的大小,把大數(shù)存的大小,把大數(shù)存入入MAXMAX單元。實(shí)現(xiàn)這個(gè)過程的程序段如下:單元。實(shí)現(xiàn)這個(gè)過程的程序段如下: 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時(shí)程序轉(zhuǎn)移至?xí)r程序轉(zhuǎn)移至NEXTNEXT MOV MAX, BX MOV MAX, BX;AX;AX小于
34、或等于小于或等于BXBX時(shí),時(shí), ; ;將將BXBX的內(nèi)容送入的內(nèi)容送入MAXMAX單元單元 JMP EXIT JMP EXIT; ;程序轉(zhuǎn)移至程序轉(zhuǎn)移至EXITEXITNEXT: MOV MAX, AX ; AXNEXT: MOV MAX, AX ; AX大于大于BXBX時(shí),時(shí), ; ;將將AXAX的內(nèi)容送入的內(nèi)容送入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)計(jì)數(shù)器,因此,寄存器作為循環(huán)計(jì)數(shù)器,因此,在使用循環(huán)指令
35、前,必須先將循環(huán)次數(shù)存入在使用循環(huán)指令前,必須先將循環(huán)次數(shù)存入CXCX中。中。n每執(zhí)行一次循環(huán)控制指令,每執(zhí)行一次循環(huán)控制指令,CXCX中的值自動(dòng)減中的值自動(dòng)減1 1,然,然后對循環(huán)條件進(jìn)行判斷。后對循環(huán)條件進(jìn)行判斷。n若滿足條件,則程序轉(zhuǎn)移至目標(biāo)地址處繼續(xù)循環(huán);若滿足條件,則程序轉(zhuǎn)移至目標(biāo)地址處繼續(xù)循環(huán);n否則,退出循環(huán),執(zhí)行下一條指令。否則,退出循環(huán),執(zhí)行下一條指令。留意:留意:n循環(huán)控制指令是短轉(zhuǎn)移,即轉(zhuǎn)移的目標(biāo)地址循環(huán)控制指令是短轉(zhuǎn)移,即轉(zhuǎn)移的目標(biāo)地址必須在當(dāng)前代碼段內(nèi),偏移量的范圍為必須在當(dāng)前代碼段內(nèi),偏移量的范圍為128128到到127127字節(jié)。字節(jié)。n循環(huán)指令對標(biāo)志位無影響。循
36、環(huán)指令對標(biāo)志位無影響?!纠?-5】 將以將以BUFFERBUFFER開始的開始的100100個(gè)內(nèi)存單元都減去個(gè)內(nèi)存單元都減去1 1,如果,如果某個(gè)單元減某個(gè)單元減1 1后為后為0 0則不再執(zhí)行此操作。程序段如下:則不再執(zhí)行此操作。程序段如下: MOV DI, 0 MOV DI, 0 ; ;將將DIDI的初始值設(shè)為的初始值設(shè)為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 ; ;將當(dāng)前內(nèi)存單元中的內(nèi)容減將當(dāng)前內(nèi)存
37、單元中的內(nèi)容減1 1 LOOPNZ LOP LOOPNZ LOP; ;結(jié)果不為結(jié)果不為0 0時(shí)執(zhí)行循環(huán)時(shí)執(zhí)行循環(huán)4.3.4 子程序調(diào)用子程序調(diào)用n為節(jié)省存儲空間,在程序中常常要將某為節(jié)省存儲空間,在程序中常常要將某些具有獨(dú)立功能的程序段單獨(dú)作為一個(gè)些具有獨(dú)立功能的程序段單獨(dú)作為一個(gè)模塊,這樣的程序模塊稱為子程序。模塊,這樣的程序模塊稱為子程序。n當(dāng)程序中需要這些功能時(shí),可使用子程當(dāng)程序中需要這些功能時(shí),可使用子程序調(diào)用指令隨時(shí)調(diào)用這些子程序。序調(diào)用指令隨時(shí)調(diào)用這些子程序。n調(diào)用子程序的程序稱為主程序。調(diào)用子程序的程序稱為主程序。1段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用n格式:格式:CALL NEAR PTR
38、 OPRn功能:主程序和子程序在同一個(gè)代碼段功能:主程序和子程序在同一個(gè)代碼段內(nèi),操作數(shù)為子程序名,指令中直接給內(nèi),操作數(shù)為子程序名,指令中直接給出要調(diào)用的子程序的入口偏移地址。出要調(diào)用的子程序的入口偏移地址。NEAR PTR可省略。可省略?!纠纠?-6】 n知:知:(CS)1000H,(IP)0100H,子程,子程序序SUM的入口地址為的入口地址為1000H:0200H,執(zhí),執(zhí)行指令:行指令:CALL SUM。n指令執(zhí)行過程如圖指令執(zhí)行過程如圖4-1所示。所示。2段內(nèi)間接調(diào)用段內(nèi)間接調(diào)用n格式:格式:CALL WORD PTR OPRn功能:主程序和子程序在同一個(gè)代碼段內(nèi),功能:主程序和子
39、程序在同一個(gè)代碼段內(nèi),操作數(shù)為操作數(shù)為16位寄存器或位寄存器或16位存儲器單元,位存儲器單元,其內(nèi)容為要調(diào)用的子程序的入口偏移地址。其內(nèi)容為要調(diào)用的子程序的入口偏移地址。n使用寄存器作為操作數(shù)時(shí),使用寄存器作為操作數(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段間直接調(diào)用段間直接調(diào)用n格式:格式:CALL FAR PTR OPRn功能:主程序和
40、子程序不在同一個(gè)代碼功能:主程序和子程序不在同一個(gè)代碼段內(nèi),操作數(shù)為子程序名,指令中直接段內(nèi),操作數(shù)為子程序名,指令中直接給出要調(diào)用的子程序的入口段地址和偏給出要調(diào)用的子程序的入口段地址和偏移地址。移地址。【例4-8】 n知:主程序所在代碼段的段地址為知:主程序所在代碼段的段地址為1000H,(IP)0100H,n子程序子程序SUM的入口地址為的入口地址為2000H:0200H,n執(zhí)行指令:執(zhí)行指令:CALL FAR PTR SUM。n指令執(zhí)行過程如圖指令執(zhí)行過程如圖4-3所示。所示。4段間間接調(diào)用段間間接調(diào)用n格式:格式:CALL DWORD PTR OPRn功能:主程序和子程序不在同一個(gè)代
41、碼功能:主程序和子程序不在同一個(gè)代碼段內(nèi),操作數(shù)為一個(gè)段內(nèi),操作數(shù)為一個(gè)32位存儲器單元,位存儲器單元,n其內(nèi)容為要調(diào)用的子程序的入口偏移地其內(nèi)容為要調(diào)用的子程序的入口偏移地址低址低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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能交通設(shè)施租賃合同3篇
- 2024年水磨石地坪系統(tǒng)分包施工合同3篇
- 2024年消費(fèi)信貸個(gè)人協(xié)議
- 2024年食堂建筑項(xiàng)目施工與安全生產(chǎn)協(xié)議3篇
- 2025年度社會(huì)保障補(bǔ)貼合同范本3篇
- 2025年度出口企業(yè)出口貨物檢驗(yàn)檢疫與憑證獲取合同3篇
- 2024年項(xiàng)目經(jīng)理雇傭協(xié)議
- 2024餐飲店加盟技術(shù)轉(zhuǎn)讓合同
- 2024年虛擬現(xiàn)實(shí)技術(shù)研發(fā)合作協(xié)議
- 2025年度新型工業(yè)園區(qū)租賃合同書3篇
- 第二章 熱力學(xué)基本定律
- 英語聽力考場建設(shè)方案
- 義務(wù)教育教科書英語Go for it七年級上冊單詞表
- 第一章 電力系統(tǒng)潮流計(jì)算1
- ICU常用鎮(zhèn)靜藥物介紹及藥學(xué)監(jiān)護(hù)
- 粉末丁腈橡膠使用方法
- 大氣課程設(shè)計(jì)-—袋式除塵器
- 蘇科版七年級生物學(xué)(上)教學(xué)工作總結(jié)
- 阿特拉斯擰緊機(jī)技術(shù)方案
- 中國人民財(cái)產(chǎn)保險(xiǎn)股份有限公司理賠稽查管理暫行辦法
- 鋼管、管件表面積計(jì)算公式(精編版)
評論
0/150
提交評論