8085 微處理器將 16 位二進位制數轉換為 BCD 的程式
在這裡,我們將看到一個 8085 微處理器程式。此程式將用於將 16 位二進位制資料轉換為 BCD 資料。
問題陳述 -
編寫一個 8085 組合語言程式,將 16 位二進位制資料轉換為 BCD 資料。二進位制資料儲存在 8000H 和 8001H 位置。
討論 -
這個問題透過實現 16 位計數器來解決。我們首先儲存 16 位數,然後逐個減少數字,並透過調整十進位制值來增加十進位制值。要增加值,我們可以使用 INR 指令,但 INR 指令不會影響進位標誌。因此,這裡我們使用 ADI 01H 將其增加 1。
二進位制數取自 8000H 和 8001H 位置,最終結果儲存在 8050H 到 8052H 位置。
輸入
地址 | 資料 |
---|---|
… | … |
8000 | FF |
8001 | FF |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 2A, 00, 80 | LHLD 8000H | 用 16 位資料初始化 HL | |
F003 | 11, 00, 00 | LXI D,0000H | 清除 DE 暫存器 | |
F006 | AF | XRA A | 清除 A 暫存器 | |
F007 | C6, 01 | LOOP | ADI 01H | 將 01 加到 A 中 |
F009 | 21 | DAA | 調整十進位制 | |
F00A | 47 | MOV B,A | 將 A 儲存到 B | |
F00B | D2, 1B, F0 | JNC SKIP | 如果 CY = 0,則轉到 skip | |
F00E | 7B | MOV A,E | 將 E 載入到 A | |
F00F | C6, 01 | ADI 01H | 將 01H 加到 A 中 | |
F011 | 27 | DAA | 十進位制調整 | |
F012 | 5F | MOV E,A | 從 A 獲取 E | |
F013 | D2, 1B,F0 | JNC SKIP | 如果 CY = 0,則轉到 skip | |
F016 | 7A | MOV A,D | 將 D 取到 A | |
F017 | C6, 01 | ADI 01H | 將 01H 加到 A 中 | |
F019 | 27 | DAA | 調整十進位制 | |
F01A | 57 | MOV D,A | 將 A 載入到 D | |
F01B | 2B | SKIP | DCX H | 減少 DE |
F01C | 7C | MOV A,H | 將 H 載入到 A | |
F01D | 85 | ORA L | A 和 L 進行或運算 | |
F01E | 78 | MOV A,B | 將 B 載入到 A | |
F01F | C2, 07, F0 | JNZ LOOP | 跳轉到 Loop | |
F022 | EB | XCHG | 交換 DE 和 HL | |
F023 | 22, 51, 80 | SHLD 8051H | 將 HL 內容儲存到記憶體中 | |
F026 | 32, 50, 80 | STA 8050H | 將 A 儲存到記憶體中 | |
F029 | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
… | … |
8050 | 35 |
8051 | 55 |
8052 | 06 |
… | … |
廣告