




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第三節(jié)8086/8088的指令系統(tǒng)(續(xù))
五.
控制傳送指令(Controltransferinstructions)包括四種:
轉(zhuǎn)移指令,過(guò)程調(diào)用指令,循環(huán)控制指令,中斷指令。
六、處理器控制指令包括兩種:
標(biāo)志處理指令,其他處理機(jī)控制指令
2五.控制傳送指令(Controltransferinstructions)(一)、控制傳送指令概述
控制傳送指令包括四種:
轉(zhuǎn)移指令,循環(huán)控制指令,過(guò)程調(diào)用指令,中斷指令。
1、轉(zhuǎn)移指令
轉(zhuǎn)移指令包括兩種:
(1)、JMP(Jump)無(wú)條件轉(zhuǎn)移指令
(2)、Jcc 條件轉(zhuǎn)移指令3(1)、 JMP(Jump)無(wú)條件轉(zhuǎn)移指令
轉(zhuǎn)移分成兩類(lèi):段內(nèi)或段間轉(zhuǎn)移。 無(wú)條件轉(zhuǎn)移指令有五種格式:
段內(nèi)直接短轉(zhuǎn)移
段內(nèi)直接近轉(zhuǎn)移
段內(nèi)間接轉(zhuǎn)移
段間直接遠(yuǎn)轉(zhuǎn)移
段間間接轉(zhuǎn)移
JMP指令的操作:無(wú)條件地將控制轉(zhuǎn)移到指令中規(guī)定的目的地。目標(biāo)地址可以是:直接方式/間接方式給出。JMP指令不影響標(biāo)志位。4(2)、Jcc條件轉(zhuǎn)移指令匯編程序設(shè)計(jì)中常利用條件轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)分支。“cc”-表示條件。操作數(shù)必須是短標(biāo)號(hào)。轉(zhuǎn)移范圍為:-128~+127具體條件轉(zhuǎn)移指令分四種情況討論:
根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移
JZ(JE)/JNZ(JNE),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),
JB(JNAE、JC)/JNB(JAE、JNC),
根據(jù)兩個(gè)無(wú)符號(hào)數(shù)比較結(jié)果轉(zhuǎn)移
JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)
測(cè)試CX的值為零轉(zhuǎn)移
JCXZ52、過(guò)程調(diào)用指令如果有一些程序段在不同地方反復(fù)出現(xiàn),可以將這些程序段設(shè)計(jì)成為過(guò)程(子程序)供調(diào)用。過(guò)程結(jié)束,返回調(diào)用處。過(guò)程調(diào)用指令包括:過(guò)程調(diào)用指令和返回指令(1)、CALL(Callaprocedure)調(diào)用
CALL調(diào)用指令
段內(nèi)直接調(diào)用 段間直接調(diào)用 段內(nèi)間接調(diào)用 段間間接調(diào)用(2)、RET(Returefromprocedure)返回
RET返回指令 段內(nèi)返回 段間返回 段內(nèi)帶立即數(shù)返回 段間帶立即數(shù)返回63、循環(huán)控制指令循環(huán)控制指令用于使一些程序段反復(fù)執(zhí)行形成循環(huán)程序。循環(huán)控制指令有三種:
(1)、LOOP(Loop)
循環(huán)指令
(2)、LOOPE/LOOPZ(Loopifequal/Loopifzero)
當(dāng)相等/為“0”循環(huán)
(3)、LOOPNE/LOOPNZ(Loopifnotequal/Loopifnotzero)
當(dāng)不相等/不為“0”循環(huán)74、中斷指令
8086/8088CPU可以在程序中安排一條中斷指令引起中斷過(guò)程,這種中斷稱(chēng)為軟中斷。
8086/8088CPU共有三條中斷指令:
(1)、INT(Interrupt)(2)、INTO(Interruptifoverflow)(3)、IRET(InterruptReturn)8
指令類(lèi)型助記符無(wú)條件轉(zhuǎn)移JMP條件轉(zhuǎn)移JE/JZ,JNE/JNZ,JS,JNS,JP/JPE,JNP/JPO,JO,JNO,JC,JNC,JB/JNAE,JAE/JNB,JA/JNBE,JBE/JNA,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JCXZ循環(huán)控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ過(guò)程調(diào)用CALL,RET中斷指令I(lǐng)NT,INTO,IRET控制轉(zhuǎn)移指令分類(lèi)小結(jié)9(二).控制傳送指令(Controltransferinstructions)1、轉(zhuǎn)移指令 轉(zhuǎn)移指令將程序控制從一處轉(zhuǎn)換到另一處的最直接方法。 在CPU內(nèi)部,轉(zhuǎn)移是通過(guò)將目標(biāo)地址傳送給IP來(lái)實(shí)現(xiàn)的。 注意:CS—段地址 轉(zhuǎn)移地址
IP—偏移量 調(diào)用地址尋址10
先介召控制和非控制轉(zhuǎn)移指令的概念非控制轉(zhuǎn)移指令:指令本身對(duì)CS和IP均無(wú)操作,形成順序執(zhí)行結(jié)構(gòu)。順序執(zhí)行結(jié)構(gòu):順序存放,順序執(zhí)行控制轉(zhuǎn)移指令:以CS和IP為主要操作對(duì)象,改變CS和IP寄存器的值,就改變了程序執(zhí)行的流程。◢程序是指令的集合◢指令在內(nèi)存中順序存放11在8086/8088中,指令的地址固定由CS和IP兩個(gè)寄存器決定。
CS和IP兩寄存器的內(nèi)容決定了程序的流程,改變CS和IP寄存器的值,就改變了程序執(zhí)行的流程!
8086/8088中CS和IP的變化規(guī)則:
reset復(fù)位后,(CS)=FFFFH,(IP)=0
故8088從內(nèi)存FFFF:0000H處取第一條指令執(zhí)行,
第一條指令在內(nèi)存的ROM區(qū)。
非控制轉(zhuǎn)移指令
CPU取來(lái)一條指令后,自動(dòng)將IP的值加上該指令的字節(jié)數(shù),使IP順序指向下一條指令,CPU取來(lái)緊接著的指令執(zhí)行。
(此時(shí)IP的變化由CPU內(nèi)部的硬件自動(dòng)完成)12
控制轉(zhuǎn)移指令以CS和IP為主要操作對(duì)象 控制轉(zhuǎn)移指令改變CS和IP的值, 使程序產(chǎn)生分支、調(diào)用結(jié)構(gòu)。
分支結(jié)構(gòu)、調(diào)用結(jié)構(gòu):順序存放,非順序執(zhí)行例:比較(AX)、(BX)的大小,將大數(shù)存于(max)單元。
CMPAX,BX
JGE
great XCHGAX,BXgreat: MOV[max],AX13(1)、JMP(Jump)無(wú)條件轉(zhuǎn)移指令
JMP(jmp)跳轉(zhuǎn)指令。
JMP指令必須指定轉(zhuǎn)移的目標(biāo)地址(或轉(zhuǎn)向地址)。
轉(zhuǎn)移分成兩類(lèi):段內(nèi)或段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移:只要改變IP寄存器的內(nèi)容 指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移
即用新的轉(zhuǎn)移目標(biāo)地址代替原有的IP值。段間轉(zhuǎn)移:要修改IP、CS寄存器的內(nèi)容 轉(zhuǎn)到另一段去執(zhí)行程序。即轉(zhuǎn)移目標(biāo)地址=新的段地址和偏移地址兩部分組成。14
段內(nèi)直接短轉(zhuǎn)移:格式:JMPSHORTOPR
OPR—在匯編語(yǔ)言中使用符號(hào)地址。
在機(jī)器語(yǔ)言中存放位移量D8
位移量D8=符號(hào)地址的偏移地址-當(dāng)前IP的值執(zhí)行操作:(IP)←(IP)當(dāng)前+D8
SHORT短屬性標(biāo)號(hào)8位位移量D8的范圍在(-128~127)之間,占有一個(gè)字節(jié)。而指令本身占有兩個(gè)字節(jié)。
15例如:代碼段內(nèi)有一條無(wú)條件轉(zhuǎn)移指令在匯編語(yǔ)言中使用符號(hào)地址。 JMPSHORTNEXT指令執(zhí)行過(guò)程:
NEXT—在匯編語(yǔ)言中使用符號(hào)地址 (IP)←(IP)當(dāng)前+D8168位位移量D8的范圍在(-128~127)之間,否則出錯(cuò)。標(biāo)號(hào)與控制轉(zhuǎn)移指令在同一段中, 后引用的標(biāo)號(hào)可以不用SHORT, 前引用的標(biāo)號(hào)必須使用SHORT如:tager: …… JMPtager
JMPSHORTtager …… tager:17段內(nèi)直接近轉(zhuǎn)移:格式:JMPNEARPTROPR
OPR—在匯編語(yǔ)言中使用符號(hào)地址。
在機(jī)器語(yǔ)言中存放位移量D16位移量D16=符號(hào)地址的偏移地址-當(dāng)前IP的值執(zhí)行操作:(IP)←(IP)當(dāng)前+D16
NEAR近屬性標(biāo)號(hào)位移量為D16范圍:-32768~+32767H,占有兩個(gè)字節(jié)。而指令本身占有三個(gè)字節(jié)。可以轉(zhuǎn)移到段內(nèi)的任一位置。過(guò)程:如同SHORT,只是位移量為D16范圍-32768~+32767H, 占有兩個(gè)字節(jié)。18
段內(nèi)間接轉(zhuǎn)移:(CS)不變,只改變(IP)格式:JMPWORDPTROPR
OPR—為16位寄存器、 或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式)執(zhí)行操作: (IP)(EA) 或(IP)(reg16)指令格式舉例:JMPAX JMPSIJMPTABLE[BX] ;操作數(shù)已定義為16位存儲(chǔ)器JMPALPHA_WORD ;操作數(shù)已定義為16位存儲(chǔ)器JMPWORDPTR[BP][DI]19例:
(DS)=1000H,(BX)=1000H,(CX)=5000H,(CS)=3000H(11000H)=1234H,(11002H)=5678HJMPCX ;(IP)=5000HJMPWORDPTR[BX] ;(CS)=3000H,(IP)=1234H (PA)=(16d(DS)+(BX))=(11000H)=1234H
20
段間直接(遠(yuǎn))轉(zhuǎn)移:(CS)、(IP)都改變格式:JMPFARPTROPR;
OPR—在匯編語(yǔ)言中使用符號(hào)地址。
符號(hào)地址與指令不在同一個(gè)段里。在機(jī)器語(yǔ)言中則要指定轉(zhuǎn)向地址的偏移地址和段地址執(zhí)行操作:
(IP)←OPR所在的段內(nèi)偏移地址。 (CS)←OPR所在的段的段址。而指令本身占有5個(gè)字節(jié): 用2個(gè)字分別存放符號(hào)地址的段值、偏移值, 用1個(gè)字節(jié)存放操作碼。21FAR遠(yuǎn)屬性標(biāo)號(hào),標(biāo)號(hào)與控制轉(zhuǎn)移指令不在同一段中。在匯編語(yǔ)言中,在機(jī)器語(yǔ)言中存放如下:例:
C1SEGMENT …
JMPFARPTRnext_prog …
C1ENDS
C2SEGMINT …next_prog:… …
C2 ENDSEA50020020OP碼新(IP)=0250H新(CS)=2000HJMP指令C1段……C2段…………20000Hnext_prog:20250H……2000:0250H22
段間間接轉(zhuǎn)移:(CS)、(IP)都改變格式:JMP DWORDPTROPR
OPR—可以使用存儲(chǔ)器
(除立即數(shù)和寄存器以外的任何一種尋址方式)執(zhí)行操作:
(IP)←(EA)(CS)←(EA+2)例:已知(BX)=1000H,(SI)=2000H,(DS)=2000H (23000H)=2211H,(23002H)=4433H
JMPDWORDPTR[BX][SI]則:(BX)+(SI)=3000H(IP)=(PA)=(16d(DS)+(BX)+(SI))=(23000H)=2211H
(CS)=(PA+2)=4433H23
(2)JCC條件轉(zhuǎn)移指令根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移(10種)JZ(JE)/JNZ(JNE),JP(JPE)/JNP(JPO),
JS/JNS,JO/JNO,JB(JNAE、JC)/JNB(JAE、JNC),
根據(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)移(4種)
JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)24指令格式:JccOPR操作:根據(jù)上一條指令所設(shè)置的條件碼來(lái)判別測(cè)試條件轉(zhuǎn)移。 每一種條件轉(zhuǎn)移指令都有它的測(cè)試條件。滿(mǎn)足條件時(shí): (IP)←(IP)當(dāng)前+符號(hào)擴(kuò)展到16位后的位移量D8,
使用相對(duì)尋址方式,范圍-128~+127個(gè)字節(jié)不滿(mǎn)足條件時(shí):(IP)不變,順序執(zhí)行下一條指令25注意幾點(diǎn):所有條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移形式, 范圍(-128~+127)。 當(dāng)需往一個(gè)較遠(yuǎn)地方進(jìn)行條件轉(zhuǎn)移時(shí), 選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個(gè)單元, 然后,再用無(wú)條件轉(zhuǎn)移轉(zhuǎn)到較遠(yuǎn)的目的地。②條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個(gè)數(shù)大小后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,③條件轉(zhuǎn)移指令不影響標(biāo)志位26按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類(lèi):①以單個(gè)狀態(tài)標(biāo)志作為轉(zhuǎn)移條件助記符 轉(zhuǎn)移條件助記符轉(zhuǎn)移條件助記符轉(zhuǎn)移條件JZ/JEZF=1JNZ/JNEZF=0JSSF=1JNSSF=0JOOF=1JNOOF=0JP/JPEPF=1JNP/JPOPF=0JCCF=1JNCCF=0②以CX的值為0作為轉(zhuǎn)移條件助記符轉(zhuǎn)移條件JCXZ CX=027助記符 轉(zhuǎn)移條件JA/JNBECF∨ZF=0 高于/不低于等于JAE/JNB/JNCCF=0高于或等于/不低于/無(wú)進(jìn)位JB/JNAE/JCCF=1
低于/不高于等于/有進(jìn)位JBE/JNACF∨ZF=1 低于或等于/不高于③以?xún)蓚€(gè)無(wú)符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件④以?xún)蓚€(gè)帶符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件助記符
轉(zhuǎn)移條件
JG/JNLE(SF⊕OF)∨ZF=0 大于/不小于等于JGE/JNLSF⊕OF=0 大于或等于/不小于JL/JNGESF⊕OF=1
小于/不大于等于JLE/JNG(SF⊕OF)∨ZF=1 小于或等于/不大于28條件轉(zhuǎn)移指令應(yīng)用
例:比較二個(gè)數(shù)是否相等如相等做動(dòng)作1否則做動(dòng)作2
…… CMPAX,BX
JEaction_1Action_2:…………action_1:
…………
或 ……CMPAX,BX
JNZaction_2action_1:……action_2:…………29例:X,Y放在X,Y單元里,(帶符號(hào)數(shù)判斷)先判X>50,YES→too_high,
NO→做X-Y,溢出→overflow,否則求|XY|→result
MOVAX,X CMPAX,50
JGtoo_high;大于轉(zhuǎn)too_high SUBAX,Y
JOoverflow;溢出轉(zhuǎn)overflow
JNSnonneg;S=0轉(zhuǎn)nonneg
NEGAX
nonneg:MOVresult,AXtoo_high: ……overflow: ……30
例:在M中有一個(gè)首地址為array的N字?jǐn)?shù)組,
要求測(cè)試其中正數(shù)、0及負(fù)數(shù)的個(gè)數(shù)(帶符號(hào)數(shù)判斷)正數(shù)個(gè)數(shù)放在:(DI)中,0的個(gè)數(shù)放在:(SI)中,負(fù)數(shù)的個(gè)數(shù)放在:N-(DI)-(SI)送(AX)如果沒(méi)有負(fù)數(shù)轉(zhuǎn)skip,如果有負(fù)數(shù)轉(zhuǎn)neg_val程序:movcx,N;N字?jǐn)?shù)組
movbx,0 movdi,bx movsi,bx again:cmpwordptrarrary[bx],0
jleless_or_ag
incdi ;正數(shù)個(gè)數(shù)
jmpshortneat less_or_ag:jlneat incsi;0的個(gè)數(shù)neat: addbx,2 deccx jnzagain
movax,N subax,di subax,si
jzskip;沒(méi)有負(fù)數(shù)
jmpnearptrneg_val;有負(fù)數(shù)skip:……neg_val:……
312、過(guò)程(子程序)調(diào)用指令子程序—程序中具有獨(dú)立功能的部分編寫(xiě)成獨(dú)立程序模塊。子程序(過(guò)程)定義格式:
符號(hào)名 PROC 類(lèi)型
……
符號(hào)名 ENDP 子程序調(diào)用和返回指令:CALLRET(RETURN)過(guò)程有兩種類(lèi)型: 按過(guò)程與調(diào)用語(yǔ)句間的位置,過(guò)程有兩種類(lèi)型。
NEAR類(lèi)型:調(diào)用指令與過(guò)程在同一個(gè)段中
FAR類(lèi)型:調(diào)用指令與過(guò)程不在同一個(gè)段中CALL指令和RET指令都不影響條件碼。32(1)CALL(Callaprocedure)調(diào)用
CALL調(diào)用指令 調(diào)用地址由指令給出
CALL調(diào)用指令有4種:
段內(nèi)直接調(diào)用 段間直接調(diào)用 段內(nèi)間接調(diào)用 段間間接調(diào)用33
段內(nèi)直接調(diào)用格式:CALLDST ;(SP)←(SP)-2,((SP)+1,(SP))←(IP)
;(IP)←(IP)+D16
DST—給出轉(zhuǎn)向地址(子程序的入口地址)。
D16—機(jī)器指令中的位移量(轉(zhuǎn)向地址和返回地址之差)。位移量為D16范圍-32768~+32767H,占有兩個(gè)字節(jié)。34工作過(guò)程如下:例:NEAR類(lèi)型過(guò)程調(diào)用
codeSEGMENT;code段
…CALLsubp;XXX的地址入棧,D16=subp-yyy
XXX:YYY
…
subp
PROCNEAR;過(guò)程定義
…
RET;返回
subp
ENDP
codeENDS35例:兩個(gè)數(shù)據(jù)變量X與Y相乘子程序和調(diào)用程序在同一個(gè)程序模塊中,子程序可以直接訪問(wèn)模塊中的變量。 DATASGSEGMENT XDW100 YDW10DATASGENDSCODESGSEGMENT
MAINPROCFAR
ASSUMECS:CODESG,DS:DATASG
START:
…
CALLsubp …
RET
MAINENDPsubpPROCNEARMOVAX,X MOVBX,YMULBX RETsubpENDCODESGENDS
ENDSTART36
段內(nèi)間接調(diào)用:格式:CALLDST;
↑
WORDPTROPR
OPR—為16位寄存器, 或存儲(chǔ)器(除立即數(shù)以外的任何一種尋址方式)執(zhí)行操作:
(SP)←(SP)-2
((SP)+1,(SP))←(IP)(IP)←(EA)
EA—由DST尋址方式所確定的有效地址。37段間直接調(diào)用: 格式:CALLFARPTRDST;執(zhí)行操作: (SP)←(SP)-2
((SP)+1,(SP))←(CS) (SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←DST偏移地址(指令中第2,3字節(jié))(CS)←DST段地址(指令中第4,5字節(jié))38例:
…CSEG1 SEGMENT
CALLFARPTRsubp;α處的CS:IP入棧轉(zhuǎn)subp
α: … …CSEG1ENDSCSEG2SEGMENT …
subpPROC … …
RETsubpENDP …CSEG2ENDS39段間間接調(diào)用:格式:CALLDWORDPTRDST執(zhí)行操作:
(SP)←(SP)-2
((SP)+1,(SP))←(CS)
(SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←(EA) (CS)←(EA)+2轉(zhuǎn)子程序入口
EA—由DST的尋址方式確定的有效地址。40(2)、RET(Returefromprocedure)返回
RET返回指令 放在子程序的末尾 使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。*為能準(zhǔn)確返回,返回指令類(lèi)型與調(diào)用指令類(lèi)型相對(duì)應(yīng)。RET返回指令有4種: 段內(nèi)返回 段間返回 段內(nèi)帶立即數(shù)返回 段間帶立即數(shù)返回在子程序調(diào)用時(shí),返回地址入棧返回時(shí):將返回地址出棧(IP)(段內(nèi)或段間)。 (CS)(段間)。41
段內(nèi)返回: 格式:RET; 機(jī)器碼:C3H或者C2H
執(zhí)行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2
段間返回: 格式:RET;
機(jī)器碼:CBH或CAH
執(zhí)行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2
(CS)←((SP)+1,(SP))
(SP)←(SP)+242
段內(nèi)帶立即數(shù)返回格式: RETEXP;執(zhí)行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2
(SP)←(SP)+D16
EXP—是一個(gè)表達(dá)式 計(jì)算出來(lái)的常數(shù)成為機(jī)器指令中位移量D16,修改堆棧 指針。43例如:RETEXP堆棧使用情況:
……CODE SEGMENTASSUMECS:CODE,DS:DATAMAINPROCFAR
START:MOVAX,DATA MOVDS,AX ……
PUSHBX PUSHCX
CALLDELCHARCS:XXXX
MOVAH,4CH
INT21H
MAINENDP
DELCHARPROC ……
RET4
DELCHARENDP
CODEENDS ENDSTARTRETEXP堆棧使用情況:
44段間帶立即數(shù)返回: 格式:RETEXP;執(zhí)行操作:
(IP)←((SP)+1,(SP)) (SP)←(SP)+2
(CS)←((SP)+1,(SP)) (SP)←(SP)+2
(SP)←(SP)+D16
CALL指令和RET指令都不影響條件碼。45例:學(xué)習(xí)使用段內(nèi)、段間直接調(diào)用指令的使用及堆棧情況主程序MAIN在一個(gè)代碼段中子程序PRO-APRO-BPRO-C 在另一個(gè)代碼段程序調(diào)用關(guān)系:另一個(gè)代碼段
PRO-A
PRO-B
…… ……CALLnearptrPRO-B CALLnearptrPRO-C(IP)=2500H
(IP)=4000H …… ……
CALLnearptrPRO-C
RET
(IP)=3700H
……
PRO-C …… RET
RET
(SP)=0100H
MAIN …… ……CALLfarptrPRO-A(CS)=0500H
(IP)=1000H ……46堆棧情況:
47操作數(shù)執(zhí)行操作符號(hào)地址(SHORT) (IP)←(IP)當(dāng)前+8位位移量符號(hào)地址(NEAR屬性)(IP)←(IP)當(dāng)前+16位位移量reg(16位)或mem(DW類(lèi)型)(IP)←(reg)或(IP)←(mem)符號(hào)地址(FAR屬性)(IP)←符號(hào)地址的偏值(CS)←符號(hào)地址的段值mem(DD類(lèi)型) (IP)←(mem),(CS)←(mem+2)
◢當(dāng)前IP的值為控制轉(zhuǎn)移指令下一條指令的偏移地址。
◢位移量=符號(hào)地址的偏移量-當(dāng)前IP的值。◢符號(hào)地址(目標(biāo)地址)=當(dāng)前IP的值+位移量(3)、小結(jié):指令格式:JMP操作數(shù)48
轉(zhuǎn)移方式:由CS是否變化、以及操作數(shù)類(lèi)型決定情況如下表轉(zhuǎn)移方式CS操作數(shù)跳轉(zhuǎn)范圍段內(nèi)直接短方式不變符號(hào)地址(SHORT)-128~127即0~FFH段內(nèi)直接近方式不變符號(hào)地址(NEAR屬性)一個(gè)段內(nèi)0~FFFFH段內(nèi)間接方式不變Regmem(DW類(lèi)型)一個(gè)段內(nèi)0~FFFFH段間直接方式變符號(hào)地址(FAR屬性)整個(gè)內(nèi)存0~FFFFFH段間間接方式變mem(DD類(lèi)型)整個(gè)內(nèi)存0~FFFFFH49
各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式轉(zhuǎn)移方式無(wú)條件轉(zhuǎn)移JMP條件轉(zhuǎn)移Jcc循環(huán)轉(zhuǎn)移LOOPxx子程調(diào)用CALL段內(nèi)直接短方式√ √√×段內(nèi)直接近方式√××√段內(nèi)間接方式√××√段間直接方式√××√段間間接√××√50例: JMPagain (√) JMPBX (√) JMPWORDPTR[BX] (√) JMPDWORDPTR (√) JzAX (×) LOOPBX (×) Jnznext (×)
(若next的位移量超出-128~127)指令JMP、CALL、Jcc、LOOPxx本身對(duì)標(biāo)志無(wú)影響。513、循環(huán)控制指令格式:LOOPxx
符號(hào)地址執(zhí)行操作:①(CX)←(CX)-1此操作不影響標(biāo)志②檢查轉(zhuǎn)移條件xx,滿(mǎn)足轉(zhuǎn)向目標(biāo)地址去執(zhí)行;
不滿(mǎn)足執(zhí)行LOOPxx后一條指令轉(zhuǎn)移方式只允許段內(nèi)直接短方式,跳轉(zhuǎn)范圍-128~127助記符轉(zhuǎn)移條件不轉(zhuǎn)移條件LOOPCX≠0CX=0LOOPZCX≠0且ZF=1CX=0或ZF=0LOOPNZCX≠0且ZF=0CX=0或ZF=1
52與條件轉(zhuǎn)移指令不同的是:循環(huán)指令隱含(CX)減1操作。例:用循環(huán)指令將BL寄存器的內(nèi)容按二進(jìn)制形式顯示出來(lái)學(xué)習(xí):LOOP指令
MOVCX,8next:ROLBL,1MOVDL,BL ANDDL,00000001B
ADDDL,00110000B MOVAH,2 INT21H
DECCX JNZnext ……LOOPnext53循環(huán)指令說(shuō)明:
LOOP退出循環(huán)條件是(CX)=0
LOOPZ和LOOPNZ提供了提前結(jié)束循環(huán)的可能,
不一定要等到(CX)=0才退出循環(huán)!▲在串中查找字符,查到了,就可退出,可用LOOPNZ,不相等時(shí)繼續(xù)查找。▲比較兩串時(shí),當(dāng)有字符不等,就可退出,說(shuō)明兩字符串不等??捎肔OOPZ,當(dāng)相等時(shí)繼續(xù)比較?!鴪?zhí)行完LOOPNZ或LOOPZ后,根據(jù)ZF標(biāo)志的值判斷結(jié)果 對(duì)查找字符,ZF=1,說(shuō)明找到;否則沒(méi)有找到。 對(duì)串比較,ZF=1,說(shuō)明兩串相等;否則不等。54
例:在string字符串中查找空格字符,串長(zhǎng)度為N。用條件轉(zhuǎn)移:JZ
MOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,[BX] JZ
find INCBX DECCX JNZnext
未找到處理
……Find:找到處理
……修改偏址BXYNAL
關(guān)鍵字CX串長(zhǎng)度NDS:BX串首址
判[BX]是關(guān)鍵字?
(CX)(CX)-1找到處理未找到處理
(CX)=0?YN結(jié)束出口55用條件轉(zhuǎn)移:JZ
MOVCX,NMOVAX,SEGstringMOVDS,AX
LEABX,string MOVAL,20H
next:
CMPAL,[BX]
JZfind INCBX DECCX JNZnext
未找到處理
JMPexitfind:找到處理exit:結(jié)束出口 用循環(huán)指令:LOOPNZnext
MOVCX,N MOVAX,SEGstring MOVDS,AX LEABX,string MOVAL,20Hnext: CMPAL,[BX]
PUSHF INCBX
POPF
LOOPNZnext JZfind
未找到處理
JMPexitfind:找到處理exit:結(jié)束出口
DECBXnext
:INCBX CMPAL,[BX]LOOPNZnext JZfind
未找到處理
JMPexitfind:找到處理exit:結(jié)束出口 56思考:①去掉指令JMPexit
,程序執(zhí)行結(jié)果會(huì)怎樣?②PUSHF、POPF可否去掉?若要去掉,程序如何修改?③執(zhí)行完LOOPNZ后,可否根據(jù)CX=0來(lái)判斷查找結(jié)果?有人認(rèn)為CX=0,即說(shuō)明沒(méi)找到,對(duì)嗎?
57 MOVCX,28H MOVSI,0FFHNEXT1:INCSI CMPBYTEPTR[SI],0
LOOPZNEXT1
;當(dāng)Z=1、(CX)≠0循環(huán); 當(dāng)Z=0,或(CX)=0結(jié)束循環(huán)。
JNZOKK ;當(dāng)找到非零元素轉(zhuǎn)OKK。
CALLDISPLAY1 ;當(dāng)找不到非零元素轉(zhuǎn)DISPLAY1 ……OKK:CALLDISPLAY2 ……用LOOPZ和LOOPNZ指令提供提前結(jié)束循環(huán)的可能性。有時(shí)需要字符串中查找一個(gè)字符,找到后可提前結(jié)束循環(huán), 用LOOPZ、LOOPNZ來(lái)處理。例:40個(gè)元素構(gòu)成的數(shù)組,找出第一個(gè)非零元素。
DISPLAY1…… RETDISPLAY2…… RET584、中斷指令中斷(Interrupt): 有時(shí)當(dāng)系統(tǒng)運(yùn)行或程序運(yùn)行期間遇到某些特殊情況,需要計(jì)算機(jī)自動(dòng)執(zhí)行一組專(zhuān)門(mén)的例行程序來(lái)進(jìn)行處理。中斷例行程序(或中斷子程序)(Interruptroutine): 所執(zhí)行的這組程序就稱(chēng)為中斷子程序。種類(lèi):中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。內(nèi)部中斷—如除法運(yùn)算中除數(shù)為0、中斷指令引起的中斷。外部中斷—處理I/O設(shè)備與CPU之間的通信。59CPU響應(yīng)一次中斷自動(dòng)完成三件事情:(PSW)入?!Wo(hù)現(xiàn)場(chǎng),(CS),(IP)保存入?!A魯帱c(diǎn),轉(zhuǎn)中斷例行程序去執(zhí)行。
中斷返回時(shí):
恢復(fù)(CS)、(IP)及(PSW),從堆棧將保存的值彈出來(lái)。中斷向量:中斷例行程序入口地址。
IBM-PC中,存儲(chǔ)器的最底地址00000H——003FFH為中斷向量區(qū), 存放256種類(lèi)型中斷例行程序入口地址,
每個(gè)中斷向量占4個(gè)單元。取得指定類(lèi)型的中斷向量地址——中斷指定類(lèi)型號(hào)N×4。60例:中斷類(lèi)型9,9
×4=36D=24H
00024H——00027H單元中存放中斷類(lèi)型9的中斷向量,即中斷類(lèi)型9的中斷服務(wù)程序入口地址。
IBM-PC機(jī)中為每個(gè)類(lèi)型規(guī)定了一種功能。中斷類(lèi)型功能類(lèi)型0除數(shù)為0中斷例行程序類(lèi)型1單步類(lèi)型2非屏蔽中斷,NMI類(lèi)型3設(shè)置斷點(diǎn)類(lèi)型4溢出處理中斷,INTO指令類(lèi)型10顯示設(shè)備中斷類(lèi)型20程序結(jié)束中斷類(lèi)型21DOS系統(tǒng)功能調(diào)用功能程序★除非特別注明,類(lèi)型號(hào)是以16進(jìn)制形式表示的。61(1)介紹幾條指令:INTn,IRET
格式:INTn ;n—常數(shù)或表達(dá)式,n=0—255
或INT
執(zhí)行操作:
(SP)←(SP)-2,((SP)+1,(SP))←(PSW) (SP)←(SP)-2,((SP)+1,(SP))←(CS) (SP)←(SP)-2,((SP)+1,(SP))←(IP)
(IP)←(N×4) (CS)←(N×4+2)
清除IF、TF,避免進(jìn)入中斷以后不被外面其它中斷所打斷及進(jìn)入中斷以后按單步執(zhí)行。62
類(lèi)型0~3的中斷稱(chēng)為內(nèi)部中斷。
類(lèi)型0:指令系統(tǒng)沒(méi)有INT0這條指令
除數(shù)為0中斷 除數(shù)為0:它既不是外部中斷也不是軟件中斷。 是由CPU自身產(chǎn)生的,所以無(wú)對(duì)應(yīng)中斷指令。
有符號(hào)數(shù)進(jìn)行除法所得的商超出規(guī)定范圍 有符號(hào)數(shù)進(jìn)行除法運(yùn)算,所得的商超出規(guī)定范圍,
CPU自動(dòng)產(chǎn)生類(lèi)型為0的中斷,轉(zhuǎn)入響應(yīng)的中斷處理程序。。63
內(nèi)存0:0000H~0:03FFH
區(qū)域中,構(gòu)成中斷向量表,存放中斷處理程序入口地址。每4個(gè)單元對(duì)應(yīng)1個(gè)中斷源。關(guān)系如下表:中斷處理程序入口地址的地址類(lèi)型00000H~00001H類(lèi)型0(IP)00002H~00003H類(lèi)型0(CS)00004H~00005H類(lèi)型1(IP)00006H~00007H類(lèi)型1(CS)00008H~00009H類(lèi)型2(IP)0000AH~0000BH類(lèi)型2(CS)0000CH~0000DH類(lèi)型3(IP)0000EH~0000FH類(lèi)型3(CS)00010H~00011H類(lèi)型4(IP)00012H~00013H類(lèi)型4(CS)…………003FCH~003FDH類(lèi)型255(IP)003FEH~003FFH類(lèi)型255(CS)64類(lèi)型1——單步中斷
TF=1進(jìn)入單步中斷。 單步中斷不是由外部硬件或程序中的中斷產(chǎn)生, 而是CPU測(cè)試TF=1時(shí)產(chǎn)生的。單步中斷——每執(zhí)行一條指令,進(jìn)行一次單步中斷處理, 顯示出一系列內(nèi)部寄存器的值, 并告示一些附帶的信息。一般用于調(diào)試程序中逐條執(zhí)行用戶(hù)程序。對(duì)于有重復(fù)前綴串操作指令——單步操作下,每重復(fù)一次將產(chǎn)生一個(gè)單步中斷,而不是整個(gè)串操作結(jié)束后進(jìn)入單步操作。思考:?jiǎn)尾讲僮鱐、P不同點(diǎn)?65
類(lèi)型2——NMI中斷,非屏蔽中斷
NMI中斷是由NMI引腿引入,不受IF屏蔽,
只要NMI腿出現(xiàn)中斷請(qǐng)求 中斷處理子程序入口地址在0:0008H——0:000BH中,
CPU予以響應(yīng),進(jìn)入對(duì)應(yīng)的中斷處理。一般用于處理系統(tǒng)的重大故障。66類(lèi)型3——斷點(diǎn)中斷8088提供的一種調(diào)試手段。
設(shè)置斷點(diǎn)過(guò)程(在DEBUG下):-G=起始地址 斷點(diǎn)地址用戶(hù)程序指定斷點(diǎn):用斷點(diǎn)的中斷指令I(lǐng)NT3來(lái)代替原有指令,把用戶(hù)原有指令進(jìn)棧保存,這樣運(yùn)行到斷點(diǎn)處執(zhí)行INT3,轉(zhuǎn)入中斷處理程序, 顯示一系列寄存器值,并給出一些重要信息,用戶(hù)可 判斷正誤。斷點(diǎn)中斷還負(fù)責(zé)恢復(fù)進(jìn)入中斷前的被INT3替換掉的那條指令。67(2)
類(lèi)型4——溢出中斷,INTO指令格式:
INTO; 該指令檢測(cè)OF標(biāo)志,
OF=1執(zhí)行INTO,否則執(zhí)行INTO下一條執(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=068執(zhí)行:OF為1時(shí),執(zhí)行INTO;
OF為0時(shí),執(zhí)行INTO下一條執(zhí)行。
例 、、、
INTO
、、、 、、、 、、、 、、、
類(lèi)型4中斷子程→、、、 、、、 、、、69使用注意事項(xiàng):①對(duì)于無(wú)符號(hào),有符號(hào)*、/,指令各不相同。②對(duì)于無(wú)符號(hào),有符號(hào)+、-指令同, 有、無(wú)符號(hào)數(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育單招合同范本
- 中板合同范本
- 叉車(chē)運(yùn)輸安全合同范本
- 《給年輕班主任的建議》和《班主任兵法》讀后感
- 湖北孝感高級(jí)中學(xué)2024實(shí)驗(yàn)班自主招生語(yǔ)文試卷真題(含答案)
- 《昨天、今天、明天》中班教案
- 醫(yī)療顧問(wèn)合同范例
- 產(chǎn)品拍攝購(gòu)銷(xiāo)合同范本
- 《奮斗有我一起向未來(lái)》個(gè)人感悟
- 反聘用合同范本
- 深圳市一模+Z20名校聯(lián)盟+浙江名校協(xié)作體高三語(yǔ)文2月聯(lián)考作文題目解析及相關(guān)范文
- 油氣田開(kāi)發(fā)專(zhuān)業(yè)危害因素辨識(shí)與風(fēng)險(xiǎn)防控
- DB37-T4824-2025 鄉(xiāng)鎮(zhèn)(街道)應(yīng)急物資配備指南
- 教育部人文社科 申請(qǐng)書(shū)
- 無(wú)菌手術(shù)臺(tái)鋪置的細(xì)節(jié)管理
- 《重大基礎(chǔ)設(shè)施項(xiàng)目涉及風(fēng)景名勝區(qū)選址論證報(bào)告編制技術(shù)規(guī)范》編制說(shuō)明
- 2025年浙江省寧波市外事服務(wù)中心招聘2人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024CSCO結(jié)直腸癌診療指南解讀
- 近三年無(wú)行賄犯罪行為承諾書(shū)
- 城軌道交通認(rèn)知實(shí)習(xí)任務(wù)書(shū)及指導(dǎo)書(shū)
- 中國(guó)民主同盟入盟申請(qǐng)表(填寫(xiě)樣表)
評(píng)論
0/150
提交評(píng)論