8085程式:將兩位十六進位制數轉換為兩個ASCII值
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將把8位數轉換為兩位ASCII值。
問題陳述
編寫一個8085組合語言程式,其中一個8位二進位制數儲存在記憶體地址8050H中。將每個四位數分離出來,並將其轉換為相應的ASCII碼,然後將其儲存到記憶體地址8060H和8061H中。
討論
在這個問題中,我們使用一個子程式將一位十六進位制數(四位數)轉換為其等效的ASCII值。由於8位數包含兩個四位數,因此我們可以執行此子程式來查詢它們的ASCII值。我們可以很容易地透過遮蔽高四位數來獲得低四位數,而對於高四位數,我們必須首先遮蔽低四位數,然後將暫存器內容向右旋轉四次,現在我們可以將其更改為ASCII值。
這裡我們將輸入3AH,程式將返回33和41。這些分別是3和A的ASCII值。
輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 3A |
| . . . | . . . |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| 8000 | 31, 00, 81 | LXI SP, 8100 | 初始化堆疊指標 | |
| 8003 | 21, 50, 80 | START | LXI H, 8050H | 將指標初始化為輸入緩衝區的第一個位置 |
| 8006 | 11, 60, 80 | LXI D, 8060H | 將指標初始化為輸出緩衝區的第一個位置 | |
| 8009 | 7E | MOV A, M | 將8050H的內容移動到A | |
| 800A | 47 | MOV B, A | 將A複製到B | |
| 800B | 0F | RRC | 將累加器向右旋轉4次 | |
| 800C | 0F | RRC | ||
| 800D | 0F | RRC | ||
| 800E | 0F | RRC | ||
| 800F | CD, 1A, 80 | CALL ASCII | 此子程式將二進位制數轉換為ASCII | |
| 8012 | 12 | STAX D | 將累加器的內容儲存到由DE暫存器對指定的位置 | |
| 8013 | 13 | INX D | 轉到下一個位置 | |
| 8014 | 78 | MOV A, B | 將B複製到A | |
| 8015 | CD, 1A, 80 | CALL ASCII | 此子程式將二進位制數轉換為ASCII | |
| 8018 | 12 | STAX D | 將累加器的內容儲存到由DE暫存器對指定的位置 | |
| 8019 | 76 | HLT | 終止程式 | |
| 801A | E6, 0F | ASCII | ANI 0FH | 將BCD數轉換為其對應的ASCII值 + 48 0 到 9 ———————à 48 到 57 + 55 A 到 F ———————à 65 到 70 + 48 +7 所以 +48 是通用的,但如果十六進位制數字在 A 到 F 之間,則需要額外新增 +7。 |
| 801C | FE, 0A | CPI 0AH | ||
| 801E | DA, 23, 80 | JC CODE | ||
| 8021 | C6, 07 | ADI 07H | ||
| 8023 | C6, 30 | CODE | ADI 30H | |
| 8025 | C9 | RET | 返回控制權給呼叫程式 |
輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8060 | 33 |
| 8061 | 41 |
. . . | . . . |
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP