微機原理第三章5_第1頁
微機原理第三章5_第2頁
微機原理第三章5_第3頁
微機原理第三章5_第4頁
微機原理第三章5_第5頁
已閱讀5頁,還剩71頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1第三節8086/8088的指令系統(續)

五.

控制傳送指令(Controltransferinstructions)包括四種:

轉移指令,過程調用指令,循環控制指令,中斷指令。

六、處理器控制指令包括兩種:

標志處理指令,其他處理機控制指令

2五.控制傳送指令(Controltransferinstructions)(一)、控制傳送指令概述

控制傳送指令包括四種:

轉移指令,循環控制指令,過程調用指令,中斷指令。

1、轉移指令

轉移指令包括兩種:

(1)、JMP(Jump)無條件轉移指令

(2)、Jcc 條件轉移指令3(1)、 JMP(Jump)無條件轉移指令

轉移分成兩類:段內或段間轉移。 無條件轉移指令有五種格式:

段內直接短轉移

段內直接近轉移

段內間接轉移

段間直接遠轉移

段間間接轉移

JMP指令的操作:無條件地將控制轉移到指令中規定的目的地。目標地址可以是:直接方式/間接方式給出。JMP指令不影響標志位。4(2)、Jcc條件轉移指令匯編程序設計中常利用條件轉移指令來實現分支。“cc”-表示條件。操作數必須是短標號。轉移范圍為:-128~+127具體條件轉移指令分四種情況討論:

根據單個條件標志的設置情況轉移

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)

測試CX的值為零轉移

JCXZ52、過程調用指令如果有一些程序段在不同地方反復出現,可以將這些程序段設計成為過程(子程序)供調用。過程結束,返回調用處。過程調用指令包括:過程調用指令和返回指令(1)、CALL(Callaprocedure)調用

CALL調用指令

段內直接調用 段間直接調用 段內間接調用 段間間接調用(2)、RET(Returefromprocedure)返回

RET返回指令 段內返回 段間返回 段內帶立即數返回 段間帶立即數返回63、循環控制指令循環控制指令用于使一些程序段反復執行形成循環程序。循環控制指令有三種:

(1)、LOOP(Loop)

循環指令

(2)、LOOPE/LOOPZ(Loopifequal/Loopifzero)

當相等/為“0”循環

(3)、LOOPNE/LOOPNZ(Loopifnotequal/Loopifnotzero)

當不相等/不為“0”循環74、中斷指令

8086/8088CPU可以在程序中安排一條中斷指令引起中斷過程,這種中斷稱為軟中斷。

8086/8088CPU共有三條中斷指令:

(1)、INT(Interrupt)(2)、INTO(Interruptifoverflow)(3)、IRET(InterruptReturn)8

指令類型助記符無條件轉移JMP條件轉移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循環控制LOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZ過程調用CALL,RET中斷指令INT,INTO,IRET控制轉移指令分類小結9(二).控制傳送指令(Controltransferinstructions)1、轉移指令 轉移指令將程序控制從一處轉換到另一處的最直接方法。 在CPU內部,轉移是通過將目標地址傳送給IP來實現的。 注意:CS—段地址 轉移地址

IP—偏移量 調用地址尋址10

先介召控制和非控制轉移指令的概念非控制轉移指令:指令本身對CS和IP均無操作,形成順序執行結構。順序執行結構:順序存放,順序執行控制轉移指令:以CS和IP為主要操作對象,改變CS和IP寄存器的值,就改變了程序執行的流程。◢程序是指令的集合◢指令在內存中順序存放11在8086/8088中,指令的地址固定由CS和IP兩個寄存器決定。

CS和IP兩寄存器的內容決定了程序的流程,改變CS和IP寄存器的值,就改變了程序執行的流程!

8086/8088中CS和IP的變化規則:

reset復位后,(CS)=FFFFH,(IP)=0

故8088從內存FFFF:0000H處取第一條指令執行,

第一條指令在內存的ROM區。

非控制轉移指令

CPU取來一條指令后,自動將IP的值加上該指令的字節數,使IP順序指向下一條指令,CPU取來緊接著的指令執行。

(此時IP的變化由CPU內部的硬件自動完成)12

控制轉移指令以CS和IP為主要操作對象 控制轉移指令改變CS和IP的值, 使程序產生分支、調用結構。

分支結構、調用結構:順序存放,非順序執行例:比較(AX)、(BX)的大小,將大數存于(max)單元。

CMPAX,BX

JGE

great XCHGAX,BXgreat: MOV[max],AX13(1)、JMP(Jump)無條件轉移指令

JMP(jmp)跳轉指令。

JMP指令必須指定轉移的目標地址(或轉向地址)。

轉移分成兩類:段內或段間轉移。段內轉移:只要改變IP寄存器的內容 指在同一段的范圍之內進行轉移

即用新的轉移目標地址代替原有的IP值。段間轉移:要修改IP、CS寄存器的內容 轉到另一段去執行程序。即轉移目標地址=新的段地址和偏移地址兩部分組成。14

段內直接短轉移:格式:JMPSHORTOPR

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

在機器語言中存放位移量D8

位移量D8=符號地址的偏移地址-當前IP的值執行操作:(IP)←(IP)當前+D8

SHORT短屬性標號8位位移量D8的范圍在(-128~127)之間,占有一個字節。而指令本身占有兩個字節。

15例如:代碼段內有一條無條件轉移指令在匯編語言中使用符號地址。 JMPSHORTNEXT指令執行過程:

NEXT—在匯編語言中使用符號地址 (IP)←(IP)當前+D8168位位移量D8的范圍在(-128~127)之間,否則出錯。標號與控制轉移指令在同一段中, 后引用的標號可以不用SHORT, 前引用的標號必須使用SHORT如:tager: …… JMPtager

JMPSHORTtager …… tager:17段內直接近轉移:格式:JMPNEARPTROPR

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

在機器語言中存放位移量D16位移量D16=符號地址的偏移地址-當前IP的值執行操作:(IP)←(IP)當前+D16

NEAR近屬性標號位移量為D16范圍:-32768~+32767H,占有兩個字節。而指令本身占有三個字節。可以轉移到段內的任一位置。過程:如同SHORT,只是位移量為D16范圍-32768~+32767H, 占有兩個字節。18

段內間接轉移:(CS)不變,只改變(IP)格式:JMPWORDPTROPR

OPR—為16位寄存器、 或存儲器(除立即數以外的任何一種尋址方式)執行操作: (IP)(EA) 或(IP)(reg16)指令格式舉例:JMPAX JMPSIJMPTABLE[BX] ;操作數已定義為16位存儲器JMPALPHA_WORD ;操作數已定義為16位存儲器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

段間直接(遠)轉移:(CS)、(IP)都改變格式:JMPFARPTROPR;

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

符號地址與指令不在同一個段里。在機器語言中則要指定轉向地址的偏移地址和段地址執行操作:

(IP)←OPR所在的段內偏移地址。 (CS)←OPR所在的段的段址。而指令本身占有5個字節: 用2個字分別存放符號地址的段值、偏移值, 用1個字節存放操作碼。21FAR遠屬性標號,標號與控制轉移指令不在同一段中。在匯編語言中,在機器語言中存放如下:例:

C1SEGMENT …

JMPFARPTRnext_prog …

C1ENDS

C2SEGMINT …next_prog:… …

C2 ENDSEA50020020OP碼新(IP)=0250H新(CS)=2000HJMP指令C1段……C2段…………20000Hnext_prog:20250H……2000:0250H22

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

OPR—可以使用存儲器

(除立即數和寄存器以外的任何一種尋址方式)執行操作:

(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條件轉移指令根據單個條件標志的設置情況轉移(10種)JZ(JE)/JNZ(JNE),JP(JPE)/JNP(JPO),

JS/JNS,JO/JNO,JB(JNAE、JC)/JNB(JAE、JNC),

根據兩個無符號數比較結果轉移(4種)

JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA)比較兩個帶符號數,并根據比較結果轉移(4種)

JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG)24指令格式:JccOPR操作:根據上一條指令所設置的條件碼來判別測試條件轉移。 每一種條件轉移指令都有它的測試條件。滿足條件時: (IP)←(IP)當前+符號擴展到16位后的位移量D8,

使用相對尋址方式,范圍-128~+127個字節不滿足條件時:(IP)不變,順序執行下一條指令25注意幾點:所有條件轉移指令都是相對轉移形式, 范圍(-128~+127)。 當需往一個較遠地方進行條件轉移時, 選用條件轉移轉到附近一個單元, 然后,再用無條件轉移轉到較遠的目的地。②條件轉移指令中,相當一部分指令是在比較完二個數大小后,根據結果而決定是否轉移,③條件轉移指令不影響標志位26按轉移條件不同,條件轉移指令可以分為四大類:①以單個狀態標志作為轉移條件助記符 轉移條件助記符轉移條件助記符轉移條件JZ/JEZF=1JNZ/JNEZF=0JSSF=1JNSSF=0JOOF=1JNOOF=0JP/JPEPF=1JNP/JPOPF=0JCCF=1JNCCF=0②以CX的值為0作為轉移條件助記符轉移條件JCXZ CX=027助記符 轉移條件JA/JNBECF∨ZF=0 高于/不低于等于JAE/JNB/JNCCF=0高于或等于/不低于/無進位JB/JNAE/JCCF=1

低于/不高于等于/有進位JBE/JNACF∨ZF=1 低于或等于/不高于③以兩個無符號數比較的結果作為轉移條件④以兩個帶符號數比較的結果作為轉移條件助記符

轉移條件

JG/JNLE(SF⊕OF)∨ZF=0 大于/不小于等于JGE/JNLSF⊕OF=0 大于或等于/不小于JL/JNGESF⊕OF=1

小于/不大于等于JLE/JNG(SF⊕OF)∨ZF=1 小于或等于/不大于28條件轉移指令應用

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

…… CMPAX,BX

JEaction_1Action_2:…………action_1:

…………

或 ……CMPAX,BX

JNZaction_2action_1:……action_2:…………29例:X,Y放在X,Y單元里,(帶符號數判斷)先判X>50,YES→too_high,

NO→做X-Y,溢出→overflow,否則求|XY|→result

MOVAX,X CMPAX,50

JGtoo_high;大于轉too_high SUBAX,Y

JOoverflow;溢出轉overflow

JNSnonneg;S=0轉nonneg

NEGAX

nonneg:MOVresult,AXtoo_high: ……overflow: ……30

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

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

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

jleless_or_ag

incdi ;正數個數

jmpshortneat less_or_ag:jlneat incsi;0的個數neat: addbx,2 deccx jnzagain

movax,N subax,di subax,si

jzskip;沒有負數

jmpnearptrneg_val;有負數skip:……neg_val:……

312、過程(子程序)調用指令子程序—程序中具有獨立功能的部分編寫成獨立程序模塊。子程序(過程)定義格式:

符號名 PROC 類型

……

符號名 ENDP 子程序調用和返回指令:CALLRET(RETURN)過程有兩種類型: 按過程與調用語句間的位置,過程有兩種類型。

NEAR類型:調用指令與過程在同一個段中

FAR類型:調用指令與過程不在同一個段中CALL指令和RET指令都不影響條件碼。32(1)CALL(Callaprocedure)調用

CALL調用指令 調用地址由指令給出

CALL調用指令有4種:

段內直接調用 段間直接調用 段內間接調用 段間間接調用33

段內直接調用格式:CALLDST ;(SP)←(SP)-2,((SP)+1,(SP))←(IP)

;(IP)←(IP)+D16

DST—給出轉向地址(子程序的入口地址)。

D16—機器指令中的位移量(轉向地址和返回地址之差)。位移量為D16范圍-32768~+32767H,占有兩個字節。34工作過程如下:例:NEAR類型過程調用

codeSEGMENT;code段

…CALLsubp;XXX的地址入棧,D16=subp-yyy

XXX:YYY

subp

PROCNEAR;過程定義

RET;返回

subp

ENDP

codeENDS35例:兩個數據變量X與Y相乘子程序和調用程序在同一個程序模塊中,子程序可以直接訪問模塊中的變量。 DATASGSEGMENT XDW100 YDW10DATASGENDSCODESGSEGMENT

MAINPROCFAR

ASSUMECS:CODESG,DS:DATASG

START:

CALLsubp …

RET

MAINENDPsubpPROCNEARMOVAX,X MOVBX,YMULBX RETsubpENDCODESGENDS

ENDSTART36

段內間接調用:格式:CALLDST;

WORDPTROPR

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

(SP)←(SP)-2

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

EA—由DST尋址方式所確定的有效地址。37段間直接調用: 格式:CALLFARPTRDST;執行操作: (SP)←(SP)-2

((SP)+1,(SP))←(CS) (SP)←(SP)-2

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

(IP)←DST偏移地址(指令中第2,3字節)(CS)←DST段地址(指令中第4,5字節)38例:

…CSEG1 SEGMENT

CALLFARPTRsubp;α處的CS:IP入棧轉subp

α: … …CSEG1ENDSCSEG2SEGMENT …

subpPROC … …

RETsubpENDP …CSEG2ENDS39段間間接調用:格式:CALLDWORDPTRDST執行操作:

(SP)←(SP)-2

((SP)+1,(SP))←(CS)

(SP)←(SP)-2

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

(IP)←(EA) (CS)←(EA)+2轉子程序入口

EA—由DST的尋址方式確定的有效地址。40(2)、RET(Returefromprocedure)返回

RET返回指令 放在子程序的末尾 使子程序在功能完成后返回調用程序繼續執行。*為能準確返回,返回指令類型與調用指令類型相對應。RET返回指令有4種: 段內返回 段間返回 段內帶立即數返回 段間帶立即數返回在子程序調用時,返回地址入棧返回時:將返回地址出棧(IP)(段內或段間)。 (CS)(段間)。41

段內返回: 格式:RET; 機器碼:C3H或者C2H

執行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2

段間返回: 格式:RET;

機器碼:CBH或CAH

執行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2

(CS)←((SP)+1,(SP))

(SP)←(SP)+242

段內帶立即數返回格式: RETEXP;執行操作:(IP)←((SP)+1,(SP)) (SP)←(SP)+2

(SP)←(SP)+D16

EXP—是一個表達式 計算出來的常數成為機器指令中位移量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段間帶立即數返回: 格式:RETEXP;執行操作:

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

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

(SP)←(SP)+D16

CALL指令和RET指令都不影響條件碼。45例:學習使用段內、段間直接調用指令的使用及堆棧情況主程序MAIN在一個代碼段中子程序PRO-APRO-BPRO-C 在另一個代碼段程序調用關系:另一個代碼段

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操作數執行操作符號地址(SHORT) (IP)←(IP)當前+8位位移量符號地址(NEAR屬性)(IP)←(IP)當前+16位位移量reg(16位)或mem(DW類型)(IP)←(reg)或(IP)←(mem)符號地址(FAR屬性)(IP)←符號地址的偏值(CS)←符號地址的段值mem(DD類型) (IP)←(mem),(CS)←(mem+2)

◢當前IP的值為控制轉移指令下一條指令的偏移地址。

◢位移量=符號地址的偏移量-當前IP的值。◢符號地址(目標地址)=當前IP的值+位移量(3)、小結:指令格式:JMP操作數48

轉移方式:由CS是否變化、以及操作數類型決定情況如下表轉移方式CS操作數跳轉范圍段內直接短方式不變符號地址(SHORT)-128~127即0~FFH段內直接近方式不變符號地址(NEAR屬性)一個段內0~FFFFH段內間接方式不變Regmem(DW類型)一個段內0~FFFFH段間直接方式變符號地址(FAR屬性)整個內存0~FFFFFH段間間接方式變mem(DD類型)整個內存0~FFFFFH49

各控制轉移指令允許使用的轉移方式轉移方式無條件轉移JMP條件轉移Jcc循環轉移LOOPxx子程調用CALL段內直接短方式√ √√×段內直接近方式√××√段內間接方式√××√段間直接方式√××√段間間接√××√50例: JMPagain (√) JMPBX (√) JMPWORDPTR[BX] (√) JMPDWORDPTR (√) JzAX (×) LOOPBX (×) Jnznext (×)

(若next的位移量超出-128~127)指令JMP、CALL、Jcc、LOOPxx本身對標志無影響。513、循環控制指令格式:LOOPxx

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

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

52與條件轉移指令不同的是:循環指令隱含(CX)減1操作。例:用循環指令將BL寄存器的內容按二進制形式顯示出來學習:LOOP指令

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

ADDDL,00110000B MOVAH,2 INT21H

DECCX JNZnext ……LOOPnext53循環指令說明:

LOOP退出循環條件是(CX)=0

LOOPZ和LOOPNZ提供了提前結束循環的可能,

不一定要等到(CX)=0才退出循環!▲在串中查找字符,查到了,就可退出,可用LOOPNZ,不相等時繼續查找。▲比較兩串時,當有字符不等,就可退出,說明兩字符串不等。可用LOOPZ,當相等時繼續比較。▲執行完LOOPNZ或LOOPZ后,根據ZF標志的值判斷結果 對查找字符,ZF=1,說明找到;否則沒有找到。 對串比較,ZF=1,說明兩串相等;否則不等。54

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

MOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,[BX] JZ

find INCBX DECCX JNZnext

未找到處理

……Find:找到處理

……修改偏址BXYNAL

關鍵字CX串長度NDS:BX串首址

判[BX]是關鍵字?

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

(CX)=0?YN結束出口55用條件轉移:JZ

MOVCX,NMOVAX,SEGstringMOVDS,AX

LEABX,string MOVAL,20H

next:

CMPAL,[BX]

JZfind INCBX DECCX JNZnext

未找到處理

JMPexitfind:找到處理exit:結束出口 用循環指令:LOOPNZnext

MOVCX,N MOVAX,SEGstring MOVDS,AX LEABX,string MOVAL,20Hnext: CMPAL,[BX]

PUSHF INCBX

POPF

LOOPNZnext JZfind

未找到處理

JMPexitfind:找到處理exit:結束出口

DECBXnext

:INCBX CMPAL,[BX]LOOPNZnext JZfind

未找到處理

JMPexitfind:找到處理exit:結束出口 56思考:①去掉指令JMPexit

,程序執行結果會怎樣?②PUSHF、POPF可否去掉?若要去掉,程序如何修改?③執行完LOOPNZ后,可否根據CX=0來判斷查找結果?有人認為CX=0,即說明沒找到,對嗎?

57 MOVCX,28H MOVSI,0FFHNEXT1:INCSI CMPBYTEPTR[SI],0

LOOPZNEXT1

;當Z=1、(CX)≠0循環; 當Z=0,或(CX)=0結束循環。

JNZOKK ;當找到非零元素轉OKK。

CALLDISPLAY1 ;當找不到非零元素轉DISPLAY1 ……OKK:CALLDISPLAY2 ……用LOOPZ和LOOPNZ指令提供提前結束循環的可能性。有時需要字符串中查找一個字符,找到后可提前結束循環, 用LOOPZ、LOOPNZ來處理。例:40個元素構成的數組,找出第一個非零元素。

DISPLAY1…… RETDISPLAY2…… RET584、中斷指令中斷(Interrupt): 有時當系統運行或程序運行期間遇到某些特殊情況,需要計算機自動執行一組專門的例行程序來進行處理。中斷例行程序(或中斷子程序)(Interruptroutine): 所執行的這組程序就稱為中斷子程序。種類:中斷分為內部(軟)中斷和外部(硬)中斷兩種。內部中斷—如除法運算中除數為0、中斷指令引起的中斷。外部中斷—處理I/O設備與CPU之間的通信。59CPU響應一次中斷自動完成三件事情:(PSW)入棧——保護現場,(CS),(IP)保存入棧——保留斷點,轉中斷例行程序去執行。

中斷返回時:

恢復(CS)、(IP)及(PSW),從堆棧將保存的值彈出來。中斷向量:中斷例行程序入口地址。

IBM-PC中,存儲器的最底地址00000H——003FFH為中斷向量區, 存放256種類型中斷例行程序入口地址,

每個中斷向量占4個單元。取得指定類型的中斷向量地址——中斷指定類型號N×4。60例:中斷類型9,9

×4=36D=24H

00024H——00027H單元中存放中斷類型9的中斷向量,即中斷類型9的中斷服務程序入口地址。

IBM-PC機中為每個類型規定了一種功能。中斷類型功能類型0除數為0中斷例行程序類型1單步類型2非屏蔽中斷,NMI類型3設置斷點類型4溢出處理中斷,INTO指令類型10顯示設備中斷類型20程序結束中斷類型21DOS系統功能調用功能程序★除非特別注明,類型號是以16進制形式表示的。61(1)介紹幾條指令:INTn,IRET

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

或INT

執行操作:

(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,避免進入中斷以后不被外面其它中斷所打斷及進入中斷以后按單步執行。62

類型0~3的中斷稱為內部中斷。

類型0:指令系統沒有INT0這條指令

除數為0中斷 除數為0:它既不是外部中斷也不是軟件中斷。 是由CPU自身產生的,所以無對應中斷指令。

有符號數進行除法所得的商超出規定范圍 有符號數進行除法運算,所得的商超出規定范圍,

CPU自動產生類型為0的中斷,轉入響應的中斷處理程序。。63

內存0:0000H~0:03FFH

區域中,構成中斷向量表,存放中斷處理程序入口地址。每4個單元對應1個中斷源。關系如下表:中斷處理程序入口地址的地址類型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)64類型1——單步中斷

TF=1進入單步中斷。 單步中斷不是由外部硬件或程序中的中斷產生, 而是CPU測試TF=1時產生的。單步中斷——每執行一條指令,進行一次單步中斷處理, 顯示出一系列內部寄存器的值, 并告示一些附帶的信息。一般用于調試程序中逐條執行用戶程序。對于有重復前綴串操作指令——單步操作下,每重復一次將產生一個單步中斷,而不是整個串操作結束后進入單步操作。思考:單步操作T、P不同點?65

類型2——NMI中斷,非屏蔽中斷

NMI中斷是由NMI引腿引入,不受IF屏蔽,

只要NMI腿出現中斷請求 中斷處理子程序入口地址在0:0008H——0:000BH中,

CPU予以響應,進入對應的中斷處理。一般用于處理系統的重大故障。66類型3——斷點中斷8088提供的一種調試手段。

設置斷點過程(在DEBUG下):-G=起始地址 斷點地址用戶程序指定斷點:用斷點的中斷指令INT3來代替原有指令,把用戶原有指令進棧保存,這樣運行到斷點處執行INT3,轉入中斷處理程序, 顯示一系列寄存器值,并給出一些重要信息,用戶可 判斷正誤。斷點中斷還負責恢復進入中斷前的被INT3替換掉的那條指令。67(2)

類型4——溢出中斷,INTO指令格式:

INTO; 該指令檢測OF標志,

OF=1執行INTO,否則執行INTO下一條執行。執行操作:

(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執行:OF為1時,執行INTO;

OF為0時,執行INTO下一條執行。

例 、、、

INTO

、、、 、、、 、、、 、、、

類型4中斷子程→、、、 、、、 、、、69使用注意事項:①對于無符號,有符號*、/,指令各不相同。②對于無符號,有符號+、-指令同, 有、無符號數

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論