![控制傳送指令_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf41.gif)
![控制傳送指令_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf42.gif)
![控制傳送指令_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf43.gif)
![控制傳送指令_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf44.gif)
![控制傳送指令_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bd97a3fa-4525-4754-ac1c-d2bcfb166cf4/bd97a3fa-4525-4754-ac1c-d2bcfb166cf45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1(Control transfer instructions)(一)、(一)、 2轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。無條件轉(zhuǎn)移指令有五種格式:無條件轉(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 段間直接遠轉(zhuǎn)移段間直接遠轉(zhuǎn)移q 段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移無條件地將控制轉(zhuǎn)移到指令中規(guī)定的目的地。無條件地將控制轉(zhuǎn)移到指令中規(guī)定的目的地。目標地址可以是:直接方式目標地址可以是:直接方式/間接方式給出。間接方式給出。JMP指令不影響標志位。指令不影響標志位。3匯編程序設(shè)計中常利用條件轉(zhuǎn)移指令來實現(xiàn)分支。匯編
2、程序設(shè)計中常利用條件轉(zhuǎn)移指令來實現(xiàn)分支。操作數(shù)必須是短標號。操作數(shù)必須是短標號。 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è)計成為過程(子程序)供調(diào)用。過程結(jié)束,返回調(diào)用處。序段設(shè)計成為過程(子程序)供調(diào)
3、用。過程結(jié)束,返回調(diào)用處。過程調(diào)用指令和返回指令過程調(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 可以在程序中安排一條中斷指令引起中斷可以在程序中安排一條中斷指令引起中斷過程,這種中斷稱為軟中斷。過程,這種中斷稱為軟中斷。 (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)移是通過將目標地址傳送給內(nèi)部,轉(zhuǎn)移是通過將目標地址傳送給IP來實現(xiàn)的。來實現(xiàn)的。 9q 先介召控制和非控制轉(zhuǎn)移指令的概念先介召控制和非控制轉(zhuǎn)移指令的概念 非控制轉(zhuǎn)移指令非控制轉(zhuǎn)移指令:指令本身對指令本身對CS和和IP均無操作,形成順序執(zhí)行結(jié)構(gòu)。均無操作,形成順序執(zhí)行結(jié)構(gòu)。 順序執(zhí)行結(jié)構(gòu):順序執(zhí)行結(jié)構(gòu): 順序存放,順序執(zhí)行順序存放,順序執(zhí)行 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令: 以以CS和和IP為主要操作對
6、象,為主要操作對象, 改變改變CS和和IP寄存器的值,寄存器的值, 就改變了程序執(zhí)行的流程。就改變了程序執(zhí)行的流程。 程序是指令的集合程序是指令的集合 指令在內(nèi)存中順序存放指令在內(nèi)存中順序存放10在在8086/8088中,指令的地址固定由中,指令的地址固定由CS和和IP兩個寄存器決定。兩個寄存器決定。 CS和和IP兩寄存器的內(nèi)容決定了程序的流程兩寄存器的內(nèi)容決定了程序的流程 , q ,( CS ) = FFFFH,( IP ) = 0 故故 第一條指令在內(nèi)存的第一條指令在內(nèi)存的ROM區(qū)。區(qū)。q CPU取來一條指令后,取來一條指令后, 自動將自動將IP的值加上該指令的字節(jié)數(shù),的值加上該指令的字節(jié)
7、數(shù), 使使IP順序指向下一條指令,順序指向下一條指令, CPU取來緊接著的指令執(zhí)行。取來緊接著的指令執(zhí)行。 (此時此時IP的變化由的變化由CPU內(nèi)部的硬件自動完成內(nèi)部的硬件自動完成)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)移的目標地址(或轉(zhuǎn)向地址)。指令必須指定轉(zhuǎn)移
8、的目標地址(或轉(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)進行轉(zhuǎn)移指在同一段的范圍之內(nèi)進行轉(zhuǎn)移 即用新的轉(zhuǎn)移目標地址代替原有的即用新的轉(zhuǎn)移目標地址代替原有的IP值。值。段間轉(zhuǎn)移:要修改段間轉(zhuǎn)移:要修改IP、 CS寄存器的內(nèi)容寄存器的內(nèi)容 轉(zhuǎn)到另一段去執(zhí)行程序。轉(zhuǎn)到另一段去執(zhí)行程序。 即即轉(zhuǎn)移目標地址轉(zhuǎn)移目標地址= 新的段地址和偏移地址兩部分組成。新的段地址和偏移地址兩部分組成。13段內(nèi)直接短轉(zhuǎn)移:段內(nèi)直接短轉(zhuǎn)移:格式:格式:JMP SHORT OPR OPR在匯編語言中使用符號地址
9、。在匯編語言中使用符號地址。在機器語言中存放位移量在機器語言中存放位移量D8位移量位移量D8 = 符號地址的偏移地址符號地址的偏移地址 - 當(dāng)前當(dāng)前IP的值的值 執(zhí)行操作:(執(zhí)行操作:(IP)(IP)當(dāng)前當(dāng)前+D8 SHORT 短屬性標號短屬性標號8位位移量位位移量D8的范圍在(的范圍在(-128 127)之間)之間,占有一個字節(jié)。,占有一個字節(jié)。而指令本身占有兩個字節(jié)。而指令本身占有兩個字節(jié)。 14例如:代碼段內(nèi)有一條無條件轉(zhuǎn)移指令在匯編語言中使用符號地址。例如:代碼段內(nèi)有一條無條件轉(zhuǎn)移指令在匯編語言中使用符號地址。JMP SHORT NEXT指令執(zhí)行過程:指令執(zhí)行過程:NEXT在匯編語言中
10、使用符號地址在匯編語言中使用符號地址(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、則出錯。否則出錯。 源程序 : 源程序 :next :next :. -128-128.條件轉(zhuǎn)移指令:條件轉(zhuǎn)移指令:JMP SHORT JMP SHORT nextnext.+127+127. next:next: MOV AL,03HMOV AL,03H標號與控制轉(zhuǎn)移指令在同一段中標號與控制轉(zhuǎn)移指令在同一段中,后引用的標號可以不用后引用的標號可以不用SHORT, 前引用的標號必須使用前引用的標號必須使用SHORT如:如:tager: JMP tagerJMP SHORT tager tager:16 段內(nèi)直接近轉(zhuǎn)移:段內(nèi)直接近轉(zhuǎn)移: 格式:格式:JMP NEAR PTR OPR OPR在匯編
12、語言中使用符號地址在匯編語言中使用符號地址。 在機器語言中存放位移量在機器語言中存放位移量D16位移量位移量D16 = 符號地址的偏移地址符號地址的偏移地址 - 當(dāng)前當(dāng)前IP的值的值 執(zhí)行操作:執(zhí)行操作: (IP)(IP)當(dāng)前當(dāng)前+D16 NEAR近屬性標號近屬性標號位移量為位移量為D16范圍:范圍:-32768+32767H,占有兩個字節(jié)。,占有兩個字節(jié)。 而指令本身占有三個字節(jié)。而指令本身占有三個字節(jié)。可以轉(zhuǎn)移到段內(nèi)的任一位置。可以轉(zhuǎn)移到段內(nèi)的任一位置。過程:如同過程:如同SHORT,只是位移量為,只是位移量為D16范圍范圍-32768+32767H,占有兩個字節(jié)。占有兩個字節(jié)。17 段內(nèi)
13、間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移: (CS)不變,只改變不變,只改變(IP)格式:格式:JMP WORD PTR OPROPR 為為16位寄存器、位寄存器、或存儲器(除立即數(shù)以外的任何一種尋址方式)或存儲器(除立即數(shù)以外的任何一種尋址方式)執(zhí)行操作:執(zhí)行操作: (IP) (EA)或(或(IP) (reg16)指令格式舉例:指令格式舉例:JMP AXJMP SIJMP TABLE BX; 操作數(shù)已定義為操作數(shù)已定義為16位存儲器位存儲器JMP ALPHA_WORD;操作數(shù)已定義為;操作數(shù)已定義為16位存儲器位存儲器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段間直接(遠)轉(zhuǎn)移:段間直接(遠)轉(zhuǎn)移: (CS) 、 (IP)都改變都改變 格式:格式:JMP FAR PTR OPR; OPR在匯編語言中使用符號地址。在匯編語言中使用符號地址。 符號地址與指令不在同一個段里。符號地址與指令不在同一個段里。 在機器語言中則要指定轉(zhuǎn)向地址的偏移地址和段地址在機器語言中
15、則要指定轉(zhuǎn)向地址的偏移地址和段地址執(zhí)行操作:執(zhí)行操作: (IP)OPR所在的段內(nèi)偏移地址。所在的段內(nèi)偏移地址。 (CS)OPR所在的段的段址。所在的段的段址。而指令本身占有而指令本身占有5個字節(jié):個字節(jié):用用2個字分別存放符號地址的段值、偏移值,個字分別存放符號地址的段值、偏移值,用用1個字節(jié)存放操作碼。個字節(jié)存放操作碼。20FAR 遠屬性標號遠屬性標號, 標號與控制轉(zhuǎn)移指令不在同一段中。標號與控制轉(zhuǎn)移指令不在同一段中。在匯編語言中,在機器語言中存放如下:在匯編語言中,在機器語言中存放如下:例:例: 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 可以使用存儲器可以使用存儲器(除立即數(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ù)單個條件標志的設(shè)置情況轉(zhuǎn)移根據(jù)單個條件標志的設(shè)置情況轉(zhuǎn)移(10種種) JZ(JE)/JNZ(JNE),),JP(JPE)/JNP(JPO
18、),), JS/JNS, JO/JNO, JB(JNAE、JC)/JNB(JAE、JNC),), 根據(jù)兩個無符號數(shù)比較結(jié)果轉(zhuǎn)移(根據(jù)兩個無符號數(shù)比較結(jié)果轉(zhuǎn)移(4種)種) JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA) 比較兩個帶符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移(比較兩個帶符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移(4種)種) JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)23指令格式:指令格式:J cc OPR操作:根據(jù)上一條指令所設(shè)置的條件碼來判別測試條件轉(zhuǎn)移。操作:根據(jù)上一條指令所設(shè)置的條件碼來判別測試條件轉(zhuǎn)移。每一種條件轉(zhuǎn)移指令都有它的測試
19、條件。每一種條件轉(zhuǎn)移指令都有它的測試條件。滿足條件時滿足條件時 :(IP)(IP)當(dāng)前當(dāng)前+ 使用相對尋址方式,范圍使用相對尋址方式,范圍-128+127個字節(jié)個字節(jié)不滿足條件時:不滿足條件時:(IP)不變,順序執(zhí)行下一條指令)不變,順序執(zhí)行下一條指令24 所有條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式,所有條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式,范圍(范圍(-128+127)。)。當(dāng)需往一個較遠地方進行條件轉(zhuǎn)移時,當(dāng)需往一個較遠地方進行條件轉(zhuǎn)移時,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個單元,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個單元,然后,再用無條件轉(zhuǎn)移轉(zhuǎn)到較遠的目的地。然后,再用無條件轉(zhuǎn)移轉(zhuǎn)到較遠的目的地。 條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是
20、在比較完二個數(shù)大小條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個數(shù)大小后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,條件轉(zhuǎn)移指令不影響標志位條件轉(zhuǎn)移指令不影響標志位25按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類:按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類: 以單個狀態(tài)標志作為轉(zhuǎn)移條件助記符以單個狀態(tài)標志作為轉(zhuǎn)移條件助記符 轉(zhuǎn)移條件轉(zhuǎn)移條件 以以CX的值為的值為0作為轉(zhuǎn)移條件作為轉(zhuǎn)移條件JCXZCX=026JA/JNBECFZF=0高于高于/JAE/JNB/JNCCF=0 高于或等于高于或等于/無進位無進位JB/JNAE/JCCF=1 /不高于等于不高于等于/有進位有進位JBE/JNAC
21、FZF=1 /不高于不高于以兩個無符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個無符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個帶符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個帶符號數(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)用 例:比較二個數(shù)是否相等例:比較二個數(shù)是否相等 如相等做動作如相等做動作1 否則做動作否則做動作2CMP AX,BXAction_2: 或或 CMP AX,BX action_1: 28例:
22、例: X,Y放在放在X,Y單元里,單元里,(帶符號數(shù)判斷帶符號數(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中有一個首地址為中有一個首地址為array的的N字數(shù)組字數(shù)組, 要求測試其中
23、正數(shù)、要求測試其中正數(shù)、0及負數(shù)的個數(shù)及負數(shù)的個數(shù). (帶符號數(shù)判斷帶符號數(shù)判斷)正數(shù)個數(shù)放在正數(shù)個數(shù)放在: (DI)中,)中, 0的個數(shù)放在的個數(shù)放在: (SI)中,)中,負數(shù)的個數(shù)放在負數(shù)的個數(shù)放在: N-(DI)-(SI)送()送(AX)如果沒有負數(shù)轉(zhuǎn)如果沒有負數(shù)轉(zhuǎn)skip, 如果有負數(shù)轉(zhuǎn)如果有負數(shù)轉(zhuǎn)neg_val程序:程序: mov cx,N ; N字數(shù)組字數(shù)組 mov bx,0mov di,bxmov si,bx again: cmp word ptr arrarybx,0 jle less_or_ag inc di ;正數(shù)個數(shù)正數(shù)個數(shù) jmp short neat less_or_
24、ag: jl neat inc si ; 0的個數(shù)的個數(shù)neat:add bx,2 dec cx jnz again mov ax,Nsub ax,disub ax,sijz skip;沒有負數(shù)沒有負數(shù)jmp near ptr neg_val;有負數(shù)有負數(shù)skip: neg_val: 302、 過程過程( 子程序子程序 )調(diào)用指令調(diào)用指令子程序子程序程序中具有獨立功能的部分編寫成獨立程序模塊。程序中具有獨立功能的部分編寫成獨立程序模塊。子程序(過程)定義子程序(過程)定義格式格式: 符號名符號名 PROC 類型類型 符號名符號名 ENDP 子程序調(diào)用和返回指令:子程序調(diào)用和返回指令: CALL
25、 RET(RETURN) 過程有兩種類型:過程有兩種類型:按過程與調(diào)用語句間的位置,過程有兩種類型。按過程與調(diào)用語句間的位置,過程有兩種類型。NEAR類型:調(diào)用指令與過程在同一個段中類型:調(diào)用指令與過程在同一個段中FAR類型:調(diào)用指令與過程不在同一個段中類型:調(diào)用指令與過程不在同一個段中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機器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。機器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。 位移量為位移量為D16范圍范圍-32768+32767H,占有兩個字節(jié)。,占有兩個字節(jié)。33工作過程如下:工作過程如下:例:例: 過程過程 code SEGMENT ;code段段 CALL subp ;調(diào)用調(diào)用 指令指令 YYY入棧入棧 ,D16
27、 =subp-yyy XXX: PROC NEAR ;過程定義過程定義 RET ;返回返回 subp ENDP code ENDS34例:兩個數(shù)據(jù)變量例:兩個數(shù)據(jù)變量X與與Y相乘相乘,子程序可以直接訪問模子程序可以直接訪問模塊中的變量。塊中的變量。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位寄存器,位寄存器, 或存儲器(除立即數(shù)以外的任何一種尋址方式)或存儲器(除立即數(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、*為能準確返回為能準確返回 ,返回指令類型與調(diào)用指令類型相對應(yīng)。,返回指令類型與調(diào)用指令類型相對應(yīng)。段內(nèi)返回段內(nèi)返回段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回段間帶立即數(shù)返回在子程序調(diào)用時,返回地址入棧在子程序調(diào)用時,返回地址入棧 返回時:將返回地址出棧返回時:將返回地址出棧 (IP)(段內(nèi)或段間)。)(段內(nèi)或段間)。 (CS)(段間)。)(段間)。40段內(nèi)返回:段內(nèi)返回:格式:格式: RET; 機器碼:機器碼: C3H或者或者C2H (IP)(SP)+1,(,(SP) (SP)(SP)+2段間返回:段間返回:格式:格式: RET; 機器碼:機器碼: 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是一個表達式是一個表達式計算出來的常數(shù)成為機器指令中位移量計算出來的常數(shù)成為機器指令中位移量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在一個代碼段中在一個代碼段中子程序子程序 PRO-A PRO-B PRO-C 在另一個代碼段在另一個代碼段程序調(diào)用關(guān)系程序調(diào)用關(guān)系:另一個代碼段另一個代碼段 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í)行操作符號地址符號地址 (SHORT)(IP) (IP)當(dāng)前當(dāng)前+ 8位位移量位位移量符號地址符號地址 ( NEAR屬性屬性)(IP) (IP)當(dāng)前當(dāng)前+ 16位位移量位位移量reg (16位)或位)或 mem ( DW類型類型 )(IP) ( reg ) 或或(IP) (mem)符號地址符號地址 ( FAR屬性屬性)(IP) 符號地址的偏值符號地址的偏值 (CS) 符號地址的段值符號地址的段值mem ( DD類型類型 )(IP) ( mem ), (CS) (mem+2 ) 當(dāng)前當(dāng)前IP的值為控制轉(zhuǎn)移指令下一條指令的偏移地址。的值為控制轉(zhuǎn)移指令下一條指令的偏移地
37、址。 位移量位移量 = 符號地址的偏移量符號地址的偏移量 - 當(dāng)前當(dāng)前IP的值。的值。 符號地址(目標地址)符號地址(目標地址)= 當(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)直接短 方方 式式不變不變符號地址符號地址(SHORT)-128 127即即0FFH段內(nèi)直接近段內(nèi)直接近 方方 式式不變不變符號地址符號地址(NEAR屬性屬性)一個段內(nèi)一個段內(nèi)0FFFFH段段 內(nèi)間接方式內(nèi)間接方式不變不變Reg me
38、m (DW類型類型)一個段內(nèi)一個段內(nèi)0FFFFH段段 間直接方式間直接方式變變符號地址符號地址(FAR屬性屬性)整個內(nèi)存整個內(nèi)存0FFFFFH段段 間間接方式間間接方式變變mem(DD類型類型)整個內(nèi)存整個內(nèi)存0FFFFFH48 各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式轉(zhuǎn)移方式轉(zhuǎn)移方式無條件轉(zhuǎn)移無條件轉(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本身對標志無影響本身對標志無影響。503、循環(huán)控制指令、循環(huán)控制指令格式格式: LOOPxx符號地址符號地址 執(zhí)行執(zhí)行 操作操作 : (CX) (CX)- 1 此此操作不影響標志操作不影響標志 檢查轉(zhuǎn)移條件檢查轉(zhuǎn)移條件xx,滿足轉(zhuǎn)向目標地址去執(zhí)行,滿足轉(zhuǎn)向目標地址去執(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)容按二進制形式顯示出來寄存器的內(nè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)指令說明:循環(huán)指令說明: LOOP退出循環(huán)條件是(退出循環(huán)條件是(CX)=0 LOOPZ和和LOOPNZ提供了提前結(jié)束循環(huán)的可能提供了提前結(jié)束循環(huán)的可能, 不一定要等到不一定要等到(CX)=0才退出循環(huán)。才退出循環(huán)。 在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等時繼續(xù)查找。,不相等時繼續(xù)查找。比較兩串時,當(dāng)有字符不等,就可退出,說明兩字符串不等。比較兩串時,當(dāng)有字符不等,就可退出,說明兩字符串不等??捎每捎肔OOPZ,當(dāng)相等時繼續(xù)比
42、較。,當(dāng)相等時繼續(xù)比較。執(zhí)行完執(zhí)行完 LOOPNZ或或LOOPZ后,根據(jù)后,根據(jù)ZF標志的值判斷結(jié)果標志的值判斷結(jié)果對查找字符,對查找字符,ZF=1,說明找到;否則沒有找到。說明找到;否則沒有找到。 對串比較,對串比較,ZF=1, 說明兩串相等;否則不等。說明兩串相等;否則不等。53 例:例: 在在string字符串中查找空格字符,串長度為字符串中查找空格字符,串長度為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 串長度串長度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é)果會怎樣?,程序執(zhí)行結(jié)果會怎樣? PUSH F、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 執(zhí)行完執(zhí)行完LOOPNZ后,可否根據(jù)后,可否根據(jù)CX=0來來判斷查找結(jié)果判斷查找結(jié)果? 有人認為有人認為CX=0,即,即說明沒找到說明沒找到,對嗎?,對嗎? 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)的可能性。有時需要字符串中查找一個字符,找到后可提前結(jié)束循環(huán),有時需要字符串中查找一個字符,找到后可提前結(jié)束循環(huán),用用LOOPZ、LOOPNZ來處理。來處理。例:例:40個元素構(gòu)成的數(shù)組,找出第一個非零元素。個元素構(gòu)成的數(shù)組,找出第一個非零元素。DISPLAY1 RETDISPLAY2 RET574、中斷指令、中斷指令q 中斷(中斷(Interrupt)
47、:): 有時當(dāng)系統(tǒng)運行或程序運行期間遇到某些特殊情況,有時當(dāng)系統(tǒng)運行或程序運行期間遇到某些特殊情況, 需要計算機自動執(zhí)行一組專門的例行程序來進行處理。需要計算機自動執(zhí)行一組專門的例行程序來進行處理。q 中斷例行程序(或中斷子程序)中斷例行程序(或中斷子程序)(Interrupt routine):所執(zhí)行的這組程序就稱為中斷子程序。所執(zhí)行的這組程序就稱為中斷子程序。q 種類:種類: 中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。 內(nèi)部中斷內(nèi)部中斷如除法運算中除數(shù)為如除法運算中除數(shù)為0、中斷指令引起的中斷。、中斷指令引起的中斷。 外部中斷外部中斷處理處理I
48、/O設(shè)備與設(shè)備與CPU之間的通信。之間的通信。58q CPU響應(yīng)一次中斷自動完成三件事情:響應(yīng)一次中斷自動完成三件事情:(PSW)入棧)入棧 保護現(xiàn)場,保護現(xiàn)場,(CS),(),(IP)保存入棧)保存入棧 保留斷點,保留斷點, 轉(zhuǎn)中斷例行程序去執(zhí)行。轉(zhuǎn)中斷例行程序去執(zhí)行。q 中斷返回時:中斷返回時: 恢復(fù)(恢復(fù)(IP)、()、(CS)及()及(PSW)中斷向量:中斷例行程序入口地址。中斷向量:中斷例行程序入口地址。IBM-PC中,存儲器的最底地址中,存儲器的最底地址00000H003FFH為中斷向量區(qū),為中斷向量區(qū), 存放存放256種類型中斷例行程序入口地址種類型中斷例行程序入口地址, 每個中
49、斷向量占每個中斷向量占4個單元個單元。中斷指定類型號中斷指定類型號N 4取得指定類型的中斷向量地址。取得指定類型的中斷向量地址。59例:中斷類型例:中斷類型9,9 4=36 00024H00027H單元中放中斷向量。單元中放中斷向量。IBM-PC機中為每個類型規(guī)定了一種功能。機中為每個類型規(guī)定了一種功能。中斷類型中斷類型功能功能類型類型0除數(shù)為除數(shù)為0中斷例行程序中斷例行程序類型類型1單步單步類型類型2非屏蔽中斷,非屏蔽中斷, NMI類型類型3設(shè)置斷點設(shè)置斷點類型類型4溢出處理中斷,溢出處理中斷,INTO指令指令類型類型10顯示設(shè)備中斷顯示設(shè)備中斷類型類型20程序結(jié)束中斷程序結(jié)束中斷類型類型2
50、1DOS系統(tǒng)功能調(diào)用功能程序系統(tǒng)功能調(diào)用功能程序*除非特別注明,類型號是以除非特別注明,類型號是以16進制形式表示的。進制形式表示的。60(1). 介紹幾條指令:介紹幾條指令:INT n,IRET 格式:格式:INT n ; n常數(shù)或表達式,常數(shù)或表達式,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,避免進入中斷以后不被外面其它中斷所打斷,避免進入中斷以后不被外面其它中斷所
51、打斷 及進入中斷以后按單步執(zhí)行。及進入中斷以后按單步執(zhí)行。61q 類型類型03的中斷稱為內(nèi)部中斷。的中斷稱為內(nèi)部中斷。 類型類型0 :指令系統(tǒng)沒有:指令系統(tǒng)沒有INT0這條指令這條指令 除數(shù)為除數(shù)為0中斷中斷 除數(shù)為除數(shù)為0 :它:它既不是外部中斷既不是外部中斷 也不是軟件中斷也不是軟件中斷。 是是由由 CPU自身產(chǎn)生的自身產(chǎn)生的,所以無對應(yīng)中斷指令。,所以無對應(yīng)中斷指令。 有符號數(shù)進行除法所得的商超出規(guī)定范圍有符號數(shù)進行除法所得的商超出規(guī)定范圍有符號數(shù)進行除法運算,所得的有符號數(shù)進行除法運算,所得的商超出規(guī)定范圍商超出規(guī)定范圍,CPU自動產(chǎn)生類型為自動產(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進入單步中斷。進入單步中斷。 單步中斷不是由外部硬件或程序中的中斷產(chǎn)生,單步中斷不是由外部硬件或程序中的中斷產(chǎn)生, 而是而是CPU測試測試TF=1時產(chǎn)生的。時產(chǎn)生的。單步中斷單步中斷每執(zhí)行一條指令,進行一次單步中斷處理,每執(zhí)行一條指令,進行一次單步中斷處理,顯示出一系列內(nèi)顯示出一系列內(nèi) 部寄存器的值,部寄存器的值,并告并告 示一些附帶的信息。示一些附帶的信息。 一般用于調(diào)試程序中逐條執(zhí)行用戶程序。一般用于調(diào)試程序中逐條執(zhí)行用戶程序。 對于有對于有重復(fù)前綴串操作指令重復(fù)前綴串操作指令單步操作下,單步操作下,每重復(fù)一次每重復(fù)一次將產(chǎn)生一個單步中
54、斷將產(chǎn)生一個單步中斷,而不,而不 是整個串操作結(jié)束后進入單步操是整個串操作結(jié)束后進入單步操作。作。單步操作單步操作T、P 不同點?不同點?64 類型類型2NMI中斷,非屏蔽中斷中斷,非屏蔽中斷NMI中斷是由中斷是由NMI引腿引入,引腿引入,不受不受IF屏蔽屏蔽,只要只要NMI腿出現(xiàn)中斷請求腿出現(xiàn)中斷請求 中斷處理子程序入口地址在中斷處理子程序入口地址在0:0008H0:000BH中,中,CPU予以響應(yīng)予以響應(yīng), 進入對應(yīng)的中斷處理。進入對應(yīng)的中斷處理。一般用于處理一般用于處理系統(tǒng)的重大故障系統(tǒng)的重大故障。65 類型類型3斷點中斷斷點中斷8088提供的一種調(diào)試手段提供的一種調(diào)試手段。 設(shè)置斷點過
55、程(在設(shè)置斷點過程(在DEBUG下):下):G = 起始地址起始地址斷點地址斷點地址 用戶程序指定斷點:用戶程序指定斷點: 用斷點的中斷指令用斷點的中斷指令I(lǐng)NT3來代替原有指令,來代替原有指令, 把把用戶原有指令進棧保存用戶原有指令進棧保存, 這樣運行到斷點處執(zhí)行這樣運行到斷點處執(zhí)行INT3,轉(zhuǎn)入中斷處理程序,轉(zhuǎn)入中斷處理程序 , 顯示一系列寄存器值,并給出一些重要信息,用戶可顯示一系列寄存器值,并給出一些重要信息,用戶可判斷正誤。判斷正誤。 斷點中斷還負責(zé)恢復(fù)進入中斷前的被斷點中斷還負責(zé)恢復(fù)進入中斷前的被INT3替換掉的替換掉的那條指令。那條指令。66(2) 類型類型4溢出中斷,溢出中斷,
56、INTO指令指令格式:格式:INT O ;該指令檢測該指令檢測OF標志,標志,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時,執(zhí)行時,執(zhí)行 INT O ; OF為為0時,執(zhí)行時,執(zhí)行INTO下一條執(zhí)行。下一條執(zhí)行。 例例 、 INTO 、 、 、 、 類型類型4中斷子程中斷子
57、程 、 、 、68使用注意事項:使用注意事項:對于無符號,有符號對于無符號,有符號 *、/,指令各不相同,指令各不相同。對于無符號,有符號對于無符號,有符號 +、- 指令同,指令同,有、無符號數(shù)有、無符號數(shù) +、- 都有可能產(chǎn)生溢出。都有可能產(chǎn)生溢出。 對于無符號數(shù)溢出不是什么錯誤,表示低位字節(jié)或字向高位產(chǎn)生進位、借位。對于無符號數(shù)溢出不是什么錯誤,表示低位字節(jié)或字向高位產(chǎn)生進位、借位。 有符號數(shù)溢出意味著出錯所以應(yīng)避免。有符號數(shù)溢出意味著出錯所以應(yīng)避免。有符號數(shù),有符號數(shù),OF=1表示有符號數(shù)產(chǎn)生溢出。表示有符號數(shù)產(chǎn)生溢出。 無符號數(shù),無符號數(shù),OF=1并不表示錯誤。并不表示錯誤。 對對CPU來說分不清楚進行的是有、無符號來說分不清楚進行的是有、無符號+ -運算,只能是程序員清楚。運算,只能是程序員清楚。8088提供了一條提供了一條INTO指令,指令,專門用來判斷有符號數(shù)專門用來判斷有符號數(shù)+、-溢出。溢出。69 INTO跟在有符號數(shù)跟在有符號數(shù)+、-后面:后面:OF=1,執(zhí)行,執(zhí)行INTO,進入類型,進入類型4的溢出中斷,的溢出中斷,。OF1,執(zhí)行,執(zhí)行INTO,也轉(zhuǎn)入中斷后子程序,也轉(zhuǎn)入中斷后子程序,程序?qū)酥具M行測試程序?qū)酥具M行測試。* 這條指令可以寫在一條算術(shù)指令后面。這條指令可以寫在一條算術(shù)指令后面。 若產(chǎn)生溢出,若產(chǎn)生溢出,OF=1,則啟動中斷過程,不進
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位聘用用工合同
- 廠房合同轉(zhuǎn)租協(xié)議模板范本
- 打印機買賣合同范本
- 個人二手房買賣合同范本
- 貨物運輸服務(wù)框架合同范本
- 不銹鋼板材購銷合同
- 設(shè)備安裝工程承包勞務(wù)合同
- 廈門分包合同范本
- 展覽場地租賃、服務(wù)合同
- 星載微波散射計遙感熱帶氣旋海面風(fēng)場的真實性檢驗方法研究
- 最高法院示范文本發(fā)布版3.4民事起訴狀答辯狀示范文本
- 2024年英語高考全國各地完形填空試題及解析
- 2024至2030年中國餐飲管理及無線自助點單系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2024年服裝門店批發(fā)管理系統(tǒng)軟件項目可行性研究報告
- 體育概論(第二版)課件第三章體育目的
- 《氓》教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 化學(xué)元素周期表注音版
- T-GDASE 0042-2024 固定式液壓升降裝置安全技術(shù)規(guī)范
- 香港朗文4B單詞及句子
- 運動技能學(xué)習(xí)與控制課件第五章運動中的中樞控制
- 財務(wù)部規(guī)范化管理 流程圖
評論
0/150
提交評論