转移指令与条件设置指令

一、转移指令
转移指令的介绍见:
https://baike.baidu.com/item/%E8%BD%AC%E7%A7%BB%E6%8C%87%E4%BB%A4/12734565
转移指令的原理见:
https://blog.csdn.net/u011068702/article/details/52985737

根据转移的距离,转移指令有以下类型:
1)短转移:无条件转移和条件转移的机器码都是2个字节,转移范围是-128~+127字节。
2)长转移:无条件转移的机器码是5个字节,条件转移的机器码是6个字节。这是因为条件转移需要用2个字节表示转移类型(如je等),其他4个字节表示转移偏移量。无条件转移用1个字节表示转移类型(jmp),其他4个字节表示转移偏移量。
3)子程序调用指令(call):有两类,一类类似于长转移,另一类调用参数设计到寄存器、堆栈等。

常用转移指令机器码如下表(本表摘自《加密与解密》第3版):
本表摘自《加密与解密》第3版
转移指令的机器码计算形式是:
位移量 = 目的地址 - 起始地址 - 转移指令本身的长度
转移指令机器码 = 转移类别机器码(见上表) + 位移量
(PS:无条件短转移机器码形式为EBXX,其中EB00~EB7F表示向后转移,EB80~EBFF表示向前转移。)

二、条件设置指令(SETcc)
条件设置指令的形式是:SETcc r/m8(r/m8表示8位寄存器或单字节内存单元)。
条件设置指令根据处理器定义的16种条件,测试一些标志位,然后把结果记录到目标操作数中。当条件满足时,目标操作数被置1,否则置0。条件设置指令可以用来消除程序中的转移指令(条件传输指令cmov或fcmov也可以消除程序中的转移指令)。条件设置指令机器码见下表(本表摘自《加密与解密》第3版):
本表摘自《加密与解密》第3版

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值