程序控制指令中断.ppt

上传人:小飞机 文档编号:6138897 上传时间:2023-09-28 格式:PPT 页数:77 大小:518.50KB
返回 下载 相关 举报
程序控制指令中断.ppt_第1页
第1页 / 共77页
程序控制指令中断.ppt_第2页
第2页 / 共77页
程序控制指令中断.ppt_第3页
第3页 / 共77页
程序控制指令中断.ppt_第4页
第4页 / 共77页
程序控制指令中断.ppt_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《程序控制指令中断.ppt》由会员分享,可在线阅读,更多相关《程序控制指令中断.ppt(77页珍藏版)》请在三一办公上搜索。

1、第5章 程序控制指令,程序控制指令 控制程序流向。程序控制指令包括:转移、循环、调用、返回、中断。无条件转移(JMP),允许程序转移到存储器的任何地址 执行下一条指令。条件转移Jnnn 则是根据对标志寄存器数据的测试(TEST)或比较(CMP)来决定转移的地址。,5.1 程序控制:JMP,loop,Call,无条件转移指令JMPJMP SHORT addressJMP NEAR PTR addressJMP addressJMP FAR PTR ADDRESS 条件转移指令 Jnnn 短地址循环指令LOOP条件循环指令LOOPnnnn*比较指令 CMP,5.2 调用过程:Call 与 RET5

2、.3 中断服务中断中断向量表INT 指令与执行IRET 指令与执行,指令标号,JMP的操作数,Jnnn(条件转移),和LOOP 指令,由另一条指令的标号决定。例:JMP P50 P50:INC CX 指令的标号是近属性,在同一个代码段内,标号在过程之中。,(指令标号),可以在单独的一行写标号 P50:INC CX两种情况下,P50的地址都与INC 指令的第一个字节相关联。,无条件转移指令JMP,JMP 指令是无条件的,在所有情况下都会转移,允许程序转移到存储器的任何地址执行下一条指令。不影响操作位。,短,近和远地址,汇编程序支持三种类型的地址,是根据它们与当前地址的距离加以区别的。,(无条件转

3、移指令JMP),格式:标号:JMP 短,近,或者远地址 标号/寄存器/内存,(短,近和远地址),短地址:对距离的限制是128 到 127(27)字节.1-字节 偏移 近地址:对距离的限制是32768 到 32767(215)字节.2-字节偏移,在同一段内远地址:同一段内,距离可以超过32K(215)或者在其他段内。段:偏移。,实模式下:JMP SHORT address;地址是8 位的 位移量JMP NEAR PTR address;地址是 16位的位移量JMP address;地址是8/16位的位移量)JMP FAR PTR ADDRESS;地址是32位的位移量,(无条件转移指令JMP),无

4、条件转移指令JMP 短/近/远地址,短转移,格式:JMP 短地址JMP 地址;地址是 8位的位移量;short 是虚拟操作符,它迫使CPU做短转移,(短转移),因为短转移的是相对转移,因此,短转移可以重定位。如果代码段移动到新的位置,然而JMP到标号的距离并没有改变,所以只需移动代码段来进行重定位。,用JMP 指令(短,近),例:0000 33 BD XOR BX,BX0002 D80001 START:MOV AX,1 0009(IP)0005 03 C3 ADD AX,BX+0017(shift)0007 EB 17 JMP SHORT NEXT 0020(T.A.)0020 8BD8 N

5、EXT:MOV BX,AX 0024(IP)0022 EBDE JMP START+FFDE(shift)(1)0002(T.A.),(短转移),近转移,格式:JMP NEAR PTR address;标号JMP在JMP后面,地址是16位的位移量;NEAR PTR 是虚拟操作符,强迫CPU进行近转移JMP address;标号在JMP之后,地址是16位位移量,(近转移),超过了-128到+127字节的JMP就变成了近转移(32k范围内),对于近转移,汇编程序产生不同的机器码(E9)和两个字节的操作数。能够重定位。,3,3,5,(近转移),例 8-2:XOR BX,BX START:MOV AX

6、,1 ADD AX,BX JMP NEAR PTR NEXT NEXT:MOV BX,AX JMP START,远转移,JMP FAR PTR ADDRESS;地址是32 位位移量(地址);FAR PTR是虚拟操作符,强迫CPU远转移超过32KB 字节(实模式的内存 系统)JMP就变成了远转移(从一个段到另一个段).,(远转移),JMP FAR PTR ADDR A3129;ADDR 是32位的地址 A3128;FAR PTR 是远转移虚拟操作符 A3127例:4 字节的操作数 代替CS 和 IP的内容 内存,10004 10003 10002 10001 10000,(远转移),如果为远转移

7、定义一个标号 作为远标号,远标号在当前代码段或者过程之外。例:EXTERN UP:FAR;定义UP 作为远标号,(远转移),使用双冒号(:)来定义一个远标号.例:EXTRN UP:FAR;定义UP 作为远标号START:MOV AX,1;定义START 作为标号 JMP FAR PTR START;远转移 JMP UP;远转移,寄存器间接转移,寄存器间接转移,用16 位 或 32位的寄存器作为操作数,转移地址在寄存器内。注意:寄存器间接转移指令直接传送寄存器内容到指令指针寄存器中(IP).例:JMP AX;复制AX寄存器的内容 到 IP中,内存间接转移,转移的目标地址,存储在数据段内存单元中。

8、例:JMP TABLESI,转移指令用格式 来访问转移目标地址,这包含了近地址间接转移 或者 段地址和偏移地址的远地址的间接转移。,除非用FAR PTR指明远转移指令,否则汇编程序默认是近转移。,条件转移指令,处理器支持各种条件转移指令 这些指令的操作由标志寄存器的位设置所决定。格式:标号:Jnnn 短地址 例:DEC CX JNZ A20,(条件转移指令),对于8086286 的JMP 和LOOP,条件转移必须是短距离的,在128 到+127 字节内.80386 和更新的处理器允许在任何32K(=215)内的地址转移。,有符号和无符号数据,无符号的数据项(逻辑数据)把所有的位作为数据位。例如

9、用户编号和电话号码。有符号的数据项(算术数据)把最左边的位当做符号来处理,其中0为正而1为负。例如距离和数量,可以是正,也可以是负。,Unsigned data,signed data,Distinguish sequence between unsigned and signed data,(有符号和无符号数据),例:假定(CX)=1100 0110,(DX)=0001 0110 CMP CX,DX 当成无符号数据,(CX)比较大;当成有符号数据,(DX)比较大;,无符号(逻辑)数据的转移,这些条件转移中的每一个都可以用两个符号操作中的一个来表示,应该选择比较清楚或比较能说明问题的那一个。,

10、有符号(算术)数据的转移,JE/JZ 和 JNE/JNZ的转移在无符号与有符号数据的两个表中都有,这是因为条件的存在于有没有符号无关。,专用的算术运算测试,专用的算术运算测试,JCXZ 测试CX的内容是否为零,不影响也不测试标志位.有符号数据的转移是相等,大于,或 小于无符号数据的转移是相等,高于,或 低于。,loop指令,格式:标号:LOOP 短地址(CX)0时,一直循环。,(loop指令),loop指令 循环指定的次数 或者 循环直到满足指定的条件为止,要求在CX中有一个初始值。,(loop指令),对于每次迭代,LOOP自动从CX中减1.(CX)=(CX)-1 一旦CX达到零,转到下一条指

11、令。如果CX是非零,则转移到操作数的地址。,(loop指令),CX=循环次数,(CX)=(CX)-1,(CX)=0?,运行loop 程序(跳到短地址),N,Y,下条指令,(loop指令),loop指令 转移的距离必须是短距离,转移的距离范围在128 到+127个字节。不影响标志位。,0113 FFF9 1 010C,条件 LOOP指令,LOOPE/LOOPZ Z=1 and(CX)0时,保持循环 Z1或(CX)=0时,退出循环LOOPNE/LOOPNZ Z=0 and(CX)0时,保持循环 Z0 或(CX)=0时,退出循环,比较指令 CMP,格式:标号:CMP 寄存器/内存,寄存器/内存/立即

12、数 CMP把第一个操作数和第二个操作数相减,置位/清位标志位(A,C,O,P,S),但是不存储结果。可以使用CMPS指令比较数据串(字符),(寄存器间接转移),例:;程序从键盘读入1,2,3;当你键入1,2,3 时,程序展示1,2,3.MODEL SMALL;选择SMALL 模式.DATA;指明数据段的开始TABLE DW ONE;定义转移列表 DW TWO DW THREE.CODE;指明代码段的开始.STARTUP;指明程序的开始,(寄存器间接转移),TOP:MOV AH,1;从键盘读入数字 INT 21H;发送(ASCII)给 AL SUB AL,31H;把1,2,3 转移到0,1,2

13、JB TOP;比1小 CMP AL,2 JA TOP;比3大 MOV AH,0;0,1,2,成倍,变成0,2,4 ADD AX,AX;转移列表中的位地址 MOV SI,OFFSET TABLE;SI中装入列表起始地址 ADD SI,AX;把0,2,4 加到转移列表 MOV AX,SI;从列表进行ONE,TWO,THREE的;加法 JMP AX;转移到 ONE,TWO,THREE,ONE:MOV DL,1;装入1 JMP BOT;展示 1TWO:MOV DL,2;装入 2 JMP BOT;展示 2THREE:MOV DL,3;装入 3BOT:MOV AH,2;展示1 或 2 或 3 INT 21

14、H.EXIT;返回DOS END;文件结束,5.2 过程调用指令,Call 和 RET 操作,CALL 和 RET的格式:标号:CALL 过程名 标号:RET 出栈值MASM5.0 定义RETN 为近返回而 RETF 是远返回。,(Call 和 RET 操作),Call 指令 是把控制传送给 被调用的过程。RET 指令是从被调用过程 返回到原先的调用过程(CALL 指令之后的指令).RET是被调用过程的最后一条指令。,(Call 和 RET 操作),在同一个段内调用一个过程是近调用。近调用的大小是3个字节,第一字节是操作码,第二和第三字节是16 位偏移 量和距离。E8H是近调用的操作数的编码。

15、,(近调用与返回),操作:1.SP减2(一个字)并把IP(CALL之后指令的偏移地址=返回地址)压入到堆栈中。2.将指令第2、3字节的位移量加到IP=把被调用过程的偏移地址放入IP中。从而将控制权传送给过程。,(Near call and return),Near call,(program),before call,内存,stack,Figure 8-Effect on the stack and IP by Near call,0FFF+0003 1002,(近调用与返回),RET(或RETN)从一个近过程返回,基本上是CALL的相反步骤。旧的IP值(16位)从堆栈出栈,回送到IP。SP加

16、2。,stack,RET NEAR,before RET,D,Figure 8-Effect on the stack and IP by Near RET,1,远调用与返回,远调用去调用标明FAR的过程,这个过程可能在另外一个代码段里。一个远调用的大小是5 个字节,第一个字节是操作码,第二和第三字节是IP(16 位偏移),第四跟第五字节是 CS.远程调用的操作数编码是9AH。,(远调用与返回),实现如下:远程调用把CS(第一)和IP(第二)压入栈中,RET(或 RETF,操作数CBH)把IP 和CS(32Bit)从栈中弹出。,带寄存器操作数的调用指令,格式:CALL BX操作:IP内容入栈(

17、IP)(BX),(带寄存器操作数的调用指令),例:;程序调用过程DISP,在屏幕上展示“ok”.MODEL TINY.CODE.STARTUPMOV BX,OFFSET DISP;通过BX寻址DISPMOV DL,O;展示OCALL BX MOV DL,K;展示KCALL BX.EXIT,(带寄存器操作数的调用指令),;在监视器屏幕上展示DL中ASCII码的程序DISP PROC NEAR MOV AH,2;选择功能码02H INT 21H;执行DOS 函数 RETDISP ENDP END,用间接存储器寻址的CALL指令,当程序中要求选择不同的子程序时,通常使用间接存储器寻址的CALL指令。

18、格式:CALL TABLEBX操作:IP内容入栈(IP)(BX)+TABLE),(用间接存储器寻址的CALL指令),例:从键盘输入1,2 和 3,调用三个不同的子程序,分别展示A,B和C。.MODEL SMALL.DATATABLE DW ONE DW TWO DW THREE,(用间接存储器寻址的CALL指令),.CODEONE PROC NEAR MOV AH,2 MOV DL,A;展示A INT 21H RETONE ENDPTWO PROC NEAR MOV AH,2 MOV DL,B;展示B INT 21H,(用间接存储器寻址的CALL指令),RETTWO ENDPTHREE PRO

19、C NEAR MOV AH,2 MOV DL,C;展示C INT 21H RETTHREE ENDP.STARTUPTOP:MOV AH,1;从键盘读取数字,INT 21H,(用间接存储器寻址的CALL指令),SUB AL,31H;传送 1,2,3 的ASCII码到 0,1,2 JB TOP;如果小于0,跳到TOP CMP AL,2 JA TOP;如果大于2,跳到TOP MOV AH,0;生成列表地址 MOV BX,AX ADD BX,BX;把 0,1,2 传送到BX中的 0,2,4 CALL TABLEBX;调用子程序one,two,three.EXIT END,5.3 中断服务,中断中断向

20、量表INT 指令与执行IRET 指令与执行,(中断服务),什么是中断?,中断选项 提供暂停程序的执行的功能,让系统可以执行特殊的操作.,(中断服务),什么是中断源?,中断是被事件触发的。程序错误:例如 溢出,程序要求:INT 指令运行的结果,单步模式外部中断的要求:硬盘I/O,硬件问题(NMI,非掩盖中断):断电,内存 和I/O奇偶校验出错,中断向量表,中断向量表是中断处理程序的入口地址表。,(中断向量表),当计算机接通电源的时候,BIOS 与DOS 在常规内存中的0000H-03FFH(1024 字节)位置 建立中断向量表。,(中断向量表),中断向量表提供0 255(00H FFH)的中断(

21、INT n,n 是中断类型码),每一个中断类型码都有相关的4字节的段:偏移 地址,CS:IP的形式。,(中断向量表),003FFH003FCH0000CH00008H00004H00000H,(03-04H)(CS)(00-01H)(IP),INT 指令与执行,INT 指令 任何类型中断都是通过中断指令INT n H,调用中断服务程序来处理中断事件。中断程序的处理:访问低位内存中的中断向量表来得出中断程序的地址。操作数=中断程序的地址,被传送到DOS 或者BIOS,处理中断事件。中断操作处理完了之后,会返回原来程序。中断调用类似于远CALL指令,因为它把返回地址(IP和CS)存放在堆栈中,(I

22、NT 指令 与执行),执行软中断指令,要进行如下操作:将标志寄存器的内容入栈。清除I 和T 标志位。CS 寄存器内容压入堆栈。IP(下条 指令的地址)内容入栈。以N*4计算向量的首地址。从向量表中,取出2字节的新的CS值、2字节的新的IP值(新的偏移量),存入IP寄存器和CS寄存器中。CS:IP中的地址指向中断子程序的起始位置,执行中断子程序。中断指令执行时,清除中断标志(I=0),微处理器禁止中断;当I=1时,微处理器允许中断。INT指令的执行类似于远CALL指令,只是需要把标志压入堆栈,当然还有CS和IP。INT指令执行PUSHF操作紧跟着完成远CALL指令。,IRET 指令 与执行,中断返回指令 只用在中断处理程序中IRET 功能=Far RET+POPFIRET 选项:中断通过IRET返回,这会把IP,CS和标志位弹出栈 并且 会根据INT把指令的控制也返回。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号