8085 微处理器将两位十六进制转换为两个ASCII值的程序
在这里,我们将看到一个 Intel 8085 微处理器的程序。使用此程序,我们可以将 8 位数字转换为两位 ASCII 值。
问题陈述−
编写一个 8085 汇编语言程序,将 8 位二进制转换为 2 个字符的 ASCII 值。8 位二进制数存储在内存位置 8050H 中。将每个四位数分离并将其转换为相应的 ASCII 代码,并将其存储到内存位置 8060H 和 8061H 中。
讨论−
在这个问题中,我们使用一个子程序将一个十六进制数字(四位数)转换为其等效的 ASCII 值。由于 8 位数字包含两个四位数,因此我们可以执行此子程序来查找它们的 ASCII 值。我们可以很容易地通过屏蔽高四位数来获得低四位数,对于高四位数,我们必须首先屏蔽低四位数,然后将寄存器内容向右旋转四次,现在我们可以将其更改为 ASCII 值。
在这里,我们将输入 3AH,程序将返回 33 和 41。这些分别是 3 和 A 的 ASCII 值。
输入
地址 | 数据 |
---|---|
… | … |
8050 | 3A |
… | … |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
8000 | 31, 00, 81 | | LXI SP, 8100 | 初始化 SP |
8003 | 21, 50, 80 | START | LXI H, 8050H | 使用输入缓冲区的第一个位置初始化指针 |
8006 | 11, 60, 80 | | LXI D, 8060H | 使用输出缓冲区的第一个位置初始化指针 |
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 | 33 |
8061 | 41 |
… | … |
广告