* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 六、处理器控制指令 对标志位的操作 与外部设备的同步 说明见p139表 * 结束语: 掌握: 指令的格式及意义; 指令对操作数的要求及对标志位的影响; 指令的应用。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 段内直接转移示图 JMP Label ┇ ┇ ┇ 代码段 位移量 下一条要执行指令的偏移地址=当前IP+位移量 JMP Label * 段内间接转移 段内间接转移 转移的目标地址存放在某个16位寄存器或存储器 的某两个单元中 例: JMP BX 若:BX=1200H 则:转移的目标地址=1200H JMP ┇ ┇ 代码段 1200H MOV * 段内间接转移例 JMP WORD PTR[BX] 设:BX=1200H JMP ┇ ┇ ┇ 代码段 数据段 BX=1200 ┇ XXH XXH IP 指令码 * 无条件段间转移 转移的目标地址不在当前代码段内。 目标地址为32位,包括段地址和偏移地址。 指令中直接给出目标地址 由指令中的32位存储器操作数指出目标地址 段间直接转移 段间间接转移 * 段间直接转移 段内直接转移 转移的目标地址由指令直接给出 格式: JMP FAR Label 远地址标号 * 段间直接转移示图 JMP Label ┇ ┇ ┇ 代码段1 Label与JMP之间的位移量 代码段2 XXH XXH XXH XXH IP CS * 段间间接转移 段内间接寻址 转移的目标地址由指令中的32位操作数给出 例: JMP DWORD PTR[BX] XXH XXH XXH XXH BX IP CS JMP ┇ ┇ ┇ ┇ 指令码 代码段1 代码段2 数据段 * 无条件转移指令例 (1) 2000:0100 MOV AX,1200H (2) 2000:0103 JMP NEXT ┅ (3) 2000:0120 NEXT: MOV BX,1200H (4) JMP BX ┅ (5) 2000:1200 * 无条件转移指令例 MOV SI,1122H MOV WORD PTR[SI],0120H ADD SI,2 MOV WORD PTR[SI],0122H JMP DWORD PTR[SI-2] JMP WORD PTR[SI] JMP 1122H ┇ ┇ ┇ 代码段 数据段 01H 22H 20H 01H IP CS IP * 2. 条件转移指令 在满足一定条件下,程序转移到目标地址继续执行 条件转移指令均为段内短转移,即转移 范围为: -128------+127 * 条件转移指令的应用 几种条件转移指令的应用 JC/JNC 判断CF的状态。常用于比大小 JZ/JNZ 判断ZF的状态。常用于循环体的结束判断 JO/JNO 判断OF的状态。常用于有符号数溢出的判断 JP/JPE 判断PF的状态。用于判断运算结果低8位中1的个数是否为偶数 JA/JAE/JB/JBE 判断CF或CF+ZF的状态。常用于无符号数的大小比较 * 转移指令例 统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。 * 转移指令例(流程图) 将存放各元素个数的单元清零 取首地址 设串长度 取一个字节数 正数个数加1 零元素加1 为负? 为零? 负数个数加1 N Y N Y p133 * 二、循环控制指令 循环范围: 以当前IP为中心的-128~+127范围内循环。 循环次数由CX寄存器指定。 循环指令: LOOP *LOOPZ *LOOPNZ 无条件循环指令 条件循环指令 * 无条件循环指令 格式: LOOP LABEL 循环条件: CX ≠ 0 操作: DEC CX JNZ 符号地址 P133例3
原创力文档

文档评论(0)