8085程式:將8位二進位制數轉換為BCD碼
在這個程式中,我們將學習如何將二進位制數轉換為其BCD等效值。
問題陳述
一個二進位制數儲存在800H地址。將其轉換為BCD等效值並將其儲存到8050H記憶體地址。
討論
在這裡,我們從記憶體中讀取一個數,並將其初始化為計數器。現在,在這個計數器的每一步中,我們將數字加1,並調整十進位制值。透過此過程,我們找到二進位制數或十六進位制數的BCD值。
我們可以使用INR指令來遞增計數器,但是此指令不會影響進位標誌,因此我們使用了ADI 10H。
輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | 34 |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H,8000H | 初始化記憶體指標 | |
F003 | 16, 00 | MVI D,00H | 清零D暫存器(用於最高有效位元組) | |
F005 | AF | XRA A | 清零累加器 | |
F006 | 4E | MOV C, M | 獲取十六進位制資料 | |
F007 | C6, 01 | LOOP: | ADI 01H | 逐個計數 |
F009 | 27 | DAA | 調整BCD計數 | |
F00A | D2, 0E, F0 | JNC SKIP | 跳轉到SKIP | |
F00D | 14 | INR D | 遞增D | |
F00E | 0D | SKIP: | DCR C | 遞減C暫存器 |
F00F | C2, 07, F0 | JNZ LOOP | 跳轉到LOOP | |
F012 | 6F | MOV L, A | 載入最低有效位元組 | |
F013 | 62 | MOV H, D | 載入最高有效位元組 | |
F014 | 22, 50, 80 | SHLD 8050H | 儲存BCD碼 | |
F017 | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | 52 |
. . . | . . . |
廣告