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+浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告