8085程序:将8位二进制数转换为BCD码
在这个程序中,我们将学习如何将二进制数转换为其BCD等效值。
问题陈述
一个二进制数存储在800H地址。将其转换为BCD等效值并将其存储到8050H内存地址。
讨论
在这里,我们从内存中读取一个数,并将其初始化为计数器。现在,在这个计数器的每一步中,我们将数字加1,并调整十进制值。通过此过程,我们找到二进制数或十六进制数的BCD值。
我们可以使用INR指令来递增计数器,但是此指令不会影响进位标志,因此我们使用了ADI 10H。
输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 34 |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H,8000H | 初始化内存指针 | |
F003 | 16, 00 | MVI D,00H | 清零D寄存器(用于最高有效字节) | |
F005 | AF | XRA A | 清零累加器 | |
F006 | 4E | MOV C, M | 获取十六进制数据 | |
F007 | C6, 01 | LOOP: | ADI 01H | 逐个计数 |
F009 | 27 | DAA | 调整BCD计数 | |
F00A | D2, 0E, F0 | JNC SKIP | 跳转到SKIP | |
F00D | 14 | INR D | 递增D | |
F00E | 0D | SKIP: | DCR C | 递减C寄存器 |
F00F | C2, 07, F0 | JNZ LOOP | 跳转到LOOP | |
F012 | 6F | MOV L, A | 加载最低有效字节 | |
F013 | 62 | MOV H, D | 加载最高有效字节 | |
F014 | 22, 50, 80 | SHLD 8050H | 存储BCD码 | |
F017 | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | 52 |
. . . | . . . |
广告