跳转指令
跳转指令也是一个组的指令,称为j组。其中jmp为无条件跳转,其余为条件跳转
上图为j组指令,可结合条件码访问指令加深理解
在机器指令水平上理解如何对跳转指令编码
如上图,通过反汇编软件得到机器指令与汇编语言,其中左边为机器指令编码,右边为对应汇编语言含义,最左边为每条机器指令地址
jmp指令的对应机器指令有两个字节:eb表示这是jmp指令,03描述跳转信息。值得注意的是,跳转指令进行编码时,采用相对位置编码,如03描述的就是偏移量
结合实例进行理解:在未执行jmp指令时,rip寄存器存储的地址为4004d5(rip寄存器存放即将加载的指令地址);执行jmp指令后,rip寄存器的值改为新的目标位置地址,目标位置=原先位置+偏移量,在此例子中为4004d5+03=4004d8。jg指令同理
存放相对位置意义:可获得更高灵活度,若存放绝对地址,分配地址可能改变;而相对位置一定不変
使用汇编语言的跳转