北航微機原理第八講課件_第1頁
北航微機原理第八講課件_第2頁
北航微機原理第八講課件_第3頁
北航微機原理第八講課件_第4頁
北航微機原理第八講課件_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第八講8088指令系統(tǒng)(續(xù))

2009.4.7(星期二)課程內(nèi)容:

五、控制傳送指令 六、處理器控制指令北航微機原理第八講如何利用地址線產(chǎn)生脈沖三態(tài)總線兩態(tài)總線KKK:MOVAL,(BX)

CALLDELAY INCBX MOVAL,(BX)

CALLDELAY JMPKKK北航微機原理第八講五.控制傳送指令(Controltransferinstructions)控制傳送指令概述

控制傳送指令包括四種:

轉(zhuǎn)移指令,循環(huán)控制指令,過程調(diào)用指令,中斷指令。指令類型助記符無條件轉(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過程調(diào)用CALL,RET中斷指令I(lǐng)NT,INTO,IRET北航微機原理第八講(一)、無條件轉(zhuǎn)移指令

1.JMP(jmp)目標標號

JMP指令必須指定轉(zhuǎn)移的目標地址(或轉(zhuǎn)向地址)。 轉(zhuǎn)移分成兩類:段內(nèi)或段間轉(zhuǎn)移。

(1)段內(nèi)直接轉(zhuǎn)移:只要改變IP寄存器的內(nèi)容 指在同一段的范圍之內(nèi)進行轉(zhuǎn)移 (IP)←(IP)當(dāng)前+目標標號所代表的地址偏移量 地址偏移量又稱為符號地址 目標標號為8位,稱為短轉(zhuǎn)移。 目標標號為16位,稱為近轉(zhuǎn)移。

北航微機原理第八講例如:代碼段內(nèi)有一條無條件轉(zhuǎn)移指令在匯編語言中使用符號地址。 JMPSHORTNEXT指令執(zhí)行過程:

NEXT—在匯編語言中使用符號地址 (IP)←(IP)當(dāng)前+D8(8位帶符號數(shù))源程序:條件轉(zhuǎn)移指令:JMPSHORTnext.........

next:MOVAL,03HOP......OP03H......3000:1000H3000:1050H(IP)當(dāng)前(NEXT的值定義為50H)(IP)=(IP)當(dāng)前+D8內(nèi)存向前跳,D8為正數(shù),往回跳,D8用補碼JMPSHORTABC若ABC=0F0H,則回跳16字節(jié)北航微機原理第八講

(2)

段內(nèi)間接轉(zhuǎn)移:(CS)不變,只改變(IP)格式:JMPOPR

OPR—為16位寄存器、 或存儲器(除立即數(shù)以外的任何一種尋址方式)執(zhí)行操作: (IP)

(EA) 或(IP)

(reg16)

IP指針的內(nèi)容根據(jù)寄存器或存儲器(數(shù)據(jù)段、附加段、堆棧段)的內(nèi)容而改變。指令格式舉例:JMPBX JMPSIJMPTABLE[BX] ;操作數(shù)已定義為16位存儲器JMPALPHA_WORD ;操作數(shù)已定義為16位存儲器JMPWORDPTR[BP][DI];操作數(shù)已定義為16位存儲器北航微機原理第八講例:

(IP)=5000H,(CS)=3000H,(DS)=1000H,(BX)=1000H(11000H)=1234H,JMPBX ;(IP)=1000H,在當(dāng)前段內(nèi),屬于 ;寄存器尋址JMPWORDPTR[BX] ;(CS)=3000H,(IP)=1234H在當(dāng)前段內(nèi),(PA)=(16d

(DS)+(BX))=(11000H)為1234H將PA地址存儲器的內(nèi)容(1234H)給IP

;屬于寄存器間接尋址。北航微機原理第八講(3)段間直接轉(zhuǎn)移:要修改IP、CS寄存器的內(nèi)容。轉(zhuǎn)到另一段去執(zhí)行程序。

轉(zhuǎn)移目標地址=新的段地址和偏移地址兩部分組成。格式:JMPFARPTROPR;

OPR—在匯編語言中使用符號地址

(如標號AKK,假設(shè)定義在另一程序段CC00:0044)。

轉(zhuǎn)移地址與指令不在同一個段里。在機器語言中則要指定轉(zhuǎn)向地址的偏移地址和段地址

JMPFARPTRAKK執(zhí)行操作:

(IP)←OPR所在的段內(nèi)偏移地址0044H。 (CS)←OPR所在的段的段址CC00H。直接轉(zhuǎn)移通過符號地址加載IP和CS,間接轉(zhuǎn)移通過存儲器內(nèi)容加載IP和CS.

北航微機原理第八講

(4)段間間接轉(zhuǎn)移:(CS)、(IP)都改變格式:JMP DWORDPTROPR

OPR—存儲器操作數(shù)

(除立即數(shù)和寄存器以外的任何一種尋址方式)執(zhí)行操作:將4字節(jié)連續(xù)地址分別送給IP和CS

(IP)←(EA)(CS)←(EA+2)例:已知(BX)=1000H,(SI)=2000H,(DS)=2000H (23000H)=2212H,(23002H)=4434H

JMPDWORDPTR[BX][SI]則:(BX)+(SI)=3000H(IP)=(PA)=(16d

(DS)+(BX)+(SI))=(23000H)=2212H

(CS)=(PA+2)=4434H北航微機原理第八講2.條件轉(zhuǎn)移指令

指令格式:JccOPR操作:根據(jù)上一條指令所設(shè)置的條件碼來判別測試條件轉(zhuǎn)移。 每一種條件轉(zhuǎn)移指令都有它的測試條件。滿足條件時: (IP)←(IP)當(dāng)前+OPR(D8)

使用相對尋址方式,范圍-128~+127個字節(jié)不滿足條件時:(IP)不變,順序執(zhí)行下一條指令(該指令為兩字節(jié)長度,一字節(jié)為指令功能碼,一指令為一個字節(jié)的相對跳轉(zhuǎn)地址偏移量)北航微機原理第八講按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類:①以單個狀態(tài)標志作為轉(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=0北航微機原理第八講助記符 轉(zhuǎn)移條件JA/JNBECF∨ZF=0 高于/不低于等于JAE/JNB/JNCCF=0高于或等于/不低于/無進位JB/JNAE/JCCF=1

低于/不高于等于/有進位JBE/JNACF∨ZF=1 低于或等于/不高于③以兩個無符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件④以兩個帶符號數(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 小于或等于/不大于北航微機原理第八講注意幾點:所有條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式,(兩字節(jié)指令) 范圍(-128~+127)。 當(dāng)需往一個較遠地方進行條件轉(zhuǎn)移時, 選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個單元, 然后,再用無條件轉(zhuǎn)移轉(zhuǎn)到較遠的目的地。②條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個數(shù)大小后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移,③條件轉(zhuǎn)移指令不影響標志位例:程序段2000H:3040HDONE:MOVAX,05H

…………

2000H:3079HJNEDONE

求DONE為何值北航微機原理第八講(IP)=(IP)當(dāng)前程序段2000H:3040HDONE:MOVAX,05H

…………2000H:3079HJNEDONE執(zhí)行此指令時,IP指針為何OP05H......OPC5H......2000:3079H2000:3040H(IP)當(dāng)前內(nèi)存2000:307BHDONE1101100000+307BHC5H北航微機原理第八講條件轉(zhuǎn)移指令應(yīng)用

例:比較二個數(shù)是否相等如相等做動作1否則做動作2

…… CMPAX,BX

JEaction_1Action_2:……

……action_1:

……

或 ……

CMPAX,BX

JNZaction_2action_1: ……action_2:

……=?AXBXYaction_1action_2N=?AXBXNaction_2action_1Y北航微機原理第八講

例:在M中有一個首地址為array的N字數(shù)組,

要求測試其中正數(shù)、0及負數(shù)的個數(shù).(帶符號數(shù)判斷)正數(shù)個數(shù)放在:(DI)中,0的個數(shù)放在:(SI)中,負數(shù)的個數(shù)放在:N-(DI)-(SI)送(AX)如果沒有負數(shù)轉(zhuǎn)skip,如果有負數(shù)轉(zhuǎn)neg_val程序:movcx,N;N字數(shù)組

movbx,0 movdi,bx movsi,bx again:cmpwordptrarrary[bx],0 jleless_or_ag

incdi ;正數(shù)個數(shù) jmpshortneat less_or_ag:jlneat incsi ;0的個數(shù)neat: addbx,2 deccx jnzagain

movax,N subax,di

subax,si jzskip;沒有負數(shù)

jmpnearptrneg_val;有負數(shù)skip:……neg_val:……

北航微機原理第八講(三)過程(子程序)調(diào)用指令子程序—程序中具有獨立功能的部分編寫成獨立程序模塊。子程序(過程)定義格式:符號名(AA) PROC類型(FAR/NEAR)

…… RET(RETURN) 符號名(AA) ENDP

子程序調(diào)用和返回指令:CALLAA過程有兩種類型: 按過程與調(diào)用語句間的位置,過程有兩種類型。

NEAR類型:調(diào)用指令與過程在同一個段中

FAR類型:調(diào)用指令與過程不在同一個段中CALL指令和RET指令都不影響條件碼。北航微機原理第八講CALL(Callaprocedure)調(diào)用

CALL調(diào)用指令 調(diào)用地址由指令給出調(diào)用時:將當(dāng)前地址入棧(CS)。 (IP)。CALL調(diào)用指令有4種:

段內(nèi)直接調(diào)用 段間直接調(diào)用 段內(nèi)間接調(diào)用 段間間接調(diào)用北航微機原理第八講例:CSEG1 SEGMENT

CALLFARPTRsubp;此處的CS:IP入棧轉(zhuǎn)subp

CSEG1ENDSCSEG2SEGMENT

subpPROCFAR

RETsubpENDPCSEG2ENDS北航微機原理第八講(2)、RET(Returefromprocedure)返回

RET返回指令 放在子程序的末尾 使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。*為能準確返回,返回指令類型與調(diào)用指令類型相對應(yīng)。RET返回指令有4種: 段內(nèi)返回 段間返回 段內(nèi)帶立即數(shù)返回 段間帶立即數(shù)返回在子程序調(diào)用時,返回地址入棧返回時:將返回地址出棧(IP)(段內(nèi)或段間)。 (CS)(段間)。北航微機原理第八講操作數(shù)執(zhí)行操作符號地址(SHORT) (IP)←(IP)當(dāng)前+8位符號地址位移量(段內(nèi)短跳)符號地址(NEAR屬性)(IP)←(IP)當(dāng)前+16位符號地址位移量(段內(nèi)近跳)reg(16位)或mem(W類型)(IP)←(reg)或(IP)←(mem)(段內(nèi)間接跳)符號地址(FAR屬性)(IP)←符號地址的偏值(段間直接跳)(CS)←符號地址的段值mem(DW類型) (IP)←(mem),(CS)←(mem+2)(段內(nèi)短跳)

◢當(dāng)前IP的值為控制轉(zhuǎn)移指令下一條指令的偏移地址。

◢位移量=符號地址的偏移量-當(dāng)前IP的值。◢符號地址(目標地址)=當(dāng)前IP的值+位移量(3)、小結(jié):指令格式:JMP操作數(shù)北航微機原理第八講

轉(zhuǎn)移方式:由CS是否變化、以及操作數(shù)類型決定情況如下表轉(zhuǎn)移方式CS操作數(shù)跳轉(zhuǎn)范圍段內(nèi)直接短方式不變符號地址(SHORT)-128~127即0~FFH段內(nèi)直接近方式不變符號地址(NEAR屬性)一個段內(nèi)0~FFFFH段內(nèi)間接方式不變Regmem(W類型)一個段內(nèi)0~FFFFH段間直接方式變符號地址(FAR屬性)整個內(nèi)存0~FFFFFH段間間接方式變mem(DW類型)整個內(nèi)存0~FFFFFH北航微機原理第八講

各控制轉(zhuǎn)移指令允許使用的轉(zhuǎn)移方式轉(zhuǎn)移方式無條件轉(zhuǎn)移JMP條件轉(zhuǎn)移Jcc循環(huán)轉(zhuǎn)移LOOPxx子程調(diào)用CALL段內(nèi)直接短方式√ √√×段內(nèi)直接近方式√××√段內(nèi)間接方式√××√段間直接方式√××√段間間接√××√北航微機原理第八講例: JMPagain (√) JMPBX (√) JMPWORDPTR[BX] (√) JMPDWORDPTR (√) JZAX(不能是字,AX) (×) JNZnext (?) (若next的位移量超出-128~127)北航微機原理第八講(四)循環(huán)控制指令格式:LOOPxx

符號地址執(zhí)行操作:①(CX)←(CX)-1此操作不影響標志②檢查轉(zhuǎn)移條件xx,滿足轉(zhuǎn)向目標地址去執(zhí)行;

不滿足執(zhí)行LOOPxx后一條指令轉(zhuǎn)移方式只允許段內(nèi)直接短方式,跳轉(zhuǎn)范圍-128~127助記符轉(zhuǎn)移條件不轉(zhuǎn)移條件LOOPCX≠0CX=0LOOPZCX≠0且ZF=1(相等)CX=0或ZF=0(不等)LOOPNZCX≠0且ZF=0(不等)CX=0或ZF=1(相等)

北航微機原理第八講與條件轉(zhuǎn)移指令不同的是:循環(huán)指令隱含(CX)減1操作。例:用循環(huán)指令將BL寄存器的內(nèi)容按二進制形式顯示出來學(xué)習(xí):LOOP指令

MOVCX,8next:ROLBL,1 MOVDL,BL ANDDL,00000001B

ADDDL,00110000B MOVAH,2 INT21H

DECCX JNZnext

……LOOPnext北航微機原理第八講循環(huán)指令說明:

LOOP退出循環(huán)條件是(CX)=0LOOPZ和LOOPNZ提供了提前結(jié)束循環(huán)的可能,

不一定要等到(CX)=0才退出循環(huán)?!诖胁檎易址?,查到了,就可退出,可用LOOPNZ,不相等時繼續(xù)查找?!容^兩串時,當(dāng)有字符不等,就可退出,說明兩字符串不等??捎肔OOPZ,當(dāng)相等時繼續(xù)比較。▲執(zhí)行完LOOPNZ或LOOPZ后,根據(jù)ZF標志的值判斷結(jié)果 對查找字符,ZF=1,說明找到;否則沒有找到。 對串比較,ZF=1,說明兩串相等;否則不等。北航微機原理第八講

例:在string字符串中查找空格字符,串長度為N。用條件轉(zhuǎn)移:JZ

MOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,[BX] JZfind INCBX DECCX JNZnext

未找到處理

……Find:找到處理

……修改偏址BXYNAL

關(guān)鍵字CX串長度NDS:BX串首址判[BX]是關(guān)鍵字?

(CX)(CX)-1找到處理未找到處理

(CX)=0?YN結(jié)束出口北航微機原理第八講 MOVCX,28H MOVSI,0FFFFHNEXT1: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)的可能性。有時需要字符串中查找一個字符,找到后可提前結(jié)束循環(huán), 用LOOPZ、LOOPNZ來處理。例:40個元素構(gòu)成的數(shù)組,找出第一個非零元素。

DISPLAY1…… RETDISPLAY2…… RET指令JMP、CALL、Jcc、LOOPxx本身對標志無影響。北航微機原理第八講4、中斷指令中斷(Interrupt): 有時當(dāng)系統(tǒng)運行或程序運行期間遇到某些特殊情況,需要計算機自動執(zhí)行一組專門的例行程序來進行處理。中斷例行程序(或中斷子程序)(Interruptroutine): 所執(zhí)行的這組程序就稱為中斷子程序。種類:中斷分為內(nèi)部(軟)中斷和外部(硬)中斷兩種。內(nèi)部中斷—如除法運算中除數(shù)為0、中斷指令引起的中斷。外部中斷—處理I/O設(shè)備與CPU之間的通信。北航微機原理第八講CPU響應(yīng)一次中斷自動完成三件事情:(PSW)入?!?/p>

保護現(xiàn)場,(CS),(IP)保存入棧—

保留斷點,轉(zhuǎn)中斷例行程序去執(zhí)行。

中斷返回時:

恢復(fù)(IP)、(CS)及(PSW)中斷向量:中斷例行程序入口地址。IBM-PC中,存儲器的最底地址00000H——003FFH為中斷向量區(qū),存放256種類型中斷例行程序入口地址,每個中斷向量占4個單元。中斷指定類型號N×4——取得指定類型的中斷向量地址。北航微機原理第八講例:中斷類型9,9×

4=36

00024H——00027H單元中放中斷向量。IBM-PC機中為每個類型規(guī)定了一種功能。中斷類型功能類型0除數(shù)為0中斷例行程序類型1單步類型2非屏蔽中斷,NMI類型3設(shè)置斷點類型4溢出處理中斷,INTO指令類型10顯示設(shè)備中斷類型20程序結(jié)束中斷類型21DOS系統(tǒng)功能調(diào)用功能程序*除非特別注明,類型號是以16進制形式表示的。北航微機原理第八講(1).介紹幾條指令:INTn,IRET

格式:INTn ;n—常數(shù)或表達式,n=0—255

或INT執(zhí)行操作:

(SP)←(SP)-2,(SP))←(PSW) (SP)←(SP)-2,(SP))←(CS) (SP)←(SP)-2,←(IP)

(IP)←(N×4) (CS)←(N×4+2)清除IF、TF,避免進入中斷以后不被外面其它中斷所打斷 及進入中斷以后按單步執(zhí)行。北航微機原理第八講

類型0~3的中斷稱為內(nèi)部中斷。

類型0:指令系統(tǒng)沒有INT0這條指令

除數(shù)為0中斷 除數(shù)為0:它既不是外部中斷也不是軟件中斷。 是由CPU自身產(chǎn)生的,所以無對應(yīng)中斷指令。

有符號數(shù)進行除法所得的商超出規(guī)定范圍 有符號數(shù)進行除法運算,所得的商超出規(guī)定范圍,

CPU自動產(chǎn)生類型為0的中斷,轉(zhuǎn)入響應(yīng)的中斷處理程序。。北航微機原理第八講內(nèi)存0:0000H~0:03FFH區(qū)域中,構(gòu)成中斷向量表,存放中斷處理程序入口地址。每4個單元對應(yīng)1個中斷源。關(guān)系如下表:中斷處理程序入口地址的地址類型00000H~00001H類型0(IP)00002H~00003H類型0(CS)00004H~00005H類型1(IP)00006H~00007H類型1(CS)00008H~00009H類型2(IP)0000AH~0000BH類型2(CS)0000CH~0000DH類型3(IP)0000EH~0000FH類型3(CS)00010H~00011H類型4(IP)00012H~00013H類型4(CS)…………003FCH~003FDH類型255(IP)003FEH~003FFH類型255(CS)北航微機原理第八講∴INTO跟在有符號數(shù)+、-后面:*這條指令可以寫在一條算術(shù)指令后面。若產(chǎn)生溢出,OF=1,則啟動中斷過程,不進行任何操作。(2)IRET——從中斷返回指令(Interruptreturn)所有中斷過程(服務(wù)程序)不管是硬還是軟,最后一條指令一定是:

IRET退出中斷過程,返回中斷時斷點。格式:IRET執(zhí)行操作:

(IP)←((SP)+1,(SP)),(SP)←(SP)+2

(CS)←((

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論