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與減法的結果相加。

輸入

第一個輸入

地址資料
.
.
.
.
.
.

80000A
.
.
.

.
.
.

第二個輸入

地址資料
.
.
.

.
.
.

800005
.
.
.

.
.
.

第三個輸入

地址資料
.
.
.

.
.
.

80000F
.
.
.

.
.
.

流程圖

程式

地址十六進位制程式碼標籤助記符註釋
F00021,00, 80

LXIH, 8000H載入數字的地址
F0037E

MOVA, M從記憶體中載入資料到累加器A
F00447

MOVB,A將數字複製到B
F00537

STC
設定進位標誌
F0063F

CMC反轉進位標誌
F007D6,0A

SUI 0AH從A中減去0AH
F009DA,11, F0

JC NUM當進位標誌為1時,A為數字
F00CC6,41

ADI 41H為字母新增41H
F00EC3,14, F0

JMP STORE跳轉到STORE儲存值
F01178NUM:MOVA, B將B的值傳回A
F012C6

ADI 30H將30H與A相加以獲得ASCII
F01423STORE:INX H指向下一個儲存地址
F01577

MOVM,A將A儲存到HL暫存器指向的記憶體位置
F01676

HLT終止程式

輸出

第一個輸出

地址資料
.
.
.

.
.
.

800141
.
.
.

.
.
.

第二個輸出

地址資料
.
.
.

.
.
.

800135
.
.
.

.
.
.

第三個輸出

地址資料
.
.
.
.
.
.
800146
.
.
.
.
.
.

更新於:2020年6月26日

5K+瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.