8085微处理器中将十六进制转换为ASCII的程序
这里我们将看到一个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 | LXI H, 8000H | 加载数字的地址 | |
F003 | 7E | MOV A,M | 将内存中的数据加载到累加器A | |
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 |
… | … |
广告