8085程式:將兩位BCD碼轉換為二進位制
在本程式中,我們將瞭解如何將BCD數轉換為等效的二進位制數。
問題陳述
一個BCD數儲存在地址802BH中。將其轉換為等效的二進位制數,並將其儲存到記憶體地址802CH中。
討論
在這個問題中,我們從記憶體中獲取一個BCD數並將其轉換為等效的二進位制數。首先,我們擷取輸入的每個半位元組。所以如果輸入是52(0101 0010),那麼我們可以透過將數字與0FH和F0H進行掩碼來簡單地擷取它。當擷取高位半位元組後,將其向左旋轉四次以將其傳輸到低位半位元組。
現在,只需使用十進位制調整方法乘以數字即可獲得最終的十進位制結果。
輸入
地址 | 資料 |
---|---|
. . . | . . . |
802B | 52 |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
8000 | 31, FF, 80 | LXI SP,80FFH | 初始化堆疊指標 | |
8003 | 21, 2B, 80 | LXI H, 802BH | 指向輸入緩衝區的指標 | |
8006 | 01, 2C, 80 | LXI B, 802CH | 指向輸出緩衝區的指標 | |
8009 | 7E | MOV A, M | 將802BH的內容移動到A | |
800A | CD, 0F, 80 | CALL BCDBIN | 將BCD數轉換為十六進位制的子程式 | |
800D | 02 | STAX B | 將累加器儲存到BC指向的記憶體位置 | |
800E | 76 | HLT | 終止程式 | |
800F | C5 | BCDBIN | PUSH B | 儲存B |
8010 | 47 | MOV B, A | 將A複製到B | |
8011 | E6, 0F | ANI 0FH | 最高四位掩碼 | |
8013 | 4F | MOV C, A | 將A複製到C | |
8014 | 78 | MOV A, B | 將B複製到A | |
8015 | E6, F0 | ANI F0H | 最低四位掩碼 | |
8017 | 0F | RRC | 累加器右移4次 | |
8018 | 0F | RRC | ||
8019 | 0F | RRC | ||
801A | 0F | RRC | ||
801B | 57 | MOV D, A | 將計數值載入到暫存器D中 | |
801C | AF | XRA A | 清除累加器的內容 | |
801D | 1E, 0A | MVI E, 0AH | 用0AH初始化暫存器E | |
801F | 83 | SUM | ADD E | 將暫存器E的內容加到A中 |
8020 | 15 | DCR D | 將計數減1,直到達到0 | |
8021 | C2, 1F, 80 | JNZ SUM | ||
8024 | 81 | ADD C | 將暫存器C的內容加到A中 | |
8025 | C1 | POP B | 恢復B | |
8026 | C9 | RET | 將控制權返回給呼叫程式 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
802C | 34 |
. . . | . . . |
廣告