8085程序:将两位十六进制数转换为两个ASCII值
现在让我们来看一个Intel 8085微处理器的程序。这个程序将把8位数转换为两位ASCII值。
问题陈述
编写一个8085汇编语言程序,其中一个8位二进制数存储在内存地址8050H中。将每个四位数分离出来,并将其转换为相应的ASCII码,然后将其存储到内存地址8060H和8061H中。
讨论
在这个问题中,我们使用一个子程序将一位十六进制数(四位数)转换为其等效的ASCII值。由于8位数包含两个四位数,因此我们可以执行此子程序来查找它们的ASCII值。我们可以很容易地通过屏蔽高四位数来获得低四位数,而对于高四位数,我们必须首先屏蔽低四位数,然后将寄存器内容向右旋转四次,现在我们可以将其更改为ASCII值。
这里我们将输入3AH,程序将返回33和41。这些分别是3和A的ASCII值。
输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 3A |
| . . . | . . . |
流程图

程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| 8000 | 31, 00, 81 | LXI SP, 8100 | 初始化堆栈指针 | |
| 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 |
. . . | . . . |
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP