8085微處理器中的堆疊讀寫


從堆疊讀取

假設SP包含地址FC78H,我們想要從堆疊位置讀取資訊。在這種情況下,我們對讀取地址小於SP中存在的記憶體地址的位置不感興趣。這是因為8085將它們解釋為無用的資訊。例如,從記憶體位置FC75H讀取無用資訊毫無意義。

SP解釋說,記憶體位置FC78H、FC79H、...、FFFFH都被8085解釋為包含有用的資訊。要從堆疊讀取,8085微處理器指令集中使用的指令是POP。下面我們將詳細討論POP指令。

在8085指令集中,使用助記符POP,我們可以透過rp(即暫存器對,例如BC、DE、HL或AF)從堆疊頂部彈出2個位元組。這裡AF是由標誌暫存器和累加器暫存器組成的暫存器對,也稱為PSW(處理器狀態字)。在PSW中,累加器是高位位元組,標誌暫存器是低位位元組。

助記符,運算元
操作碼(十六進位制)
位元組數
POP B
C1
1
POP D
D1
1
POP H
E1
1
POP PSW
F1
1

在上面提到的操作碼中,2位用於表示暫存器對。2位可以有4種組合。因此,可以使用POP提及4個暫存器對。如前所述,它們是BC、DE、HL和AF或PSW。

請注意,在LXI指令中,我們可以使用4個可能的暫存器對,即BC、DE、HL和SP。因此,我們不能同時對同一指令使用SP和PSW。

rp程式碼
暫存器對
0 0
BC
0 1
DE
1 0
HL
1 1
SP或PSW,但不能同時使用兩者。

讓我們考慮以下示例,以便更好地理解指令的操作。

這裡我們考慮指令POP D,它屬於該類別。由於rp可以具有四個值中的任何一個,因此此類指令有四個操作碼。它在記憶體中只佔用1個位元組。POP D是此類指令的一個示例。它是一個1位元組指令。下面透過一個示例顯示此指令執行的結果。


之前
之後
(BC)
AABBH
AABBH
(SP)
3FFEH
4000H
(3FFFH)
AAH
AAH
(3FFEH)
BBH
BBH
(DE)
任意值
AABBH


地址
十六進位制程式碼
助記符
註釋
2000
01
LXI B, AABBH
用AABBH初始化BC暫存器對
2001
BB

低位位元組BBH
2002
AA

高位位元組AAH
2003
31
LXI SP,4000H
用4000H初始化SP
2004
00

低位位元組00H
2005
40

高位位元組40H
2006
C5
PUSH B
在3FFFH處移動AAH,在3FFEH處移動BBH
2007
D1
POP D
彈出並用堆疊內容初始化DE暫存器對

針對此指令POP D執行的時序圖如下所示:

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

寫入堆疊

假設SP內容為FC7AH,我們想要將資訊寫入堆疊位置。在這種情況下,我們對寫入地址等於或大於SP中存在的記憶體地址的位置不感興趣。這是因為8085將它們解釋為包含有用的資訊,不應破壞!例如,在記憶體位置FD7AH覆蓋和破壞有用的資訊毫無意義。我們應該寫入目前包含無用資訊的位置,並使其變得有用。

要寫入堆疊,8085微處理器指令集中使用的指令是PUSH。下面我們將詳細討論PUSH指令。

在8085指令集中,PUSH rp指令透過將其推入堆疊頂部上方的兩個位置來儲存暫存器對rp的內容。rp代表以下暫存器對之一。

rp = BC、DE、HL或PSW

由於rp可以具有四個值中的任何一個,因此此類指令有四個操作碼。它在記憶體中只佔用1個位元組。

助記符,運算元
操作碼(十六進位制)
位元組數
PUSH B
C5
1
PUSH D
D5
1
PUSH H
E5
1
PUSH PSW
F5
1

在上面提到的操作碼中,2位用於表示暫存器對。2位可以有4種組合。因此,可以使用POP提及4個暫存器對。如前所述,它們是BC、DE、HL和AF或PSW。

請注意,在LXI指令中,我們可以使用4個可能的暫存器對,即BC、DE、HL和SP。因此,我們不能同時對同一指令使用SP和PSW。

rp程式碼
暫存器對
0 0
BC
0 1
DE
1 0
HL
1 1
SP或PSW,但不能同時使用兩者。

讓我們考慮PUSH B作為此類指令的示例。它是一個1位元組指令。

下面透過一個示例顯示此指令執行的結果。


之前
之後
(BC)
AABBH
AABBH
(SP)
4000H
3FFEH
(3FFFH)
任意值
AAH
(3FFEH)
任意值
BBH


地址
十六進位制程式碼
助記符
註釋
2000
01
LXI B, AABBH
用AABBH初始化BC暫存器對
2001
BB

低位位元組BBH
2002
AA

高位位元組AAH
2003
31
LXI SP,4000H
用4000H初始化SP
2004
00

低位位元組00H
2005
40

高位位元組40H
2006
C5
PUSH B
在3FFFH處移動AAH,在3FFEH處移動BBH

針對此指令PUSH B執行的時序圖如下所示:

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

更新於:2019年7月30日

1K+ 次檢視

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.