②段内直接近转移(段内直接寻址) 格式: UMP NEAR PTR标号 操作:(P)←(IP)+D(16位偏移量)-32768~+32767字节范围 例4-3段内直接近转移举例 JMP NEAR PTR EXIT EXIT: POP AX 两种转移指令都可以写成简化形式(省略 SHORT和NEAR) JMP 标号 △汇编时如何确定标号的类型? 位移量D ≤8位段内短转移指令 >8位段内直接近转移指令 段内间接转移(段内间接寻址) 格式: JMP WORD PTR OPR操作:(IP)←(OA) OA是由OPR的寻址方式确定的寄存器或存储单元(字类型) OA存的是目的转移地址
段内直接近转移(段内直接寻址) 格式:JMP NEAR PTR 标号 操作:(IP)←(IP)+D(16位偏移量)-32768~+32767字节范围 例4-3 段内直接近转移举例 JMP NEAR PTR EXIT EXIT: POP AX 两种转移指令都可以写成简化形式(省略SHORT和NEAR): JMP 标号 汇编时如何确定标号的类型? 位移量D= 8位 段内短转移指令 > 8位 段内直接近转移指令 段内间接转移(段内间接寻址) 格式:JMP WORD PTR OPR 操作:(IP)←(OA) OA是由OPR的寻址方式确定的寄存器或存储单元(字类型), OA存的是目的转移地址
例:段内间接转移 UMP BX ;(IP)←(BX)=转移地址 JMP BXI (IP)←((BX))=转移地址 间接寻址转移指令的特点是指令中没有直接给出标号 (2)段间转移 实现段间转移时,转移目的地址由段地址和偏移地址构 成,因此段间转移需要同时修改CS和IP。 o段间直接转移(段间直接寻址) 格式: UMP FAR PTR标号 操作:(P)←标号的偏移地址 (CS)←标号所在段的段地址 例45段间直接转移 CODEl SEGMENT CODE2 SEGMENT JMP FAR PTR NEW SEG/ NEW SEG: MOV AX, BX CODE2 ENDS CODEL ENDS
例 : 段内间接转移 JMP BX ;(IP)←(BX)=转移地址 间接寻址转移指令的特点是指令中没有直接给出标号 (2)段间转移 实现段间转移时,转移目的地址由段地址和偏移地址构 成,因此段间转移需要同时修改CS和IP。 段间直接转移(段间直接寻址) 格式:JMP FAR PTR 标号 操作:(IP)←标号的偏移地址 (CS)←标号所在段的段地址 例4-5 段间直接转移 CODEl SEGMENT JMP FAR PTR NEW_SEG CODEl ENDS CODE2 SEGMENT NEW_SEG: MOV AX,BX CODE2 ENDS JMP [BX] ;(IP)←((BX)) =转移地址
设 NEW SEG标号的地址为3200H:2100H CODE1 执行JMP指令后,程序流程控制 将从CODE代码段—→CODE2代码段, EA操作码 实现段间转移操作。 00 JMP指令 21 00 e段间间接转移(段间间接寻址) 32 格式: JMP DWORD PTR OPR 操作:(IP)←-(OA) 32000H CODE2 (CS)←(OA+2) OA是由OPR的寻址方式所确定 的一个双字单元地址 NEW SEG XX 34100H (OA)=转移地址的偏移地址 (OA+2)=转移地址的段地址 (段间间接转移见P80,例4-6) 段间直接转移
34100H 32000H XX XX … … … CODE2 CODE1 操作码 21 00 32 NEW_SEG 00 … EA JMP指令 IP CS 设NEW_SEG标号的地址为3200H:2100H 执行JMP指令后,程序流程控制 将从CODEl代码段 CODE2代码段, 实现段间转移操作。 段间间接转移(段间间接寻址) 段间直接转移 格式:JMP DWORD PTR OPR 操作:(IP)←(OA) (CS)←(OA+2) OA是由OPR的寻址方式所确定 的一个双字单元地址 。 (OA)=转移地址的偏移地址 (OA+2)=转移地址的段地址 (段间间接转移见P80,例4-6)
2)条件转移指令(18条) 基本格式为:J××标号 (××代表一种转移条件) 条件转移指令根据检测标志位的状态来判断条件,若条件为 真,则转至标号处执行程序,否则顺序往下执行程序 操作:(IP)←(IP)+D(8位偏移量) 显然条件转移指令转移范围与段内短转移相同 条件转移指令分三类 (1)一般条件转移指令(见P81表4-1) 用于某个检测标志位 (2)用于无符号数的条件转移指令(见P81表4-2) 用于检测无符号数的比较 (3)用于带符号数的条件转移指令(见P82表4-3) 用于检测带符号数的比较
2)条件转移指令 (18条) 基本格式为: J×× 标号 (××代表一种转移条件 ) 条件转移指令根据检测标志位的状态来判断条件,若条件为 真,则转至标号处执行程序,否则顺序往下执行程序 。 操作:(IP)←(IP)+D (8位偏移量) 显然条件转移指令转移范围与段内短转移相同 条件转移指令 分三类: (1)一般条件转移指令(见P81 表4-1) 用于某个检测标志位 (2)用于无符号数的条件转移指令(见P81 表4-2) 用于检测无符号数的比较 (3)用于带符号数的条件转移指令 (见P82 表4-3) 用于检测带符号数的比较
●先执行影响标志位的指令(如算术运算、比较及位测试等 指令),再执行适当的条件转移指令检测相应的标志位,根据 条件实现转移。 例:利用条件转移指令构成循环 MOV CX,100(循环计数) AGAIN DECCⅩ JNZ AGAIN 4.3.2分支程序设计方法 般分为两类 o条件转移指令—实现程序两路分支 ②无条件转移指令+跳转表实现程序多路分支
先执行影响标志位的指令(如算术运算、比较及位测试等 指令),再执行适当的条件转移指令检测相应的标志位,根据 条件实现转移。 例 :利用条件转移指令构成循环 MOV CX,100 (循环计数) AGAIN: DEC CX JNZ AGAIN 4.3.2 分支程序设计方法 一般分为两类: 条件转移指令——实现程序两路分支 无条件转移指令+跳转表——实现程序多路分支