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