‘DAD rp’ 指令執行
在 8085 指令集中,對於 16 位加法,有一個可用的指令,即 **DAD rp** 指令。它是一個 1 位元組指令。使用此指令,將 HL 暫存器對的內容與所述暫存器對的內容相加,並將產生的結果儲存在 HL 暫存器對中。
助記符,運算元 | 操作碼(十六進位制) | 位元組數 |
---|---|---|
DAD B | 09 | 1 |
DAD D | 19 | 1 |
DAD H | 29 | 1 |
DAD SP | 39 | 1 |
例如,讓我們考慮 DADB 指令的執行。假設 HL 暫存器對的初始內容為 5050H,BC 暫存器對的內容為 4050H。因此,如果我們執行指令 DAD B,則將進行以下 16 位加法:
之前 | 之後 | |
---|---|---|
(BC) | 4050H | 4050H |
(HL) | 5050H | 90A0H |
計算步驟 | (BC)= 4050H = 0100 0101 (HL)= 5050H = 0101 0101 ----- --------- (HL) 90A0H = 1001 1010 |
在第一個機器週期 M1 中,DAD B 指令的操作碼 09H 從記憶體中取出到 8085 的 IR 暫存器。然後,8085 將解碼此指令,將其解釋為 DAD B 指令的操作碼。此操作碼提取機器週期總共需要 3 + 1 = 4 個時鐘週期。現在是將 HL 和 BC 暫存器對的內容相加並將結果儲存到 HL 暫存器對的時候了。在 8085 中,我們只有一個 8 位 ALU。因此,要執行此 16 位加法,我們使用臨時暫存器來儲存中間結果。
在第二個機器週期 M2 中,將發生以下操作。
累加器臨時儲存在 W 暫存器中;
L 暫存器內容移到累加器;
C 暫存器內容移到臨時暫存器;
執行加法,並將 ALU 輸出移到 L 暫存器。
此機器週期使用三個時鐘週期。這是一個匯流排空閒 (BI) 機器週期,因為
8085 沒有發出地址;
沒有資料從外部發送或接收;
8085 沒有產生外部控制訊號。
在第三個機器週期 M3 中,將發生以下操作。
H 暫存器內容移到累加器;
B 暫存器內容移到臨時暫存器;
執行帶進位的加法,並將結果儲存在 H 中;
累加器從 W 暫存器獲取原始值。
此機器週期使用三個時鐘週期。這也是一個匯流排空閒 (BI) 機器週期,因為
8085 沒有發出地址;
沒有資料從外部發送或接收;
8085 沒有產生外部控制訊號。
因此,DAD B 指令需要總共十個時鐘週期。它由操作碼提取機器週期(四個時鐘週期)組成,後面跟著兩個 BI 機器週期(每個三個時鐘週期)。
地址 | 十六進位制程式碼 | 助記符 | 註釋 |
---|---|---|---|
2000 | D3 | OUT F0H | 累加器內容將被髮送到埠地址 F0H |
2001 | F0 | F0H 作為埠地址 |
針對此指令 **OUT F0H** 執行的時序圖如下:
**總結** − 因此,此指令 **OUT** 需要 1 個位元組,3 個機器週期(操作碼提取、匯流排空閒週期、匯流排空閒週期)和 10 個 T 狀態才能執行,如時序圖所示。