![控制傳送指令_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf41.gif)
![控制傳送指令_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf42.gif)
![控制傳送指令_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf43.gif)
![控制傳送指令_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf44.gif)
![控制傳送指令_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf45.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1(Control transfer instructions)(一)、(一)、 2轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。無(wú)條件轉(zhuǎn)移指令有五種格式:無(wú)條件轉(zhuǎn)移指令有五種格式: q 段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移q 段內(nèi)直接近轉(zhuǎn)移段內(nèi)直接近轉(zhuǎn)移q 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移q 段間直接遠(yuǎn)轉(zhuǎn)移段間直接遠(yuǎn)轉(zhuǎn)移q 段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移無(wú)條件地將控制轉(zhuǎn)移到指令中規(guī)定的目的地。無(wú)條件地將控制轉(zhuǎn)移到指令中規(guī)定的目的地。目標(biāo)地址可以是:直接方式目標(biāo)地址可以是:直接方式/間接方式給出。間接方式給出。JMP指令不影響標(biāo)志位。指令不影響標(biāo)志位。3匯編程序設(shè)計(jì)中常利用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支。匯編
2、程序設(shè)計(jì)中常利用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支。操作數(shù)必須是短標(biāo)號(hào)。操作數(shù)必須是短標(biāo)號(hào)。 JZ(JE)/JNZ(JNE),),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),), JB(JNAE、JC)/JNB(JAE、JNC),), JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA) JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG) JCXZ4如果有一些程序段在不同地方反復(fù)出現(xiàn),可以將這些程如果有一些程序段在不同地方反復(fù)出現(xiàn),可以將這些程序段設(shè)計(jì)成為過(guò)程(子程序)供調(diào)用。過(guò)程結(jié)束,返回調(diào)用處。序段設(shè)計(jì)成為過(guò)程(子程序)供調(diào)
3、用。過(guò)程結(jié)束,返回調(diào)用處。過(guò)程調(diào)用指令和返回指令過(guò)程調(diào)用指令和返回指令(1)、 CALL( Call a procedure)調(diào)用調(diào)用 CALL調(diào)用指令調(diào)用指令 段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段間直接調(diào)用段間直接調(diào)用 段內(nèi)間接調(diào)用段內(nèi)間接調(diào)用段間間接調(diào)用段間間接調(diào)用(2)、 RET( Reture from procedure)返回返回 RET返回指令返回指令段內(nèi)返回段內(nèi)返回段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回段間帶立即數(shù)返回5循環(huán)控制指令用于使一些程序段反復(fù)執(zhí)行形成循環(huán)程序。循環(huán)控制指令用于使一些程序段反復(fù)執(zhí)行形成循環(huán)程序。循環(huán)控制指令有三種:循環(huán)控制指令有三種:(1
4、)、LOOP (Loop) 循環(huán)指令循環(huán)指令(2)、LOOPE/LOOPZ (Loop if equal / Loop if zero)當(dāng)相等當(dāng)相等/為為“0”循環(huán)循環(huán)(3)、LOOPNE/LOOPNZ (Loop if not equal/ Loop if not zero)當(dāng)不相等當(dāng)不相等/不為不為“0”循環(huán)循環(huán)6 8086/8088CPU 可以在程序中安排一條中斷指令引起中斷可以在程序中安排一條中斷指令引起中斷過(guò)程,這種中斷稱為軟中斷。過(guò)程,這種中斷稱為軟中斷。 (1)、INT (Interrupt)(2)、INTO(Interrupt if overflow)(3)、IRET(Inte
5、rrupt Return)78(Control transfer instructions)轉(zhuǎn)移轉(zhuǎn)移將程序控制從一處轉(zhuǎn)換到另一處的最直接方法。將程序控制從一處轉(zhuǎn)換到另一處的最直接方法。在在CPU內(nèi)部,轉(zhuǎn)移是通過(guò)將目標(biāo)地址傳送給內(nèi)部,轉(zhuǎn)移是通過(guò)將目標(biāo)地址傳送給IP來(lái)實(shí)現(xiàn)的。來(lái)實(shí)現(xiàn)的。 9q 先介召控制和非控制轉(zhuǎn)移指令的概念先介召控制和非控制轉(zhuǎn)移指令的概念 非控制轉(zhuǎn)移指令非控制轉(zhuǎn)移指令:指令本身對(duì)指令本身對(duì)CS和和IP均無(wú)操作,形成順序執(zhí)行結(jié)構(gòu)。均無(wú)操作,形成順序執(zhí)行結(jié)構(gòu)。 順序執(zhí)行結(jié)構(gòu):順序執(zhí)行結(jié)構(gòu): 順序存放,順序執(zhí)行順序存放,順序執(zhí)行 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令: 以以CS和和IP為主要操作對(duì)
6、象,為主要操作對(duì)象, 改變改變CS和和IP寄存器的值,寄存器的值, 就改變了程序執(zhí)行的流程。就改變了程序執(zhí)行的流程。 程序是指令的集合程序是指令的集合 指令在內(nèi)存中順序存放指令在內(nèi)存中順序存放10在在8086/8088中,指令的地址固定由中,指令的地址固定由CS和和IP兩個(gè)寄存器決定。兩個(gè)寄存器決定。 CS和和IP兩寄存器的內(nèi)容決定了程序的流程兩寄存器的內(nèi)容決定了程序的流程 , q ,( CS ) = FFFFH,( IP ) = 0 故故 第一條指令在內(nèi)存的第一條指令在內(nèi)存的ROM區(qū)。區(qū)。q CPU取來(lái)一條指令后,取來(lái)一條指令后, 自動(dòng)將自動(dòng)將IP的值加上該指令的字節(jié)數(shù),的值加上該指令的字節(jié)
7、數(shù), 使使IP順序指向下一條指令,順序指向下一條指令, CPU取來(lái)緊接著的指令執(zhí)行。取來(lái)緊接著的指令執(zhí)行。 (此時(shí)此時(shí)IP的變化由的變化由CPU內(nèi)部的硬件自動(dòng)完成內(nèi)部的硬件自動(dòng)完成)11 控制轉(zhuǎn)移指令改變控制轉(zhuǎn)移指令改變CS和和IP的值,的值,使程序產(chǎn)生分支、調(diào)用結(jié)構(gòu)。使程序產(chǎn)生分支、調(diào)用結(jié)構(gòu)。 例:比較例:比較(AX)、(BX)的大小,將大數(shù)存于(的大小,將大數(shù)存于( max )單元。)單元。 CMP AX, BX great XCHG AX, BX great: MOV max, AX12JMP(jmp)跳轉(zhuǎn)指令。)跳轉(zhuǎn)指令。JMP指令必須指定轉(zhuǎn)移的目標(biāo)地址(或轉(zhuǎn)向地址)。指令必須指定轉(zhuǎn)移
8、的目標(biāo)地址(或轉(zhuǎn)向地址)。轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移:只要改變段內(nèi)轉(zhuǎn)移:只要改變IP寄存器的內(nèi)容寄存器的內(nèi)容 指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移 即用新的轉(zhuǎn)移目標(biāo)地址代替原有的即用新的轉(zhuǎn)移目標(biāo)地址代替原有的IP值。值。段間轉(zhuǎn)移:要修改段間轉(zhuǎn)移:要修改IP、 CS寄存器的內(nèi)容寄存器的內(nèi)容 轉(zhuǎn)到另一段去執(zhí)行程序。轉(zhuǎn)到另一段去執(zhí)行程序。 即即轉(zhuǎn)移目標(biāo)地址轉(zhuǎn)移目標(biāo)地址= 新的段地址和偏移地址兩部分組成。新的段地址和偏移地址兩部分組成。13段內(nèi)直接短轉(zhuǎn)移:段內(nèi)直接短轉(zhuǎn)移:格式:格式:JMP SHORT OPR OPR在匯編語(yǔ)言中使用符號(hào)地址
9、。在匯編語(yǔ)言中使用符號(hào)地址。在機(jī)器語(yǔ)言中存放位移量在機(jī)器語(yǔ)言中存放位移量D8位移量位移量D8 = 符號(hào)地址的偏移地址符號(hào)地址的偏移地址 - 當(dāng)前當(dāng)前IP的值的值 執(zhí)行操作:(執(zhí)行操作:(IP)(IP)當(dāng)前當(dāng)前+D8 SHORT 短屬性標(biāo)號(hào)短屬性標(biāo)號(hào)8位位移量位位移量D8的范圍在(的范圍在(-128 127)之間)之間,占有一個(gè)字節(jié)。,占有一個(gè)字節(jié)。而指令本身占有兩個(gè)字節(jié)。而指令本身占有兩個(gè)字節(jié)。 14例如:代碼段內(nèi)有一條無(wú)條件轉(zhuǎn)移指令在匯編語(yǔ)言中使用符號(hào)地址。例如:代碼段內(nèi)有一條無(wú)條件轉(zhuǎn)移指令在匯編語(yǔ)言中使用符號(hào)地址。JMP SHORT NEXT指令執(zhí)行過(guò)程:指令執(zhí)行過(guò)程:NEXT在匯編語(yǔ)言中
10、使用符號(hào)地址在匯編語(yǔ)言中使用符號(hào)地址(IP)(IP)當(dāng)前當(dāng)前+D8源程序 :源程序 :條件轉(zhuǎn)移指令:JMP SHORT 條件轉(zhuǎn)移指令:JMP SHORT nextnext. next:next:MOV AL,03HMOV AL,03HOPOP50H50H.OPOP03H03H.3000:1000H3000:1000H3000:1050H3000:1050H(IP)(IP)當(dāng)前當(dāng)前D D8 8=50H=50H=1050H-1000H=1050H-1000H(IP)=(IP)當(dāng)前+D8(IP)=(IP)當(dāng)前+D8內(nèi)存內(nèi)存158位位移量位位移量D8的范圍在(的范圍在(-128 127)之間)之間,否
11、則出錯(cuò)。否則出錯(cuò)。 源程序 : 源程序 :next :next :. -128-128.條件轉(zhuǎn)移指令:條件轉(zhuǎn)移指令:JMP SHORT JMP SHORT nextnext.+127+127. next:next: MOV AL,03HMOV AL,03H標(biāo)號(hào)與控制轉(zhuǎn)移指令在同一段中標(biāo)號(hào)與控制轉(zhuǎn)移指令在同一段中,后引用的標(biāo)號(hào)可以不用后引用的標(biāo)號(hào)可以不用SHORT, 前引用的標(biāo)號(hào)必須使用前引用的標(biāo)號(hào)必須使用SHORT如:如:tager: JMP tagerJMP SHORT tager tager:16 段內(nèi)直接近轉(zhuǎn)移:段內(nèi)直接近轉(zhuǎn)移: 格式:格式:JMP NEAR PTR OPR OPR在匯編
12、語(yǔ)言中使用符號(hào)地址在匯編語(yǔ)言中使用符號(hào)地址。 在機(jī)器語(yǔ)言中存放位移量在機(jī)器語(yǔ)言中存放位移量D16位移量位移量D16 = 符號(hào)地址的偏移地址符號(hào)地址的偏移地址 - 當(dāng)前當(dāng)前IP的值的值 執(zhí)行操作:執(zhí)行操作: (IP)(IP)當(dāng)前當(dāng)前+D16 NEAR近屬性標(biāo)號(hào)近屬性標(biāo)號(hào)位移量為位移量為D16范圍:范圍:-32768+32767H,占有兩個(gè)字節(jié)。,占有兩個(gè)字節(jié)。 而指令本身占有三個(gè)字節(jié)。而指令本身占有三個(gè)字節(jié)??梢赞D(zhuǎn)移到段內(nèi)的任一位置。可以轉(zhuǎn)移到段內(nèi)的任一位置。過(guò)程:如同過(guò)程:如同SHORT,只是位移量為,只是位移量為D16范圍范圍-32768+32767H,占有兩個(gè)字節(jié)。占有兩個(gè)字節(jié)。17 段內(nèi)
13、間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移: (CS)不變,只改變不變,只改變(IP)格式:格式:JMP WORD PTR OPROPR 為為16位寄存器、位寄存器、或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式)或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式)執(zhí)行操作:執(zhí)行操作: (IP) (EA)或(或(IP) (reg16)指令格式舉例:指令格式舉例:JMP AXJMP SIJMP TABLE BX; 操作數(shù)已定義為操作數(shù)已定義為16位存儲(chǔ)器位存儲(chǔ)器JMP ALPHA_WORD;操作數(shù)已定義為;操作數(shù)已定義為16位存儲(chǔ)器位存儲(chǔ)器JMP WORD PTR BPDI18例:例: (DS)=1000H, (BX)=1000H,
14、 (CX)=5000H, (CS)=3000H (11000H)=1234H, ( 11002H)=5678HJMP CX; (IP)=5000HJMP WORD PTR BX;(CS)=3000H , (IP)=1234H(PA)=(16d(DS)+(BX)=(11000H)=1234H 19段間直接(遠(yuǎn))轉(zhuǎn)移:段間直接(遠(yuǎn))轉(zhuǎn)移: (CS) 、 (IP)都改變都改變 格式:格式:JMP FAR PTR OPR; OPR在匯編語(yǔ)言中使用符號(hào)地址。在匯編語(yǔ)言中使用符號(hào)地址。 符號(hào)地址與指令不在同一個(gè)段里。符號(hào)地址與指令不在同一個(gè)段里。 在機(jī)器語(yǔ)言中則要指定轉(zhuǎn)向地址的偏移地址和段地址在機(jī)器語(yǔ)言中
15、則要指定轉(zhuǎn)向地址的偏移地址和段地址執(zhí)行操作:執(zhí)行操作: (IP)OPR所在的段內(nèi)偏移地址。所在的段內(nèi)偏移地址。 (CS)OPR所在的段的段址。所在的段的段址。而指令本身占有而指令本身占有5個(gè)字節(jié):個(gè)字節(jié):用用2個(gè)字分別存放符號(hào)地址的段值、偏移值,個(gè)字分別存放符號(hào)地址的段值、偏移值,用用1個(gè)字節(jié)存放操作碼。個(gè)字節(jié)存放操作碼。20FAR 遠(yuǎn)屬性標(biāo)號(hào)遠(yuǎn)屬性標(biāo)號(hào), 標(biāo)號(hào)與控制轉(zhuǎn)移指令不在同一段中。標(biāo)號(hào)與控制轉(zhuǎn)移指令不在同一段中。在匯編語(yǔ)言中,在機(jī)器語(yǔ)言中存放如下:在匯編語(yǔ)言中,在機(jī)器語(yǔ)言中存放如下:例:例: C1 SEGMENT JMP FAR PTR next_prog C1 ENDS C2 SEG
16、MINT next_prog: C2 ENDSE AE A5 05 00 20 20 00 02 02 0OPOP碼碼新新(IP)=0250H(IP)=0250H新新(CS)=2000H(CS)=2000HJMPJMP指令指令C1C1段段C2C2段段20000H20000Hnext_prognext_prog: :20250H20250H2000:0250H21 段間間接轉(zhuǎn)移:段間間接轉(zhuǎn)移:(CS) 、 (IP)都改變都改變格式:格式:JMP DWORD PTR OPR OPR 可以使用存儲(chǔ)器可以使用存儲(chǔ)器(除立即數(shù)和寄存器以外的任何一種尋址方式)(除立即數(shù)和寄存器以外的任何一種尋址方式)執(zhí)行
17、操作:執(zhí)行操作: (IP)(EA) (CS)(EA+2)例:已知例:已知 (BX)=1000H,(,(SI)=2000H , (DS)=2000H(23000H)=2211H, (23002H)=4433HJMP DWORD PTR BXSI則:則: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=2211H (CS)=(PA+2)=4433H22 ( 2)、)、Jcc 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移(10種種) JZ(JE)/JNZ(JNE),),JP(JPE)/JNP(JPO
18、),), JS/JNS, JO/JNO, JB(JNAE、JC)/JNB(JAE、JNC),), 根據(jù)兩個(gè)無(wú)符號(hào)數(shù)比較結(jié)果轉(zhuǎn)移(根據(jù)兩個(gè)無(wú)符號(hào)數(shù)比較結(jié)果轉(zhuǎn)移(4種)種) JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA) 比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移(比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移(4種)種) JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)23指令格式:指令格式:J cc OPR操作:根據(jù)上一條指令所設(shè)置的條件碼來(lái)判別測(cè)試條件轉(zhuǎn)移。操作:根據(jù)上一條指令所設(shè)置的條件碼來(lái)判別測(cè)試條件轉(zhuǎn)移。每一種條件轉(zhuǎn)移指令都有它的測(cè)試
19、條件。每一種條件轉(zhuǎn)移指令都有它的測(cè)試條件。滿足條件時(shí)滿足條件時(shí) :(IP)(IP)當(dāng)前當(dāng)前+ 使用相對(duì)尋址方式,范圍使用相對(duì)尋址方式,范圍-128+127個(gè)字節(jié)個(gè)字節(jié)不滿足條件時(shí):不滿足條件時(shí):(IP)不變,順序執(zhí)行下一條指令)不變,順序執(zhí)行下一條指令24 所有條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移形式,所有條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移形式,范圍(范圍(-128+127)。)。當(dāng)需往一個(gè)較遠(yuǎn)地方進(jìn)行條件轉(zhuǎn)移時(shí),當(dāng)需往一個(gè)較遠(yuǎn)地方進(jìn)行條件轉(zhuǎn)移時(shí),選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個(gè)單元,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個(gè)單元,然后,再用無(wú)條件轉(zhuǎn)移轉(zhuǎn)到較遠(yuǎn)的目的地。然后,再用無(wú)條件轉(zhuǎn)移轉(zhuǎn)到較遠(yuǎn)的目的地。 條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是
20、在比較完二個(gè)數(shù)大小條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個(gè)數(shù)大小后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,條件轉(zhuǎn)移指令不影響標(biāo)志位條件轉(zhuǎn)移指令不影響標(biāo)志位25按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類:按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類: 以單個(gè)狀態(tài)標(biāo)志作為轉(zhuǎn)移條件助記符以單個(gè)狀態(tài)標(biāo)志作為轉(zhuǎn)移條件助記符 轉(zhuǎn)移條件轉(zhuǎn)移條件 以以CX的值為的值為0作為轉(zhuǎn)移條件作為轉(zhuǎn)移條件JCXZCX=026JA/JNBECFZF=0高于高于/JAE/JNB/JNCCF=0 高于或等于高于或等于/無(wú)進(jìn)位無(wú)進(jìn)位JB/JNAE/JCCF=1 /不高于等于不高于等于/有進(jìn)位有進(jìn)位JBE/JNAC
21、FZF=1 /不高于不高于以兩個(gè)無(wú)符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個(gè)無(wú)符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個(gè)帶符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個(gè)帶符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件JG/JNLE(SF OF)ZF=0大于大于/JGE/JNL SF OF=0 大于或等于大于或等于/JL/JNGE SF OF=1 /不大于等于不大于等于JLE/JNG(SF OF)ZF=1/不大于不大于27條件轉(zhuǎn)移指令應(yīng)用條件轉(zhuǎn)移指令應(yīng)用 例:比較二個(gè)數(shù)是否相等例:比較二個(gè)數(shù)是否相等 如相等做動(dòng)作如相等做動(dòng)作1 否則做動(dòng)作否則做動(dòng)作2CMP AX,BXAction_2: 或或 CMP AX,BX action_1: 28例:
22、例: X,Y放在放在X,Y單元里,單元里,(帶符號(hào)數(shù)判斷帶符號(hào)數(shù)判斷) 先判先判X50,YEStoo_high, NO 做做X-Y , 溢出溢出overflow ,否則求,否則求|XY|resultMOV AX,X CMP AX,50 JG too_high ;大于轉(zhuǎn)大于轉(zhuǎn)too_highSUB AX,YJO overflow ;溢出轉(zhuǎn)溢出轉(zhuǎn)overflowJNS nonneg ; S=0轉(zhuǎn)轉(zhuǎn)nonneg NEG AX nonneg: MOV result ,AXtoo_high:overflow:29 例:例:在在M中有一個(gè)首地址為中有一個(gè)首地址為array的的N字?jǐn)?shù)組字?jǐn)?shù)組, 要求測(cè)試其中
23、正數(shù)、要求測(cè)試其中正數(shù)、0及負(fù)數(shù)的個(gè)數(shù)及負(fù)數(shù)的個(gè)數(shù). (帶符號(hào)數(shù)判斷帶符號(hào)數(shù)判斷)正數(shù)個(gè)數(shù)放在正數(shù)個(gè)數(shù)放在: (DI)中,)中, 0的個(gè)數(shù)放在的個(gè)數(shù)放在: (SI)中,)中,負(fù)數(shù)的個(gè)數(shù)放在負(fù)數(shù)的個(gè)數(shù)放在: N-(DI)-(SI)送()送(AX)如果沒(méi)有負(fù)數(shù)轉(zhuǎn)如果沒(méi)有負(fù)數(shù)轉(zhuǎn)skip, 如果有負(fù)數(shù)轉(zhuǎn)如果有負(fù)數(shù)轉(zhuǎn)neg_val程序:程序: mov cx,N ; N字?jǐn)?shù)組字?jǐn)?shù)組 mov bx,0mov di,bxmov si,bx again: cmp word ptr arrarybx,0 jle less_or_ag inc di ;正數(shù)個(gè)數(shù)正數(shù)個(gè)數(shù) jmp short neat less_or_
24、ag: jl neat inc si ; 0的個(gè)數(shù)的個(gè)數(shù)neat:add bx,2 dec cx jnz again mov ax,Nsub ax,disub ax,sijz skip;沒(méi)有負(fù)數(shù)沒(méi)有負(fù)數(shù)jmp near ptr neg_val;有負(fù)數(shù)有負(fù)數(shù)skip: neg_val: 302、 過(guò)程過(guò)程( 子程序子程序 )調(diào)用指令調(diào)用指令子程序子程序程序中具有獨(dú)立功能的部分編寫成獨(dú)立程序模塊。程序中具有獨(dú)立功能的部分編寫成獨(dú)立程序模塊。子程序(過(guò)程)定義子程序(過(guò)程)定義格式格式: 符號(hào)名符號(hào)名 PROC 類型類型 符號(hào)名符號(hào)名 ENDP 子程序調(diào)用和返回指令:子程序調(diào)用和返回指令: CALL
25、 RET(RETURN) 過(guò)程有兩種類型:過(guò)程有兩種類型:按過(guò)程與調(diào)用語(yǔ)句間的位置,過(guò)程有兩種類型。按過(guò)程與調(diào)用語(yǔ)句間的位置,過(guò)程有兩種類型。NEAR類型:調(diào)用指令與過(guò)程在同一個(gè)段中類型:調(diào)用指令與過(guò)程在同一個(gè)段中FAR類型:調(diào)用指令與過(guò)程不在同一個(gè)段中類型:調(diào)用指令與過(guò)程不在同一個(gè)段中CALL指令和指令和RET指令都不影響條件碼。指令都不影響條件碼。31(1)、)、 CALL( Call a procedure)調(diào)用調(diào)用 CALL調(diào)用指令調(diào)用指令調(diào)用地址由指令給出調(diào)用地址由指令給出CALL調(diào)用指令有調(diào)用指令有4 4種:種: 段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段間直接調(diào)用段間直接調(diào)用 段內(nèi)間接調(diào)用段內(nèi)間
26、接調(diào)用段間間接調(diào)用段間間接調(diào)用32段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用格式:格式:CALL DST ;(SP)(SP)-2, (SP)+1,(SP)(IP); (IP) (IP)+D16 DST給出轉(zhuǎn)向地址(子程序的入口地址)。給出轉(zhuǎn)向地址(子程序的入口地址)。 D16機(jī)器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。機(jī)器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。 位移量為位移量為D16范圍范圍-32768+32767H,占有兩個(gè)字節(jié)。,占有兩個(gè)字節(jié)。33工作過(guò)程如下:工作過(guò)程如下:例:例: 過(guò)程過(guò)程 code SEGMENT ;code段段 CALL subp ;調(diào)用調(diào)用 指令指令 YYY入棧入棧 ,D16
27、 =subp-yyy XXX: PROC NEAR ;過(guò)程定義過(guò)程定義 RET ;返回返回 subp ENDP code ENDS34例:兩個(gè)數(shù)據(jù)變量例:兩個(gè)數(shù)據(jù)變量X與與Y相乘相乘,子程序可以直接訪問(wèn)模子程序可以直接訪問(wèn)模塊中的變量。塊中的變量。DATASG SEGMENT X DW 100 Y DW 10DATASG ENDSCODESG SEGMENT MAIN PROC FAR ASSUME CS:CODESG, DS:DATA SG START: CALL subp RET MAIN ENDPsubp PROC NEAR MOV AX,XMOV BX,Y MUL BXRETsubp
28、ENDCODESG ENDS END START35 段內(nèi)間接調(diào)用:段內(nèi)間接調(diào)用:格式:格式: CALL DST; WORD PTR OPR OPR 為為16位寄存器,位寄存器, 或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式)或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式) (SP)(SP)-2 (SP)+1,(,(SP)(IP) (IP)(EA) EA由由DST尋址方式所確定的有效地址。尋址方式所確定的有效地址。36 段間直接調(diào)用:段間直接調(diào)用:格式:格式:CALL FAR PTR DST;(SP)(SP)-2(SP)(SP)-2 37例例 : CSEG1 SEGMENT CALL FAR PTR s
29、ubp;處的處的CS:IP入棧轉(zhuǎn)入棧轉(zhuǎn)subp : CSEG1 ENDSCSEG2 SEGMENT subp PROC RET subp ENDP CSEG2 ENDS38 段間間接調(diào)用:段間間接調(diào)用:格式:格式: CALL DWORD PTR DST執(zhí)行操作:執(zhí)行操作: (SP)(SP)-2 (SP)(SP)-2 EA由由DST的尋址方式確定的有效地址。的尋址方式確定的有效地址。39(2)、 RET( Reture from procedure)返回返回 RET返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。
30、*為能準(zhǔn)確返回為能準(zhǔn)確返回 ,返回指令類型與調(diào)用指令類型相對(duì)應(yīng)。,返回指令類型與調(diào)用指令類型相對(duì)應(yīng)。段內(nèi)返回段內(nèi)返回段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回段間帶立即數(shù)返回在子程序調(diào)用時(shí),返回地址入棧在子程序調(diào)用時(shí),返回地址入棧 返回時(shí):將返回地址出棧返回時(shí):將返回地址出棧 (IP)(段內(nèi)或段間)。)(段內(nèi)或段間)。 (CS)(段間)。)(段間)。40段內(nèi)返回:段內(nèi)返回:格式:格式: RET; 機(jī)器碼:機(jī)器碼: C3H或者或者C2H (IP)(SP)+1,(,(SP) (SP)(SP)+2段間返回:段間返回:格式:格式: RET; 機(jī)器碼:機(jī)器碼: CBH或或CAH
31、(IP)(SP)+1,(,(SP) (SP)(SP)+2 (CS)(SP)+1,(,(SP) (SP)(SP)+241段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回格式:格式:RET EXP;執(zhí)行操作:執(zhí)行操作: (IP)(SP)+1,(,(SP) (SP)(SP)+2 EXP是一個(gè)表達(dá)式是一個(gè)表達(dá)式計(jì)算出來(lái)的常數(shù)成為機(jī)器指令中位移量計(jì)算出來(lái)的常數(shù)成為機(jī)器指令中位移量D16,修改堆棧,修改堆棧 指針。指針。42例如:例如:RET EXP 堆棧使用情況堆棧使用情況: ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX PUSH B
32、X PUSH CX CS:XXXX MOV AH,4CH INT 21H MAIN ENDP(BX)(BX)(SP)(SP)(CX)(CX)XXXXHXXXXHPUSH BXPUSH BXPUSH CXPUSH CXCALL DELCHARCALL DELCHARRET 4RET 4RETRETDELCHAR PROC DELCHAR ENDP END STARTRET EXP 堆棧使用情況堆棧使用情況: 43 段間帶立即數(shù)返回:段間帶立即數(shù)返回:格式:格式:RET EXP; (IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)(SP)+1,(,(SP)(SP)(SP)+2(SP)(
33、SP)+D16 CALL指令和指令和RET指令都不影響條件碼。指令都不影響條件碼。44例例:學(xué)習(xí)使用學(xué)習(xí)使用 段內(nèi)、段間直接調(diào)用指令的使用及堆棧情況段內(nèi)、段間直接調(diào)用指令的使用及堆棧情況主程序主程序 MAIN在一個(gè)代碼段中在一個(gè)代碼段中子程序子程序 PRO-A PRO-B PRO-C 在另一個(gè)代碼段在另一個(gè)代碼段程序調(diào)用關(guān)系程序調(diào)用關(guān)系:另一個(gè)代碼段另一個(gè)代碼段 PRO-A PRO-B CALL near ptr PRO-B CALL near ptr PRO-C (IP)=2500H (IP)=4000H CALL near ptr PRO-C RET (IP)=3700H PRO-C RE
34、T RET (SP)=0100H MAINCALL far ptr PRO-A(CS)=0500H (IP)=1000H 45棧頂TOS棧頂TOS0100H0100H0500H0500H1000H1000H00FCH00FCH0500H0500H1000H1000H2500H2500H00FAH00FAHSPSP(1)(1)SPSPTOSTOSSPSP(2)(2)(3)(3)TOSTOS4000H4000H2500H2500H1000H1000H0500H0500H00F8H00F8H4000H4000H2500H2500H1000H1000H0500H0500H4000H4000H2500H
35、2500H1000H1000H00FAH00FAH0500H0500H00FCH00FCHTOSTOSTOSTOSTOSTOSSPSPSPSPSPSP(4)(4)(5)(5)(6)(6)4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H4000H4000H3700H3700H1000H1000H0500H0500H00FAH00FAH00FCH00FCH0100H0100HTOSTOSSPSPSPSPSPSP(9)(9)(8)(8)(7)(7)TOSTOSTOSTOS堆棧情況:堆棧情況
36、: 46操作數(shù)操作數(shù)執(zhí)行操作執(zhí)行操作符號(hào)地址符號(hào)地址 (SHORT)(IP) (IP)當(dāng)前當(dāng)前+ 8位位移量位位移量符號(hào)地址符號(hào)地址 ( NEAR屬性屬性)(IP) (IP)當(dāng)前當(dāng)前+ 16位位移量位位移量reg (16位)或位)或 mem ( DW類型類型 )(IP) ( reg ) 或或(IP) (mem)符號(hào)地址符號(hào)地址 ( FAR屬性屬性)(IP) 符號(hào)地址的偏值符號(hào)地址的偏值 (CS) 符號(hào)地址的段值符號(hào)地址的段值mem ( DD類型類型 )(IP) ( mem ), (CS) (mem+2 ) 當(dāng)前當(dāng)前IP的值為控制轉(zhuǎn)移指令下一條指令的偏移地址。的值為控制轉(zhuǎn)移指令下一條指令的偏移地
37、址。 位移量位移量 = 符號(hào)地址的偏移量符號(hào)地址的偏移量 - 當(dāng)前當(dāng)前IP的值。的值。 符號(hào)地址(目標(biāo)地址)符號(hào)地址(目標(biāo)地址)= 當(dāng)前當(dāng)前IP的值的值 + 位移量位移量 指令格式:指令格式: JMP 操作數(shù)操作數(shù) 47由由CS是否變化、以及操作數(shù)類型決定情況如下表是否變化、以及操作數(shù)類型決定情況如下表轉(zhuǎn)移方式轉(zhuǎn)移方式CS操作數(shù)操作數(shù)跳轉(zhuǎn)范圍跳轉(zhuǎn)范圍段內(nèi)直接短段內(nèi)直接短 方方 式式不變不變符號(hào)地址符號(hào)地址(SHORT)-128 127即即0FFH段內(nèi)直接近段內(nèi)直接近 方方 式式不變不變符號(hào)地址符號(hào)地址(NEAR屬性屬性)一個(gè)段內(nèi)一個(gè)段內(nèi)0FFFFH段段 內(nèi)間接方式內(nèi)間接方式不變不變Reg me
38、m (DW類型類型)一個(gè)段內(nèi)一個(gè)段內(nèi)0FFFFH段段 間直接方式間直接方式變變符號(hào)地址符號(hào)地址(FAR屬性屬性)整個(gè)內(nèi)存整個(gè)內(nèi)存0FFFFFH段段 間間接方式間間接方式變變mem(DD類型類型)整個(gè)內(nèi)存整個(gè)內(nèi)存0FFFFFH48 各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式轉(zhuǎn)移方式轉(zhuǎn)移方式無(wú)條件轉(zhuǎn)移無(wú)條件轉(zhuǎn)移JMP條件轉(zhuǎn)移條件轉(zhuǎn)移Jcc循環(huán)轉(zhuǎn)移循環(huán)轉(zhuǎn)移LOOPxx 子程調(diào)用子程調(diào)用CALL段內(nèi)直接短段內(nèi)直接短 方方 式式 段內(nèi)直接近段內(nèi)直接近 方方 式式段段 內(nèi)間接方式內(nèi)間接方式段段 間間 直接方式直接方式段段 間間接間間接49例例 : JMP again ()JMP BX
39、()JMP WORD PTR BX()JMP DWORD PTR()Jz AX () LOOP BX ()Jnz next () (若若 next的位移量超出的位移量超出-128127)指令指令JMP、CALL 、Jcc、LOOPxx本身對(duì)標(biāo)志無(wú)影響本身對(duì)標(biāo)志無(wú)影響。503、循環(huán)控制指令、循環(huán)控制指令格式格式: LOOPxx符號(hào)地址符號(hào)地址 執(zhí)行執(zhí)行 操作操作 : (CX) (CX)- 1 此此操作不影響標(biāo)志操作不影響標(biāo)志 檢查轉(zhuǎn)移條件檢查轉(zhuǎn)移條件xx,滿足轉(zhuǎn)向目標(biāo)地址去執(zhí)行,滿足轉(zhuǎn)向目標(biāo)地址去執(zhí)行; 不滿足執(zhí)行不滿足執(zhí)行LOOPxx后一條指令后一條指令轉(zhuǎn)移方式轉(zhuǎn)移方式 只允許段內(nèi)直接短方式,
40、跳轉(zhuǎn)范圍只允許段內(nèi)直接短方式,跳轉(zhuǎn)范圍-128127助記符助記符轉(zhuǎn)移條件轉(zhuǎn)移條件不轉(zhuǎn)移條件不轉(zhuǎn)移條件LOOPCX0CX=0LOOPZCX0且且ZF=1CX=0或或ZF=0LOOPNZCX0且且ZF=0CX=0或或ZF=151與條件轉(zhuǎn)移指令不同的是:與條件轉(zhuǎn)移指令不同的是:循環(huán)指令隱含循環(huán)指令隱含 ( CX ) 減操作。減操作。例:用循環(huán)指令將例:用循環(huán)指令將BL寄存器的內(nèi)容按二進(jìn)制形式顯示出來(lái)寄存器的內(nèi)容按二進(jìn)制形式顯示出來(lái)學(xué)習(xí):學(xué)習(xí): LOOP指令指令MOV CX , 8 next: ROL BL , 1 MOV DL , BL AND DL , 0000 0001B ADD DL , 00
41、11 0000B MOV AH , 2 INT 21H DEC CX JNZ nextLOOP next52循環(huán)指令說(shuō)明:循環(huán)指令說(shuō)明: LOOP退出循環(huán)條件是(退出循環(huán)條件是(CX)=0 LOOPZ和和LOOPNZ提供了提前結(jié)束循環(huán)的可能提供了提前結(jié)束循環(huán)的可能, 不一定要等到不一定要等到(CX)=0才退出循環(huán)。才退出循環(huán)。 在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等時(shí)繼續(xù)查找。,不相等時(shí)繼續(xù)查找。比較兩串時(shí),當(dāng)有字符不等,就可退出,說(shuō)明兩字符串不等。比較兩串時(shí),當(dāng)有字符不等,就可退出,說(shuō)明兩字符串不等??捎每捎肔OOPZ,當(dāng)相等時(shí)繼續(xù)比
42、較。,當(dāng)相等時(shí)繼續(xù)比較。執(zhí)行完執(zhí)行完 LOOPNZ或或LOOPZ后,根據(jù)后,根據(jù)ZF標(biāo)志的值判斷結(jié)果標(biāo)志的值判斷結(jié)果對(duì)查找字符,對(duì)查找字符,ZF=1,說(shuō)明找到;否則沒(méi)有找到。說(shuō)明找到;否則沒(méi)有找到。 對(duì)串比較,對(duì)串比較,ZF=1, 說(shuō)明兩串相等;否則不等。說(shuō)明兩串相等;否則不等。53 例:例: 在在string字符串中查找空格字符,串長(zhǎng)度為字符串中查找空格字符,串長(zhǎng)度為N。用條件轉(zhuǎn)移:用條件轉(zhuǎn)移: JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX,string MOV AL,20H next: CMP AL,BX JZ find INC BX
43、DEC CX JNZ next 未找到處理未找到處理 Find: 找到處理找到處理 修改偏址修改偏址BXYNAL 關(guān)鍵字關(guān)鍵字CX 串長(zhǎng)度串長(zhǎng)度NDS:BX 串首址串首址判判BX是關(guān)鍵字?是關(guān)鍵字? (CX) (CX)- -1找到處理找到處理未找到處理未找到處理 (CX) = 0 ?YN結(jié)束出口結(jié)束出口54用條件轉(zhuǎn)移:用條件轉(zhuǎn)移: JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ findINC BX DEC CX JNZ next 未找到處理未找到處理JMP exit
44、 find: 找到處理找到處理exit: 結(jié)束出口結(jié)束出口用循環(huán)指令用循環(huán)指令:LOOP NZ nextMOV CX, NMOV AX, SEG stringMOV DS, AXLEA BX, string MOV AL,20H next: CMP AL, BX INC BXLOOP NZ nextJZ find未找到處理未找到處理 JMP exit find: 找到處理找到處理exit: 結(jié)束出口結(jié)束出口DEC BXnext : INC BXCMP AL,BX LOOP NZ nextJZ find未找到處理未找到處理 JMP exit find: 找到處理找到處理exit: 結(jié)束出口結(jié)束出
45、口55思考:思考: 去掉指令去掉指令JMP exit ,程序執(zhí)行結(jié)果會(huì)怎樣?,程序執(zhí)行結(jié)果會(huì)怎樣? PUSH F、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 執(zhí)行完執(zhí)行完LOOPNZ后,可否根據(jù)后,可否根據(jù)CX=0來(lái)來(lái)判斷查找結(jié)果判斷查找結(jié)果? 有人認(rèn)為有人認(rèn)為CX=0,即,即說(shuō)明沒(méi)找到說(shuō)明沒(méi)找到,對(duì)嗎?,對(duì)嗎? 56 MOV CX,28H MOV SI,0FFHNEXT1:INC SI CMP BYTE PTR SI,0 LOOPZ NEXT1 ;當(dāng);當(dāng)Z=1、(、(CX)0循環(huán);循環(huán); 當(dāng)當(dāng)Z=0,或(,或(CX)=0結(jié)束循環(huán)。結(jié)束循環(huán)。 JNZ OKK
46、;當(dāng)找到非零元素轉(zhuǎn);當(dāng)找到非零元素轉(zhuǎn)OKK。 CALL DISPLAY1;當(dāng)找不到非零元素轉(zhuǎn);當(dāng)找不到非零元素轉(zhuǎn)DISPLAY1OKK: CALL DISPLAY2用用LOOPZ和和LOOPNZ指令提供提前結(jié)束循環(huán)的可能性。指令提供提前結(jié)束循環(huán)的可能性。有時(shí)需要字符串中查找一個(gè)字符,找到后可提前結(jié)束循環(huán),有時(shí)需要字符串中查找一個(gè)字符,找到后可提前結(jié)束循環(huán),用用LOOPZ、LOOPNZ來(lái)處理。來(lái)處理。例:例:40個(gè)元素構(gòu)成的數(shù)組,找出第一個(gè)非零元素。個(gè)元素構(gòu)成的數(shù)組,找出第一個(gè)非零元素。DISPLAY1 RETDISPLAY2 RET574、中斷指令、中斷指令q 中斷(中斷(Interrupt)
47、:): 有時(shí)當(dāng)系統(tǒng)運(yùn)行或程序運(yùn)行期間遇到某些特殊情況,有時(shí)當(dāng)系統(tǒng)運(yùn)行或程序運(yùn)行期間遇到某些特殊情況, 需要計(jì)算機(jī)自動(dòng)執(zhí)行一組專門的例行程序來(lái)進(jìn)行處理。需要計(jì)算機(jī)自動(dòng)執(zhí)行一組專門的例行程序來(lái)進(jìn)行處理。q 中斷例行程序(或中斷子程序)中斷例行程序(或中斷子程序)(Interrupt routine):所執(zhí)行的這組程序就稱為中斷子程序。所執(zhí)行的這組程序就稱為中斷子程序。q 種類:種類: 中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。 內(nèi)部中斷內(nèi)部中斷如除法運(yùn)算中除數(shù)為如除法運(yùn)算中除數(shù)為0、中斷指令引起的中斷。、中斷指令引起的中斷。 外部中斷外部中斷處理處理I
48、/O設(shè)備與設(shè)備與CPU之間的通信。之間的通信。58q CPU響應(yīng)一次中斷自動(dòng)完成三件事情:響應(yīng)一次中斷自動(dòng)完成三件事情:(PSW)入棧)入棧 保護(hù)現(xiàn)場(chǎng),保護(hù)現(xiàn)場(chǎng),(CS),(),(IP)保存入棧)保存入棧 保留斷點(diǎn),保留斷點(diǎn), 轉(zhuǎn)中斷例行程序去執(zhí)行。轉(zhuǎn)中斷例行程序去執(zhí)行。q 中斷返回時(shí):中斷返回時(shí): 恢復(fù)(恢復(fù)(IP)、()、(CS)及()及(PSW)中斷向量:中斷例行程序入口地址。中斷向量:中斷例行程序入口地址。IBM-PC中,存儲(chǔ)器的最底地址中,存儲(chǔ)器的最底地址00000H003FFH為中斷向量區(qū),為中斷向量區(qū), 存放存放256種類型中斷例行程序入口地址種類型中斷例行程序入口地址, 每個(gè)中
49、斷向量占每個(gè)中斷向量占4個(gè)單元個(gè)單元。中斷指定類型號(hào)中斷指定類型號(hào)N 4取得指定類型的中斷向量地址。取得指定類型的中斷向量地址。59例:中斷類型例:中斷類型9,9 4=36 00024H00027H單元中放中斷向量。單元中放中斷向量。IBM-PC機(jī)中為每個(gè)類型規(guī)定了一種功能。機(jī)中為每個(gè)類型規(guī)定了一種功能。中斷類型中斷類型功能功能類型類型0除數(shù)為除數(shù)為0中斷例行程序中斷例行程序類型類型1單步單步類型類型2非屏蔽中斷,非屏蔽中斷, NMI類型類型3設(shè)置斷點(diǎn)設(shè)置斷點(diǎn)類型類型4溢出處理中斷,溢出處理中斷,INTO指令指令類型類型10顯示設(shè)備中斷顯示設(shè)備中斷類型類型20程序結(jié)束中斷程序結(jié)束中斷類型類型2
50、1DOS系統(tǒng)功能調(diào)用功能程序系統(tǒng)功能調(diào)用功能程序*除非特別注明,類型號(hào)是以除非特別注明,類型號(hào)是以16進(jìn)制形式表示的。進(jìn)制形式表示的。60(1). 介紹幾條指令:介紹幾條指令:INT n,IRET 格式:格式:INT n ; n常數(shù)或表達(dá)式,常數(shù)或表達(dá)式,n=0255或或INT 執(zhí)行操作:執(zhí)行操作: (SP)(SP)-2,(SP)+1,(SP) (PSW)(SP)(SP)-2,(SP)+1,(SP) (CS)(SP)(SP)-2,(SP)+1,(SP) (IP)(IP) (N4)(CS) (N4+2)清除清除IF、TF,避免進(jìn)入中斷以后不被外面其它中斷所打斷,避免進(jìn)入中斷以后不被外面其它中斷所
51、打斷 及進(jìn)入中斷以后按單步執(zhí)行。及進(jìn)入中斷以后按單步執(zhí)行。61q 類型類型03的中斷稱為內(nèi)部中斷。的中斷稱為內(nèi)部中斷。 類型類型0 :指令系統(tǒng)沒(méi)有:指令系統(tǒng)沒(méi)有INT0這條指令這條指令 除數(shù)為除數(shù)為0中斷中斷 除數(shù)為除數(shù)為0 :它:它既不是外部中斷既不是外部中斷 也不是軟件中斷也不是軟件中斷。 是是由由 CPU自身產(chǎn)生的自身產(chǎn)生的,所以無(wú)對(duì)應(yīng)中斷指令。,所以無(wú)對(duì)應(yīng)中斷指令。 有符號(hào)數(shù)進(jìn)行除法所得的商超出規(guī)定范圍有符號(hào)數(shù)進(jìn)行除法所得的商超出規(guī)定范圍有符號(hào)數(shù)進(jìn)行除法運(yùn)算,所得的有符號(hào)數(shù)進(jìn)行除法運(yùn)算,所得的商超出規(guī)定范圍商超出規(guī)定范圍,CPU自動(dòng)產(chǎn)生類型為自動(dòng)產(chǎn)生類型為0的中斷的中斷,轉(zhuǎn)入響應(yīng)的中斷
52、處理程序。,轉(zhuǎn)入響應(yīng)的中斷處理程序。62中斷處理程序入口地址的地址中斷處理程序入口地址的地址類型類型00000H00001H類型類型0(IP)00002H00003H類型類型0(CS)00004H00005H類型類型1(IP)00006H00007H類型類型1(CS)00008H00009H類型類型2(IP)0000AH0000BH類型類型2(CS)0000CH0000DH類型類型3(IP)0000EH0000FH類型類型3(CS)00010H00011H類型類型4(IP)00012H00013H類型類型4(CS)003FCH003FDH類型類型255(IP)003FEH003FFH類型類型2
53、55(CS)63 類型類型1單步中斷單步中斷 TF=1進(jìn)入單步中斷。進(jìn)入單步中斷。 單步中斷不是由外部硬件或程序中的中斷產(chǎn)生,單步中斷不是由外部硬件或程序中的中斷產(chǎn)生, 而是而是CPU測(cè)試測(cè)試TF=1時(shí)產(chǎn)生的。時(shí)產(chǎn)生的。單步中斷單步中斷每執(zhí)行一條指令,進(jìn)行一次單步中斷處理,每執(zhí)行一條指令,進(jìn)行一次單步中斷處理,顯示出一系列內(nèi)顯示出一系列內(nèi) 部寄存器的值,部寄存器的值,并告并告 示一些附帶的信息。示一些附帶的信息。 一般用于調(diào)試程序中逐條執(zhí)行用戶程序。一般用于調(diào)試程序中逐條執(zhí)行用戶程序。 對(duì)于有對(duì)于有重復(fù)前綴串操作指令重復(fù)前綴串操作指令單步操作下,單步操作下,每重復(fù)一次每重復(fù)一次將產(chǎn)生一個(gè)單步中
54、斷將產(chǎn)生一個(gè)單步中斷,而不,而不 是整個(gè)串操作結(jié)束后進(jìn)入單步操是整個(gè)串操作結(jié)束后進(jìn)入單步操作。作。單步操作單步操作T、P 不同點(diǎn)?不同點(diǎn)?64 類型類型2NMI中斷,非屏蔽中斷中斷,非屏蔽中斷NMI中斷是由中斷是由NMI引腿引入,引腿引入,不受不受IF屏蔽屏蔽,只要只要NMI腿出現(xiàn)中斷請(qǐng)求腿出現(xiàn)中斷請(qǐng)求 中斷處理子程序入口地址在中斷處理子程序入口地址在0:0008H0:000BH中,中,CPU予以響應(yīng)予以響應(yīng), 進(jìn)入對(duì)應(yīng)的中斷處理。進(jìn)入對(duì)應(yīng)的中斷處理。一般用于處理一般用于處理系統(tǒng)的重大故障系統(tǒng)的重大故障。65 類型類型3斷點(diǎn)中斷斷點(diǎn)中斷8088提供的一種調(diào)試手段提供的一種調(diào)試手段。 設(shè)置斷點(diǎn)過(guò)
55、程(在設(shè)置斷點(diǎn)過(guò)程(在DEBUG下):下):G = 起始地址起始地址斷點(diǎn)地址斷點(diǎn)地址 用戶程序指定斷點(diǎn):用戶程序指定斷點(diǎn): 用斷點(diǎn)的中斷指令用斷點(diǎn)的中斷指令I(lǐng)NT3來(lái)代替原有指令,來(lái)代替原有指令, 把把用戶原有指令進(jìn)棧保存用戶原有指令進(jìn)棧保存, 這樣運(yùn)行到斷點(diǎn)處執(zhí)行這樣運(yùn)行到斷點(diǎn)處執(zhí)行INT3,轉(zhuǎn)入中斷處理程序,轉(zhuǎn)入中斷處理程序 , 顯示一系列寄存器值,并給出一些重要信息,用戶可顯示一系列寄存器值,并給出一些重要信息,用戶可判斷正誤。判斷正誤。 斷點(diǎn)中斷還負(fù)責(zé)恢復(fù)進(jìn)入中斷前的被斷點(diǎn)中斷還負(fù)責(zé)恢復(fù)進(jìn)入中斷前的被INT3替換掉的替換掉的那條指令。那條指令。66(2) 類型類型4溢出中斷,溢出中斷,
56、INTO指令指令格式:格式:INT O ;該指令檢測(cè)該指令檢測(cè)OF標(biāo)志,標(biāo)志,OF=1執(zhí)行執(zhí)行 INT O,否則執(zhí)行,否則執(zhí)行INTO下一條執(zhí)行下一條執(zhí)行。執(zhí)行操作:執(zhí)行操作: (SP)(SP)-2 , (SP)+1,(SP) (PSW) (SP)(SP)-2 ,(,(SP)+1,(SP) (CS) (SP)(SP)-2 ,(SP)+1,(SP) (IP) (IP) (10H) (CS) (12H) IF=TF=067執(zhí)行:執(zhí)行: OF為為1時(shí),執(zhí)行時(shí),執(zhí)行 INT O ; OF為為0時(shí),執(zhí)行時(shí),執(zhí)行INTO下一條執(zhí)行。下一條執(zhí)行。 例例 、 INTO 、 、 、 、 類型類型4中斷子程中斷子
57、程 、 、 、68使用注意事項(xiàng):使用注意事項(xiàng):對(duì)于無(wú)符號(hào),有符號(hào)對(duì)于無(wú)符號(hào),有符號(hào) *、/,指令各不相同,指令各不相同。對(duì)于無(wú)符號(hào),有符號(hào)對(duì)于無(wú)符號(hào),有符號(hào) +、- 指令同,指令同,有、無(wú)符號(hào)數(shù)有、無(wú)符號(hào)數(shù) +、- 都有可能產(chǎn)生溢出。都有可能產(chǎn)生溢出。 對(duì)于無(wú)符號(hào)數(shù)溢出不是什么錯(cuò)誤,表示低位字節(jié)或字向高位產(chǎn)生進(jìn)位、借位。對(duì)于無(wú)符號(hào)數(shù)溢出不是什么錯(cuò)誤,表示低位字節(jié)或字向高位產(chǎn)生進(jìn)位、借位。 有符號(hào)數(shù)溢出意味著出錯(cuò)所以應(yīng)避免。有符號(hào)數(shù)溢出意味著出錯(cuò)所以應(yīng)避免。有符號(hào)數(shù),有符號(hào)數(shù),OF=1表示有符號(hào)數(shù)產(chǎn)生溢出。表示有符號(hào)數(shù)產(chǎn)生溢出。 無(wú)符號(hào)數(shù),無(wú)符號(hào)數(shù),OF=1并不表示錯(cuò)誤。并不表示錯(cuò)誤。 對(duì)對(duì)CPU來(lái)說(shuō)分不清楚進(jìn)行的是有、無(wú)符號(hào)來(lái)說(shuō)分不清楚進(jìn)行的是有、無(wú)符號(hào)+ -運(yùn)算,只能是程序員清楚。運(yùn)算,只能是程序員清楚。8088提供了一條提供了一條INTO指令,指令,專門用來(lái)判斷有符號(hào)數(shù)專門用來(lái)判斷有符號(hào)數(shù)+、-溢出。溢出。69 INTO跟在有符號(hào)數(shù)跟在有符號(hào)數(shù)+、-后面:后面:OF=1,執(zhí)行,執(zhí)行INTO,進(jìn)入類型,進(jìn)入類型4的溢出中斷,的溢出中斷,。OF1,執(zhí)行,執(zhí)行INTO,也轉(zhuǎn)入中斷后子程序,也轉(zhuǎn)入中斷后子程序,程序?qū)?biāo)志進(jìn)行測(cè)試程序?qū)?biāo)志進(jìn)行測(cè)試。* 這條指令可以寫在一條算術(shù)指令后面。這條指令可以寫在一條算術(shù)指令后面。 若產(chǎn)生溢出,若產(chǎn)生溢出,OF=1,則啟動(dòng)中斷過(guò)程,不進(jì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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 1《白鷺》說(shuō)課稿-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 2025技術(shù)咨詢合同書
- 2025大連市住宅小區(qū)物業(yè)管理委托合同
- 2024年五年級(jí)品社下冊(cè)《同是炎黃子孫》說(shuō)課稿 山東版001
- 5《玲玲的畫》說(shuō)課稿-2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè)統(tǒng)編版
- 2023二年級(jí)數(shù)學(xué)下冊(cè) 6 有余數(shù)的除法第5課時(shí) 解決問(wèn)題(1)說(shuō)課稿 新人教版
- 27我的伯父魯迅先生(說(shuō)課稿)-2024-2025學(xué)年六年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版001
- 2024-2025學(xué)年高中地理下學(xué)期第4周說(shuō)課稿(世界的自然資源)
- 2023三年級(jí)數(shù)學(xué)上冊(cè) 一 動(dòng)物趣聞-克、千克、噸的認(rèn)識(shí) 信息窗2噸的認(rèn)識(shí)說(shuō)課稿 青島版六三制
- 蕪湖廠房推拉棚施工方案
- 蘇北四市(徐州、宿遷、淮安、連云港)2025屆高三第一次調(diào)研考試(一模)生物試卷(含答案)
- 安全生產(chǎn)法律法規(guī)匯編(2025版)
- 監(jiān)察部部長(zhǎng)崗位職責(zé)
- 山西省太原市杏花嶺區(qū)年三年級(jí)數(shù)學(xué)第一學(xué)期期末考試模擬試題含解析
- 《農(nóng)機(jī)化促進(jìn)法解讀》課件
- 量子力學(xué)課件1-2章-波函數(shù)-定態(tài)薛定諤方程
- 最新變態(tài)心理學(xué)課件
- 【自考練習(xí)題】石家莊學(xué)院概率論與數(shù)理統(tǒng)計(jì)真題匯總(附答案解析)
- 農(nóng)村集體“三資”管理流程圖
- 高中英語(yǔ) 牛津譯林版必修第三冊(cè) Unit 2詞匯全解
- (新版教材)粵教粵科版三年級(jí)下冊(cè)科學(xué)全冊(cè)教學(xué)課件PPT
評(píng)論
0/150
提交評(píng)論