8085微處理器中的無條件呼叫和返回指令


有時在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,累加器的內容將被傳輸到HL暫存器對指向的記憶體位置4050H
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個位元組、3個機器週期(操作碼提取、記憶體讀取、記憶體讀取)和10個T狀態才能執行,如時序圖所示。

更新於:2020年6月27日

13K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.