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 指令中,程式控制轉移到也屬於主程式的位置。