8085 微处理器将 16 位二进制数转换为 BCD 的程序
在这里,我们将看到一个 8085 微处理器程序。此程序将用于将 16 位二进制数据转换为 BCD 数据。
问题陈述 -
编写一个 8085 汇编语言程序,将 16 位二进制数据转换为 BCD 数据。二进制数据存储在 8000H 和 8001H 位置。
讨论 -
这个问题通过实现 16 位计数器来解决。我们首先存储 16 位数,然后逐个减少数字,并通过调整十进制值来增加十进制值。要增加值,我们可以使用 INR 指令,但 INR 指令不会影响进位标志。因此,这里我们使用 ADI 01H 将其增加 1。
二进制数取自 8000H 和 8001H 位置,最终结果存储在 8050H 到 8052H 位置。
输入
地址 | 数据 |
---|---|
… | … |
8000 | FF |
8001 | FF |
… | … |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 2A, 00, 80 | LHLD 8000H | 用 16 位数据初始化 HL | |
F003 | 11, 00, 00 | LXI D,0000H | 清除 DE 寄存器 | |
F006 | AF | XRA A | 清除 A 寄存器 | |
F007 | C6, 01 | LOOP | ADI 01H | 将 01 加到 A 中 |
F009 | 21 | DAA | 调整十进制 | |
F00A | 47 | MOV B,A | 将 A 存储到 B | |
F00B | D2, 1B, F0 | JNC SKIP | 如果 CY = 0,则转到 skip | |
F00E | 7B | MOV A,E | 将 E 加载到 A | |
F00F | C6, 01 | ADI 01H | 将 01H 加到 A 中 | |
F011 | 27 | DAA | 十进制调整 | |
F012 | 5F | MOV E,A | 从 A 获取 E | |
F013 | D2, 1B,F0 | JNC SKIP | 如果 CY = 0,则转到 skip | |
F016 | 7A | MOV A,D | 将 D 取到 A | |
F017 | C6, 01 | ADI 01H | 将 01H 加到 A 中 | |
F019 | 27 | DAA | 调整十进制 | |
F01A | 57 | MOV D,A | 将 A 加载到 D | |
F01B | 2B | SKIP | DCX H | 减少 DE |
F01C | 7C | MOV A,H | 将 H 加载到 A | |
F01D | 85 | ORA L | A 和 L 进行或运算 | |
F01E | 78 | MOV A,B | 将 B 加载到 A | |
F01F | C2, 07, F0 | JNZ LOOP | 跳转到 Loop | |
F022 | EB | XCHG | 交换 DE 和 HL | |
F023 | 22, 51, 80 | SHLD 8051H | 将 HL 内容存储到内存中 | |
F026 | 32, 50, 80 | STA 8050H | 将 A 存储到内存中 | |
F029 | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
… | … |
8050 | 35 |
8051 | 55 |
8052 | 06 |
… | … |
广告