程序控制指令中断.ppt_第1页
程序控制指令中断.ppt_第2页
程序控制指令中断.ppt_第3页
程序控制指令中断.ppt_第4页
程序控制指令中断.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 程序控制指令 程序控制指令 控制程序流向。 程序控制指令包括: 转移、循环、调用、返回、中断。 无条件转移(JMP),允许程序转移到存储器 的任何地址 执行下一条指令。 条件转移Jnnn 则是根据对标志寄存器数据的测 试(TEST)或比较(CMP)来决定转移的地 址。 5.1 程序控制 : JMP, loop , Call, 无条件转移指令JMP JMP SHORT address JMP NEAR PTR address JMP address JMP FAR PTR ADDRESS 条件转移指令 Jnnn 短地址 循环指令LOOP 条件循环指令LOOPnnnn* 比较指令 CMP 5.2 调用过程 : Call 与 RET 5.3 中断服务 中断 中断向量表 INT 指令与执行 IRET 指令与执行 指令标号 JMP的操作数, Jnnn ( 条件转移), 和LOOP 指令 ,由另一条指令的标号决定。 例: JMP P50 P50 : INC CX 指令的标号是近属性, 在同一个代码段内, 标号在过程之中。 (指令标号) 可以在单独的一行写标号 P50: INC CX 两种情况下, P50的地址都与INC 指令 的第一个字节相关联。 无条件转移指令JMP JMP 指令是无条件的,在所有情况下都 会转移,允许程序转移到存储器的任何 地址执行下一条指令。 不影响操作位。 操作: (IP) (IP) +位移值 (CS) 目标段的(CS) 短,近和远地址 汇编程序支持三种类型的地址, 是根据它们与当前地址的距离加以区别 的。 ( 无条件转移指令JMP) 格式: 标号: JMP 短, 近, 或者远地址 标号 / 寄存器/ 内存 ( 短,近和远地址) 1) 短地址: 对距离的限制是128 到 127 ( 27) 字节. 1-字节 偏移 2) 近地址: 对距离的限制是32768 到 32767 ( 215) 字节. 2-字节偏移,在同一段内 3) 远地址: 同一段内,距离可以超过32K ( 215) 或者在其 他段内 。段:偏移。 实模式下: JMP SHORT address ;地址是8 位的 位移量 JMP NEAR PTR address ;地址是 16位的位移量 JMP address ; 地址是8 / 16位的位移量) JMP FAR PTR ADDRESS ; 地址是32位的位移量 (无条件转移指令JMP) 短 EB 8位位移 近 E9 低8位 高 8位 远 EA IP 低 IP 高 CS 低 CS 高 无条件转移指令JMP 短/ 近/ 远地址 短转移 格式: JMP 短地址 JMP 地址 ; 地址是 8位的位移量 ;short 是虚拟操作符,它迫使CPU做短转移 操作: (IP) (IP) + 8位位移量 ( 短转移) 因为短转移的是相对转移,因此,短转 移可以重定位。 如果代码段移动到新的位置,然而JMP 到标号的距离并没有改变,所以只需 移动代码段来进行重定位。 用JMP 指令(短,近) 例: 0000 33 BD XOR BX, BX 0002 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 NEXT: 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位位移量 操作: (IP) (IP) + 16位位移量 ( 近转移) 超过了-128到+127字节的JMP就变成了 近转移(32k范围内),对于近转移, 汇编程序产生不同的机器码(E9)和两 个字节的操作数。 能够重定位。 3 3 5 ( 近转移) 例 8-2: XOR BX, BX START: MOV AX, 1 ADD AX, BX JMP NEAR PTR NEXT NEXT: MOV BX, AX JMP START 远转移 JMP FAR PTR ADDRESS ; 地址是32 位位移量(地址) ;FAR PTR是虚拟操作符, 强迫CPU远转移 超过32KB 字节(实模式的内存 系统) JMP 就变成了远转移 (从一个段到另一个段). ( 远转移 ) 1) JMP FAR PTR ADDR A3129 ; ADDR 是32位的地址 A3128 ; FAR PTR 是远转移虚拟操作符 A3127 例: 4 字节的操作数 代替CS 和 IP的内容 内存 To here A3 00 01 27 JMP 10004 10003 10002 10001 10000 ( 远转移 ) 2) 如果为远转移定义一个标号 作为远标号, 远标号在当前代码段或者过程之外。 例: EXTERN UP: FAR ;定义UP 作为远标号 ( 远转移 ) 3) 使用双冒号(:) 来定义一个远标号. 例: EXTRN UP: FAR ; 定义UP 作为远标号 START: MOV AX,1 ;定义START 作为标号 JMP FAR PTR START ;远转移 JMP UP ;远转移 寄存器间接转移 寄存器间接转移, 用16 位 或 32位的寄存器 作为操作数, 转移地址在寄存器内。 注意: 寄存器间接转移指令直接传送寄存器 内容到指令指针寄存器中 (IP). 例: JMP AX ; 复制AX寄存器的内容 到 IP中 内存间接转移 转移的目标地址,存储在数据段内存单元中。 例: JMP TABLESI 转移指令用格式 来访问转移目标地址, 这包含了近地址间接转移 或者 段地址和偏移 地址的远地址的间接转移。 除非用FAR PTR指明远转移指令,否则汇编 程序默认是近转移。 条件转移指令 处理器支持各种条件转移指令 这些指 令的操作由标志寄存器的位设置所决定 。 格式: 标号: Jnnn 短地址 例: DEC CX JNZ A20 (条件转移指令) 对于8086286 的JMP 和LOOP, 条 件转移必须是短距离的,在128 到 +127 字节内. 80386 和更新的处理器允许在任何 32K(=215)内的地址转移。 有符号和无符号数据 无符号的数据项(逻辑数据)把所有的 位作为数据位。 例如用户编号和电话号码。 有符号的数据项(算术数据)把最左 边的位当做符号来处理,其中0为正而1 为负。 例如距离和数量,可以是正,也可以是负。 Unsigned data signed data Distinguish sequence between unsigned and signed data (有符号和无符号数据) 例: 假定(CX)=1100 0110, (DX) =0001 0110 CMP CX, DX 当成无符号数据, (CX) 比较大; 当成有符号数据, (DX)比较大; 无符号(逻辑)数据的转移 符号 说明测试 标志 JE/JZ相等则转移或为零则转移Z=1 JNE/JNZ 不相等则转移或不为零则转移Z=0 JA/JNBE 高于则转移或不低于/等于则转移C=0 程序从键盘读入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 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 ;展示 1 TWO: MOV DL, 2 ;装入 2 JMP BOT ;展示 2 THREE: MOV DL, 3 ;装入 3 BOT: MOV AH, 2 ;展示1 或 2 或 3 INT 21H .EXIT ;返回DOS END ;文件结束 5.2 过程调用指令 Call 和 RET 操作 CALL 和 RET的格式: 标号: CALL 过程名 标号: RET 出栈值 MASM5.0 定义RETN 为近返回而 RETF 是远返回。 (Call 和 RET 操作) Call 指令 是把控制传送给 被调用的过程。 RET 指令是从被调用过程 返回到原先的调用 过程 (CALL 指令之后的指令). RET是被调用过程的最后一条指令。 . . Call . . . . . . . . RET 调用过程 过程 (Call 和 RET 操作) 在同一个段内调用一个过程是近调用。 1) 近调用的大小是3个字节,第一字节 是操作码, 第二和第三字节是16 位偏 移 量和距离。 2) E8H是近调用的操作数的编码。 (近调用与返回) 操作: 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的相反步骤。 1) 旧的IP值(16位)从堆栈出栈,回 送到IP。 2) SP加2。 内存 SP stack RET NEAR before RET D Figure 8- Effect on the stack and IP by Near RET 1 远调用与返回 远调用去调用标明FAR的过程,这个 过程可能在另外一个代码段里。 1) 一个远调用的大小是5 个字节,第一个 字节是操作码,第二和第三字节是IP (16 位偏移), 第四跟第五字节是 CS. 2) 远程调用的操作数编码是9AH。 (远调用与返回) 实现如下: 远程调用把CS(第一)和IP(第二)压 入栈中, RET (或 RETF ,操作数CBH) 把IP 和 CS (32Bit) 从栈中弹出。 内存 (program) CS stack IP Far call Figure 8- Effect on the stack and IP by Far call before call SP=FFFF SS=A000 IP=0005 带寄存器操作数的调用指令 格式: CALL BX 操作: IP内容入栈栈 (IP)(BX) (带寄存器操作数的调用指令) 例: ;程序调用过程DISP, 在屏幕上展示“ok” .MODEL TINY .CODE .STARTUP MOV BX, OFFSET DISP ;通过BX寻址DISP MOV DL,O ;展示O CALL BX MOV DL,K ;展示K CALL BX .EXIT (带寄存器操作数的调用指令) ;在监视器屏幕上 展示DL中ASCII码的程序 DISP PROC NEAR MOV AH,2 ;选择功能码02H INT 21H ;执行DOS 函数 RET DISP ENDP END 用间接存储器寻址的CALL指令 当程序中要求选择不同的子程序时,通常使用间接 存储器寻址的CALL指令。 。 格式: CALL TABLEBX 操作: IP内容入栈栈 (IP)(BX)+TABLE) (用间接存储器寻址的CALL指令) 例: 从键盘输入1,2 和 3,调用三个不同的子程 序,分别展示A,B和C。 .MODEL SMALL .DATA TABLE DW ONE DW TWO DW THREE (用间接存储器寻址的CALL指令 ) .CODE ONE PROC NEAR MOV AH,2 MOV DL, A ;展示A INT 21H RET ONE ENDP TWO PROC NEAR MOV AH,2 MOV DL, B ;展示B INT 21H (用间接存储器寻址的CALL指令) RET TWO ENDP THREE PROC NEAR MOV AH,2 MOV DL, C ;展示C INT 21H RET THREE ENDP .STARTUP TOP: 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 中断服务 1) 中断 2) 中断向量表 3) INT 指令与执行 4) IRET 指令与执行 (中断服务) 什么是中断? 中断选项 提供暂停程序的执行的功 能,让系统可以执行特殊的操作. . . INT n . . . . . . . . IRET 主程序 中断程序 (中断服务) 什么是中断源? 中断是被事件触发的。 1) 程序错误: 例如 溢出, 2) 程序要求: INT 指令运行的结果, 单步模式 3) 外部中断的要求: 硬盘I/O, 4) 硬件问题(NMI, 非掩盖中断): 断电, 内存 和I/O奇偶校验出错, 中断向量表 中断向量表 是 中断处理程序的入口地址表。 ( 中断向量表) 当计算机接通电源的时候, BIOS 与DOS 在常规内存中的0000H-03FFH (1024 字 节)位置 建立中断向量表。 ( 中断向量表) 中断向量表提供0 255 (00H FFH) 的 中断( INT n , n 是中断类型码) , 每一个中断类型码都有相关的4字节的段 : 偏移 地址, CS : IP的形式 。 (中断向量表) 0FF 类型(INT 0FFH) 中断处理 程序 出入口地址 2 类型 (INT 2) 中断 处理 程序 出入口地址 1 类型(INT 1) 中断处理 程序 出入口地址 0 类型(INT 0) 中断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论