CALL 指令和跳转指令的区别

2024 年 8 月 28 日 | 3 分钟阅读

Jump 指令是一种转移指令。 借助此指令,我们可以将信息从一个位置转移到另一个位置。 如果我们正在运行一个程序,并且想要跳过部分程序行或逻辑,在这种情况下,JUMP 指令将非常有用。 返回的信息将不会存储在 JUMP 指令中。

CALL 指令也是一种控制转移指令。 借助该指令,我们可以调用子程序。 子程序包含需要频繁执行的指令块。 因此,程序将更具结构性,并节省大量内存空间。 当 call 指令调用子程序并且子程序的执行完成时,控制将借助 RET 指令转移回调用方。

JUMP 指令和 CALL 指令之间存在许多差异,如下所述

序号。JUMP 指令CALL 指令
1在 JUMP 中,我们只需跳转到新位置,然后从那里继续。在 CALL 中,我们跳转到一个新位置,该位置被称为子程序。 当我们使用 CALL 指令时,将执行子程序。 当子程序完全执行时,RET 指令将被放入我们的程序中,以便返回地址将从堆栈放入 PC。
2在 JUMP 指令中,不强制初始化堆栈指针。在 CALL 指令中,强制初始化堆栈指针。
3在 JUMP 指令中,堆栈指针的值不会改变。在 CALL 指令中,堆栈指针的值递减 2。
4在执行 JUMP 后,不包含返回指令,因为它不需要返回到先前的位置。我们使用 CALL 指令以便我们可以调用子程序。 借助堆栈的返回地址,控制将通过 RET 指令在子程序结束时转移回主程序。
5JUMP 指令不需要将返回地址存储到堆栈中。在 CALL 时,程序计数器的返回地址将被压入堆栈。
在 RET 指令时,返回地址将从堆栈中弹出并添加到程序计数器。
6JUMP 指令不用于将程序计数器的值转移到堆栈中。CALL 指令用于将程序计数器的值转移到子程序中,以便它可以返回到主程序。
7JUMP 指令中存在立即寻址模式。CALL 指令中存在寄存器寻址模式和立即寻址模式。
8程序计数器由 JUMP 指令永久更改。此指令包含在堆栈上保留的信息,以恢复原始程序的执行顺序。
9在 JUMP 指令中,PC 转移到存储器位置,并且该位置是主程序的一部分。在 CALL 指令中,PC 转移到存储器位置,并且该位置不是主程序的一部分。
10JUMP 有三种类型,即长跳转、短跳转和绝对跳转。CALL 有两种类型,即长调用、绝对调用。
11要执行 JUMP 指令,我们需要 10 个 T 状态。要执行 CALL 指令,我们需要 18 个 T 状态。
12要执行 JUMP 指令,我们还需要 3 个机器周期。要执行 CALL 指令,我们还需要 5 个机器周期。
13JUMP 指令被描述为条件跳转和无条件跳转。CALL 指令仅被描述为无条件。