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
.
.
.
.
.
.


更新于: 2019-07-30

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告