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。

HEX到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
将Acc加载到内存中的数据
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
.
.
.
.
.
.

更新于: 2020年6月29日

3K+ 浏览量

启动你的职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.