8085 微處理器將兩位十六進位制轉換為兩個ASCII值的程式
在這裡,我們將看到一個 Intel 8085 微處理器的程式。使用此程式,我們可以將 8 位數字轉換為兩位 ASCII 值。
問題陳述−
編寫一個 8085 組合語言程式,將 8 位二進位制轉換為 2 個字元的 ASCII 值。8 位二進位制數儲存在記憶體位置 8050H 中。將每個四位數分離並將其轉換為相應的 ASCII 程式碼,並將其儲存到記憶體位置 8060H 和 8061H 中。
討論−
在這個問題中,我們使用一個子程式將一個十六進位制數字(四位數)轉換為其等效的 ASCII 值。由於 8 位數字包含兩個四位數,因此我們可以執行此子程式來查詢它們的 ASCII 值。我們可以很容易地透過遮蔽高四位數來獲得低四位數,對於高四位數,我們必須首先遮蔽低四位數,然後將暫存器內容向右旋轉四次,現在我們可以將其更改為 ASCII 值。
在這裡,我們將輸入 3AH,程式將返回 33 和 41。這些分別是 3 和 A 的 ASCII 值。
輸入
地址 | 資料 |
---|---|
… | … |
8050 | 3A |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
8000 | 31, 00, 81 | | LXI SP, 8100 | 初始化 SP |
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 |
… | … |
廣告