《汇编语言》第九章-转移指令的原理

目录:https://blog.csdn.net/qq_43098197/article/details/12453240

转移指令: 可以修改 IP,或同时修改 CS 和 IP 的指令统称为转移指令。

8086CPU 的转移行为有以下几类:

  • 只修改 IP,称为段内转移。
  • 同时修改 CS:IP,称为段间转移。

转移指令对修改 IP 范围分类:

  • 短转移:修改范围为 -128~127(8位)
  • 近转移:修改范围为 -32768~32767(16位)

8-86CPU 的转移指令分类:

  • 无条件转移指令
  • 条件转移指令
  • 循环指令
  • 过程
  • 中断

offset 操作符

作用: 获取标号的偏移地址。

jmp 指令

作用: 无条件转移指令,可以只修改 IP,也可以同时修改 CS:IP。

它的机器码并不包含目标地址,而是位移的位数 EB XX ,其中 XX 是偏移的位数,向前偏移为负数,使用补码表示,向后就是正数。

位移计算方式: 标号处 - jmp 指令后的第一个字节的地址。

指令分类:

  • 段内短转移:jmp short 标号

  • 段内近转移:jmp near ptr 标号

  • 段间远转移:jmp far ptr 标号
    机器码:AA BB CC DD,高地址 CCDDH 是段地址,低地址 AABBH 是偏移地址。

转移地址在寄存器中的指令: jmp 16位寄存器 (IP) = (16位寄存器)

转移地址在内存中的 jmp 指令:

  • jmp word ptr 内存单元地址(段内转移)
  • jmp dword ptr 内存单元地址(段间转移)

jcxz 指令

简介: 有条件转移指令,所有有条件转移指令都是短转移。

机器码不包含目标地址,而是位移。

格式: jcxz 标号

作用: c x = 0 cx = 0 cx=0 ,则进行位移。

高级语言描述:

if(cx 寄存器的值 == 0) {
    jmp short 标号; // 则进行位移
}

loop 指令

简介: 所有的循环指令都是短转移,机器码不包含目标地址,而是位移。

格式: loop 标号

作用: 先 cx–,若 c x ≠ 0 cx \neq 0 cx=0,则转移到标号处。

根据位移转移的意义

首先,它这个位置不是固定的,因为若包含地址,那么如果包含的这个地址它是无效的怎么办?或者说一开始有效,但某一时刻该地址是个无效地址怎么办?而位移,它是相对的,无论如何它都存在一个有效地址。

这是目前我对位移的意义的理解,或许不是很准确,仅供参考。

位移越界

若转移超过了指定范围,则编译时会报错,要自己注意。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值