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 |
| . . . | . . . |
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP