跳跃范围有限的汇编标签

时间:2014-11-12 15:14:16

标签: assembly labels

我正在为一个简单的RISC处理器编写一个汇编程序,它有一个非常小的跳跃(7位签名)。所有跳跃都是通过以下方式计算的:

PC = PC + IMMEDIATE + 1

其中PC是指向下一条指令的程序计数器。

如果你需要超过64行,你需要链接跳跃,如下所示:

JMP, 0x3F

//64 lines ahead

JMP, 0x5;

这将有效地在当前指令之前跳过70行。

当我们有标签时,我的问题出现了:

JMP, label

//more than 64 lines ahead

label:

汇编程序如何为此生成代码?你需要两个标签,还是汇编程序会为你进行两次跳转?如果它进行两次跳转,它如何知道指令是否不是64行呢?

1 个答案:

答案 0 :(得分:1)

条件跳转不能超过127个字节前向或128个字节后向。无条件跳跃可以跳得更快。我猜你是通过条件跳转尝试过的。如果要有条件地跳转到127字节以上的位置,请向该位置写入无条件跳转并插入条件跳转,否则将跳过其他跳转指令(如果条件未满足)。例如这段代码:

je label

//more than 127 bytes ahead

label:

可以替换为此代码:

jne omit
jmp label
omit:
//more than 127 bytes ahead
label: