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
.
.
.
.
.
.

更新於: 2020年6月29日

3K+ 瀏覽量

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告