8085彙編程式:將十六進位制轉換為ASCII
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將十六進位制轉換為ASCII值。
問題陳述
編寫8085組合語言程式,將十六進位制字元轉換為ASCII值。
討論
我們知道數字00H的ASCII碼是30H (48D),而09H的ASCII碼是39H (57D)。所以所有其他數字都在30H到39H的範圍內。0AH的ASCII碼是41H (65D),0FH的ASCII碼是46H (70D),所以所有其他字母(B, C, D, E, F)都在41H到46H的範圍內。
在這裡,我們將十六進位制數字放在記憶體位置8000H,其ASCII等效值儲存在位置8001H。
十六進位制到ASCII轉換背後的邏輯非常簡單。我們只是檢查數字是否在0-9範圍內。如果數字在這個範圍內,則十六進位制數字是數字,我們只需加上30H即可得到ASCII值。如果數字不在0-9範圍內,則數字在A-F範圍內,在這種情況下,我們將數字轉換為41H及以上。
在程式中,首先我們清除進位標誌。然後從給定的數字中減去0AH。如果該值是數字,則減法後的結果將為負數,因此進位標誌將被設定。現在透過檢查進位狀態,我們可以簡單地將30H與該值相加以獲得ASCII值。
另一方面,當減法的結果為正或0時,我們將41H與減法的結果相加。
輸入
第一個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 0A |
| . . . | . . . |
第二個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 05 |
| . . . | . . . |
第三個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 0F |
| . . . | . . . |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| F000 | 21,00, 80 | LXIH, 8000H | 載入數字的地址 | |
| F003 | 7E | MOVA, M | 從記憶體中載入資料到累加器A | |
| F004 | 47 | MOVB,A | 將數字複製到B | |
| F005 | 37 | STC | 設定進位標誌 | |
| F006 | 3F | CMC | 反轉進位標誌 | |
| F007 | D6,0A | SUI 0AH | 從A中減去0AH | |
| F009 | DA,11, F0 | JC NUM | 當進位標誌為1時,A為數字 | |
| F00C | C6,41 | ADI 41H | 為字母新增41H | |
| F00E | C3,14, F0 | JMP STORE | 跳轉到STORE儲存值 | |
| F011 | 78 | NUM: | MOVA, B | 將B的值傳回A |
| F012 | C6 | ADI 30H | 將30H與A相加以獲得ASCII | |
| F014 | 23 | STORE: | INX H | 指向下一個儲存地址 |
| F015 | 77 | MOVM,A | 將A儲存到HL暫存器指向的記憶體位置 | |
| F016 | 76 | HLT | 終止程式 |
輸出
第一個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8001 | 41 |
| . . . | . . . |
第二個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8001 | 35 |
| . . . | . . . |
第三個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8001 | 46 |
| . . . | . . . |
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP