8085程序将8位BCD数转换为ASCII码
现在让我们来看一个Intel 8085微处理器的程序。此程序将把8位BCD数转换为两位ASCII值。
问题陈述
编写8085汇编语言程序,其中一个8位BCD数存储在内存位置8050H中。将每个BCD数字分开并将其转换为相应的ASCII码,并将其存储到内存位置8060H和8061H中。
讨论
在这个问题中,我们使用一个子程序将一个BCD数字(半字节)转换为其等效的ASCII值。由于8位BCD数包含两个半字节,因此我们可以执行此子程序以找到它们的ASCII值。我们可以通过屏蔽高半字节很容易地获得低半字节,对于高半字节,我们首先必须屏蔽低半字节,然后将寄存器内容向右旋转四次,现在我们可以将其更改为ASCII值。
这里我们将输入26H,程序将返回32和36。它们分别是2和6的ASCII值。
注意:此程序也可以将8位二进制数转换为ASCII值。
输入
地址 | 数据 |
---|---|
. . . | . . . |
8050 | 26 |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
8000 | 31, 00, 81 | LXI SP, 8100 | 初始化SP | |
8003 | 21, 50, 80 | START | LXI H, 8050H | 用IN-BUFFER的第一个位置初始化指针 |
8006 | 11, 60, 80 | LXI D, 8060H | 用OUT-BUFFER的第一个位置初始化指针 | |
8009 | 7E | MOV A, M | 将8050H的内容移动到A | |
800A | 47 | MOV B, A | 将A复制到B | |
800B | 0F | RRC | 将累加器向右旋转4次 | |
800C | 0F | RRC | ||
800D | 0F | RRC | ||
800E | 0F | RRC | ||
800F | CD, 1A, 80 | CALL ASCII | 此子程序将二进制数转换为ASCII | |
8012 | 12 | STAX D | 存储累加器指定的内容由DE寄存器对指定的内容 | |
8013 | 13 | INX D | 转到下一个位置 | |
8014 | 78 | MOV A, B | 将B复制到A | |
8015 | CD, 1A, 80 | CALL ASCII | 此子程序将二进制数转换为ASCII | |
8018 | 12 | STAX D | 存储累加器指定的内容由DE寄存器对指定的内容 | |
8019 | 76 | HLT | 终止程序 | |
801A | E6, 0F | ASCII | ANI 0FH | 将BCD数转换为其相应的ASCII值 + 48 0到9 -----------------à48到57 + 55 A到F -----------------à 65到70 + 48 +7 所以+48是通用的,但如果十六进制数字在A到F之间,则额外增加+7。 |
801C | FE, 0A | CPI 0AH | ||
801E | DA, 23, 80 | JC CODE | ||
8021 | C6, 07 | ADI 07H | ||
8023 | C6, 30 | CODE | ADI 30H | |
8025 | C9 | RET | 将控制权返回给调用程序 |
输出
地址 | 数据 |
---|---|
. . . | . . . |
8060 | 32 |
8061 | 36 |
. . . | . . . |
广告