如何使用相对跳?

Ori*_*ski 5 x86 assembly nasm

关于相对跳跃,我有以下问题:

  1. 我知道相对于当前PC而言,JMP SHORT <displacement>它将跃升至<displacement>字节。那是对的吗?
  2. 汇编器会自动生成相对跳转的操作码吗?即当我刚写时JMP <label>,如果该标签位于当前PC的128字节之内,它将产生一个相对跳转吗?
  3. 万一我想使用JMP SHORT <displacement>,计算位移的正确方法是什么?通过检查清单文件并计算偏移量?

old*_*mer 5

每个汇编程序(程序)和每个版本的汇编程序都可以选择默认为long或short。因此,我不会寻找所有汇编程序默认为一件事的笼统声明。如果好奇,请尝试一下,看看会发生什么。

使用x86和可变长度指令,仅对位移进行编码非常困难,必须提醒自己不要触碰跳转和目标之间的代码。

是的,我首先使用标签让汇编器对指令进行编码,然后获得指令集参考手册和带地址的反汇编,并弄清楚如何计算位移。如果汇编程序允许您自己设置位移,这很可能是汇编程序特定的事情,那么您需要知道它可能需要该位移的单位。x86可能是字节,但是固定字长的指令集可能需要以指令单位而不是字节为单位进行替换。或字节而不是指令,因此我将使用位移然后再次反汇编以查看其计算出了正确的指令。