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的范围内。
这里的逻辑很简单。我们检查ASCII值是否小于58H(9的ASCII码+1)。当数字小于58时,它是数字值。所以我们简单地从ASCII值中减去30H,当它大于58H时,它是字母值。所以我们减去37H。
输入
第一个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 41 |
. . . | . . . |
第二个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 35 |
. . . | . . . |
第三个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 46 |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H, 8000H | 加载数字的地址 | |
F003 | 7E | MOV A, M | 将ASCII数据从内存加载到累加器 | |
F004 | FE, 58 | CPI 58H | 与ASCII(9)+1比较 | |
F006 | D2, 0E, F0 | JNC NUM | 输入为数字 | |
F009 | D6, 37 | SUI 37H | 减去偏移量以获取字母字符 | |
F00B | C3, 10, F0 | JMP STORE | 存储结果 | |
F00E | D6, 30 | NUM | SUI 30H | 减去30以获取数值 |
F010 | 23 | STORE | INX H | 指向下一个位置 |
F011 | 77 | MOV M,A | 将累加器内容存储到内存 | |
F012 | 76 | HLT | 终止程序 |
输出
第一个输出
地址 | 数据 |
---|---|
. . . | . . . |
8001 | 0A |
. . . | . . . |
第二个输出
地址 | 数据 |
---|---|
. . . | . . . |
8001 | 05 |
. . . | . . . |
第三个输出
地址 | 数据 |
---|---|
. . . | . . . |
8001 | 0F |
. . . | . . . |
广告