转移指令与条件设置指令

一、转移指令
转移指令的介绍见:
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版

猜你喜欢

转载自blog.csdn.net/zlanbl085321/article/details/80319606
今日推荐