8085微處理器中CALL和JUMP指令的區別


JMP指令和CALL指令之間的主要區別如下:

  • 如果執行JMP指令,我們將跳轉到目標位置,並且執行從那裡繼續,而無需稍後返回到JMP之後的指令。另一方面,如果執行CALL指令,我們將跳轉到子程式,並且執行從那裡繼續,直到在子程式中執行RET指令,然後我們返回到主程式中CALL之後的指令。

  • CALL指令之後下一條指令的地址稱為返回地址。這是當8085執行RET指令時程式流程返回到的地址。在8085獲取call指令時,PC將遞增3,並將指向call之後的下一條指令。換句話說,在獲取call指令時,PC將具有返回地址。

  • 為了促進這樣的返回,CALL指令首先將返回地址儲存在堆疊頂部之上。只有在那之後,分支到子程式才會發生。

我們在8085中擁有不同型別的條件和無條件JUMP指令。詳細資訊如下:

在8085指令集中,有一組跳轉指令,可以將程式控制轉移到某個記憶體位置。因此,在這些分支助記符之後,我們將必須提及該位置的16位目標地址。這些跳轉指令可以分為兩類:

  • 無條件跳轉指令和

  • 條件跳轉指令

在無條件跳轉指令下,只有一個助記符,即JUMP。但在條件跳轉指令下,我們有8個不同的助記符。我們知道8085標誌暫存器中有5個標誌位。它們是S、Z、P、Cy、AC。其中,只有在AC標誌位上,沒有跳轉指令。但對於其餘4個標誌位,我們有8個條件跳轉指令,具體取決於它們的值為1或0,即分別為TRUE和FALSE。以下是所有分支指令的列表,如下表所示:

助記符,運算元
操作碼(十六進位制)
位元組數
JC 標籤
DA
3
JM 標籤
FA
3
JMP 標籤
C3
3
JNC 標籤
D2
3
JNZ 標籤
C2
3
JP 標籤
F2
3
JPE 標籤
EA
3
JPO 標籤
E2
3
JZ 標籤
CA
3

下表顯示了分支指令及其含義的列表。

操作碼
運算元
含義
解釋
JMP
16位地址
無條件跳轉
程式序列被轉移到運算元中給定的記憶體地址。
操作碼
描述
標誌狀態
JC
進位時跳轉
CY=1
JNC
無進位時跳轉
CY=0
JP
正數時跳轉
S=0
JM
負數時跳轉
S=1
JZ
零時跳轉
Z=1
JNZ
非零時跳轉
Z=0
JPE
奇偶校驗為偶數時跳轉
P=1
JPO
奇偶校驗為奇數時跳轉
P=0
16位地址
條件跳轉
根據PSW的指定標誌,程式序列被轉移到運算元中給定的記憶體地址。

CALL指令的主要目的和用法如下:

有時在8085組合語言編碼中,我們需要多次重複某個程式段。在這些情況下,我們可以定義子程式。在這些子程式中,我們可以包含我們重複可重用的指令集或程式碼。然後,根據需要,我們將相應地呼叫這些子程式。子程式也可以稱為過程。

每當需要執行子程式中的指令時,我們使用**CALL**指令將程式控制分支到子程式。**CALL**是3位元組指令,其中1位元組用於操作碼,2位元組用於子程式的地址。**CALL**助記符代表“呼叫子程式”。在執行子程式中編寫的指令後,我們將希望將控制返回到**CALL**指令之後編寫的下一條指令,然後我們將使用助記符**RET**。這裡**RET**代表從子程式返回。**RET**是1位元組指令。在下表中,我們提到了**CALL**和**RET**指令的操作碼和位元組數:

助記符,運算元
操作碼(十六進位制)
位元組數
CALL 標籤
CD
3
RET
C9
1

讓我們考慮以下示例程式碼以更好地解釋:

地址
十六進位制程式碼
助記符
註釋
2000
31
LXI SP, 5000H
SP ← 5000H。初始化SP
2001
00

地址的低位位元組
2002
50

地址的高位位元組
2003
3E
MVI A, 00H
A ← 00H,初始化累加器
2004
00

00H作為運算元
2005
06
MVI B, 01H
B ← 01H
2006
01

01H作為運算元
2007
0E
MVI C, 02H
C ← 02H
2008
02

02H作為運算元
2009
16
MVI D, 03H
D ← 03H
200A
03

03H作為運算元
200B
CD
CALL 2013H
呼叫地址為2013H的子程式。因此,現在程式的控制將轉移到位置2013H。並且返回地址200EH(即下一條指令的地址)將被壓入堆疊頂部。結果,4FFFH(SP – 1)將包含20H,而4FFEH(SP – 2)將分別包含0EH。
200C
13

地址的低位位元組
200D
20

地址的高位位元組
200E
21
LXI H, 4050H
HL ← 4050H,初始化HL暫存器對。在執行RET指令後,控制將返回到此指令。4050H將具有值06H,即01H + 02H + 03H = 06H的最終和
200F
50

地址的低位位元組
2010
40

地址的高位位元組
2011
77
MOV M, A
M ← A,累加器的內容將被傳輸到記憶體位置4050H,因為它由HL暫存器對指向
2012
76
HLT
程式結束。
2013
80
ADD B
A ← A + B
2014
81
ADD C
A ← A + C
2015
82
ADD D
A ← A + D
2016
C9
RET
將控制返回到地址200EH。返回地址200EH將從堆疊頂部彈出。因此,從地址4FFEH,0EH將被彈出,從地址4FFFH,20H將被彈出,並且SP將相應地將其內容恢復為初始地址5000H。

針對此指令**CALL 2013H**執行的時序圖如下:

**總結:**因此,此指令**CALL**需要3個位元組、5個機器週期(操作碼獲取、記憶體讀取、記憶體讀取、記憶體寫入、記憶體寫入)和18個T狀態才能執行,如時序圖所示。

針對此指令**RET**執行的時序圖如下:

**總結:**因此,此指令**RET**需要1個位元組、5個機器週期(操作碼獲取、記憶體讀取、記憶體讀取)和10個T狀態才能執行,如時序圖所示。

.

更新於:2019年7月30日

3K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.