使用子程式的8085程式,用於累加十個壓縮BCD數。
我們將在此瞭解如何使用8085累加十個壓縮BCD數。
問題陳述
一組十個壓縮BCD數儲存在從8040H到8049H開始的記憶體位置。
編寫一個帶有子程式的程式來以BCD形式累加這些數字。如果產生進位,則將其儲存到暫存器B中,並將其調整為BCD。最終的和將小於9999BCD。將和儲存在8060H和8061H位置。
編寫第二個子程式來解壓儲存在暫存器A和B中的BCD和,並將它們儲存在從8062H開始的OutputBuffer記憶體中。最高有效位(BCD4)應儲存在8065H,最低有效位(BCD1)應儲存在8062H。
討論
數字從8040開始。由於B將儲存進位,因此我們必須先清除B。在第一階段,我們必須從記憶體中獲取數字,然後將它們作為BCD數字相加,並相應地儲存它們。在下一階段,將完成解壓任務。在該部分中,我們獲取16位BCD數,然後將其分解為4位數字。然後將它們儲存到指定位置。
輸入
| 地址 | 資料 |
|---|---|
| … | … |
| 8040 | 12 |
| 8041 | 23 |
| 8042 | 42 |
| 8043 | 55 |
| 8044 | 10 |
| 8045 | 99 |
| 8046 | 35 |
| 8047 | 45 |
| 8048 | 76 |
| 8049 | 81 |
| … | … |
流程圖


程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| 8000 | 21, 40, 80 | | LXI H 8040H | 用IN-BUFFER的第一個位置初始化指標 |
| 8003 | 0E, 0A | | MVI C 0AH | 用要累加的資料個數初始化計數器 |
| 8005 | AF | | XRA A | 清除累加器和暫存器B的內容 |
| 8006 | 47 | | MOV B, A | |
| 8007 | CD, 23, 80 | NEXTBCD | CALL BCDADD | 累加BCD數的子程式 |
| 800A | 23 | | INX H | 轉到下一個位置 |
| 800B | 0D | | DCR C | 遞減計數器,直到達到0 |
| 800C | C2, 07, 80 | | JNZ NEXTBCD | |
| 800F | 32, 60, 80 | | STA 8060 H | 儲存A中可用的結果位元組 |
| 8012 | 57 | | MOV D, A | 臨時D = A |
| 8013 | 78 | | MOV A, B | 將B放入A |
| 8014 | 32, 61, 80 | | STA 8061 H | 將其儲存到OUT-BUFFER中 |
| 8017 | 7A | | MOV A, D | 恢復A |
| 8018 | 21, 62, 80 | | LXI H 8062H | 用OUT-BUFFER的最後一個位置初始化指標 |
| 801B | CD, 2E, 80 | | CALL UNPAK | 從壓縮BCD數中分離兩個半位元組的子程式 |
| 801E | 78 | | MOV A, B | 將B複製到A |
| 801F | CD, 2E, 80 | | CALL UNPAK | 從壓縮BCD數中分離兩個半位元組的子程式 |
| 8022 | 76 | | HLT | 終止程式 |
| 8023 | 86 | BCDADD | ADD M | 將HL暫存器對指定的記憶體位置的內容與A相加 |
| 8024 | 27 | | DAA | 十進位制調整累加器 |
| 8025 | D0 | | RNC | 如果沒有產生進位,則返回到呼叫程式 |
| 8026 | 57 | | MOV D, A | 將A複製到D |
| 8027 | 78 | | MOV A, B | 如果產生進位,則調整暫存器B的內容 |
| 8028 | C6. 01 | | ADI 01H | |
| 802A | 27 | | DAA | |
| 802B | 47 | | MOV B, A | |
| 802C | 7A | | MOV A, D | 將D複製到A |
| 802D | C9 | | RET | 返回到呼叫程式 |
| 802E | 57 | UNPAK | MOV D, A | 將A複製到D |
| 802F | E6, 0F | | ANI 0FH | 遮蔽掉最高有效四位 |
| 8031 | 77 | | MOV M, A | 將A寫入記憶體 |
| 8032 | 23 | | INX H | 轉到下一個位置 |
| 8033 | 7A | | MOV A, D | 將D複製到A |
| 8034 | E6, F0 | | ANI F0H | 遮蔽掉最低有效四位 |
| 8036 | 0F | | RRC | 旋轉累加器4次以獲得第一個BCD數字 |
| 8037 | 0F | | RRC | |
| 8038 | 0F | | RRC | |
| 8039 | 0F | | RRC | |
| 803A | 77 | | MOV M, A | 將A寫入記憶體 |
| 803B | 23 | | INX H | 轉到下一個位置 |
| 803C | C9 | | RET | 返回到呼叫程式 |
輸出
| 地址 | 資料 |
|---|---|
| … | … |
| 8060 | 78 |
| 8061 | 04 |
| 8062 | 08 |
| 8063 | 07 |
| 8064 | 04 |
| 8065 | 00 |
| … | … |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP