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。
HEX到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 | LXI H, 8000H | 載入數字的地址 | |
F003 | 7E | MOV A,M | 將Acc載入到記憶體中的資料 | |
F004 | 47 | MOV B,A | 將數字複製到B | |
F005 | 37 | STC | 設定進位標誌 | |
F006 | 3F | CMC | 補碼進位標誌 | |
F007 | D6, 0A | SUI 0AH | 從A中減去0AH | |
F009 | DA, 11, F0 | JC NUM | 當有進位時,A為數字 | |
F00C | C6, 41 | ADI 41H | 為字母新增41H | |
F00E | C3, 14, F0 | JMP STORE | 跳轉到儲存值 | |
F011 | 78 | NUM | MOV A, B | 將B取回A |
F012 | C6 | ADI 30H | 將30H與A相加以獲取ASCII | |
F014 | 23 | STORE | INX H | 指向下一個位置以儲存地址 |
F015 | 77 | MOV M,A | 將A儲存到HL對指向的記憶體位置 | |
F016 | 76 | HLT | 終止程式 |
輸出
第一個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 41 |
. . . | . . . |
第二個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 35 |
. . . | . . . |
第三個輸出
地址 | 資料 |
---|---|
. . . | . . . |
8001 | 46 |
. . . | . . . |
廣告