CALL 和 JUMP 指令的区别
CALL 指令用于调用子程序,而JUMP 指令更新程序计数器值并使其指向程序内的另一个位置。阅读本文以了解有关 CALL 和 JUMP 指令的更多信息以及它们之间有何不同。
什么是 CALL 指令?
CALL 指令用于调用子程序。使用 CALL 指令,程序控制将转移到内存中不属于主程序的位置。
CALL 指令需要初始化堆栈指针 (SP)。它基本上是一种控制转移类型指令,因为它用于调用子程序。
一旦所有 CALL 指令调用了子程序并且这些子程序的执行完成,则通过使用 RET 指令将程序控制转移回调用方。
如果我们谈论 CALL 指令的机器周期,那么它需要 5 个机器周期。
什么是 JUMP 指令?
JUMP (JMP) 指令是指程序控制转移到内存中属于主程序的位置的指令。它用于使可编程逻辑控制器或 PLC 跳过逻辑。
JUMP 指令使用立即寻址模式。关于 JUMP 指令的另一个重要点是,它在执行 JUMP 指令后不需要任何返回指令。此外,不需要初始化堆栈指针。
由于 JUMP 指令是转移类型指令,因此我们可以使用此指令将信息从一个内存位置转移到另一个内存位置。JUMP 指令只需要 3 个机器周期,这少于 CALL 指令。
CALL 指令与 JUMP 指令的区别
下表重点介绍了 CALL 和 JUMP 指令之间所有重要的区别 -
序号 |
JUMP 指令 |
CALL 指令 |
---|---|---|
1. |
使用 JUMP,程序控制转移到也属于主程序的位置 |
使用 CALL 指令,程序控制转移到不属于主程序的位置。 |
2. |
这里的寻址模式是立即寻址 |
这里的寻址模式是立即寻址和寄存器间接寻址。 |
3. |
我们不需要初始化堆栈指针 (SP) 来执行 JUMP 指令。 |
在使用某些 CALL 指令之前,我们必须初始化堆栈指针 (SP)。 |
4. |
程序计数器的值不会被压入堆栈 |
在转到指定位置之前,程序计数器的值会被压入堆栈。 |
5. |
JUMP 指令之后不需要返回指令。 |
CALL 之后,它进入子程序,要从子程序返回,我们需要返回指令。 |
6. |
堆栈指针的值保持不变 |
堆栈指针的值减 2。 |
7. |
执行 JUMP 指令需要 10 个 T 状态 |
执行 CALL 指令需要 18 个 T 状态。 |
8. |
JUMP 需要 3 个机器周期 |
CALL 需要 5 个机器周期。 |
结论
您应该注意到的最显着的区别是,在 CALL 指令中,程序控制转移到不属于主程序的位置;而在 JUMP 指令中,程序控制转移到也属于主程序的位置。