8085 微處理器中的復位指令 (RSTn)
在 8085 指令集中,RSTn 實際上代表“Restart n”。在這種情況下,n 的值只能從 0 到 7。因此,存在八種可能的 RST 指令,例如 RST 0、RST 1、…、RST 7。它們是 1 位元組的呼叫指令。在功能上,RST n 指令類似於
RST n = CALL n*8
例如,讓我們考慮 RST 4 在功能上等效於 CALL 4*8,即 CALL 32 = CALL 0020H。RST 2 的優點在於它只有 1 位元組長,而 CALL 0010H 則有 3 位元組長。因此,RST 指令對於分支到常用子程式很有用。
助記符,運算元 | 操作碼(十六進位制) | 二進位制 | 位元組 | 目標地址 (n*8) |
---|---|---|---|---|
RST 0 | C7 | 1100 0111 | 1 | 0000H |
RST 1 | CF | 1100 1111 | 1 | 0008H |
RST 2 | D7 | 1101 0111 | 1 | 0010H |
RST 3 | DF | 1101 1111 | 1 | 0018H |
RST 4 | E7 | 1110 0111 | 1 | 0020H |
RST 5 | EF | 1110 1111 | 1 | 0028H |
RST 6 | F7 | 1111 0111 | 1 | 0030H |
RST 7 | FF | 1111 1111 | 1 | 0038H |
在上表中,已經表明,如果我們分析 RSTn 的十六進位制程式碼,我們會發現中間的 3 位表示 n 的值(如表中突出顯示的那樣)。位元組中的其他 5 位提供 RST 的程式碼。
讓我們考慮 RST 4 作為此類指令的一個示例。它是一個 1 位元組指令。它在功能上與 CALL 0020H = PUSH PC + JMP 0010H 相同。它導致分支到從記憶體地址 0020H 開始的子程式。類似地,RST 5 導致分支到 5*8 = 0028H 處的子程式。因此,從位置 0020H 開始的子程式不應超過記憶體位置 0027H。因此,最多隻有 8 個位置可用於子程式,這通常太小,無法容納子程式主體。此限制可以透過分支到其他記憶體位置(例如 4050H)處的子程式來克服。這是透過 RST 4 指令和記憶體位置 0020H 處的 JMP 4050H 指令的組合來實現的,如下面的圖所示。
由於執行 RST 4 而導致堆疊內容受到影響的方式如下所示。
由於執行 RST 4 而導致堆疊內容受到影響的方式如下所示。
之前 | 之後 | |
---|---|---|
(PC) | 2021H | 0020H |
(SP) | 5000H | 4FFEH |
(4FFFH) | 任何值 | 20H |
(4FFEH) | 任何值 | 21H |
在圖中,主程式從地址 2000H 開始,指令 LXI SP, 5000H 用於將 SP 初始化為該記憶體地址。主程式在地址 2050H 處具有終止指令 HLT。在主程式的地址 2020H 處,指令為 RST 4。因此,計算出的目標地址將為 4*8 = 32 = 0020H。因此,返回地址 2021H 將被推送到堆疊頂部。因此,20H 將被推送到堆疊位置 4FFFH,而 21H 將被推送到地址 4FFEH。因此,更新後的 SP 地址將為 4FFEH。並且控制將轉移到地址 0020H。在該地址,我們有指令 JMP 4050H。因此,程式控制將分支到該地址 4050H。此子程式在地址 4080H 處具有最後一個指令,指令為 RET。因此,返回的 2 位元組地址將從堆疊頂部彈出。因此,16 位返回地址將為 2021H,並且 SP 將再次初始化為 5000H。因此,主程式將恢復執行,並在地址 4080H 處使用指令 HLT 正常終止。
針對此指令 **RST 4** 執行的時間圖如下所示:
**總結** - 因此,此指令 **RST 4** 需要 1 位元組、3 個機器週期(操作碼獲取、記憶體寫入、記憶體寫入)和 12 個 T 狀態才能執行,如時間圖所示。