8085程序:加两个多字节BCD数


现在让我们来看一个Intel 8085微处理器的程序。这个程序主要用于添加多位BCD(二进制编码的十进制)数。

问题陈述

编写8085汇编语言程序,以添加两个多字节BCD(二进制编码的十进制)数。

讨论

我们使用4字节BCD数。这些数字存储在内存位置8501H和8505H中。一个额外的信息存储在位置8500H。在这里,我们存储字节计数。结果存储在位置85F0H。

HL对存储第一个操作数的字节地址,DE存储第二个操作数的字节地址。C保存字节计数。我们使用堆栈来存储结果的中间字节。在加法运算完成后,我们从堆栈中弹出并存储到目标位置。

输入

地址
数据
.
.
.
.
.
.
8500
04
8501
19
8502
68
8503
12
8504
85
8505
88
8506
25
8507
17
8508
20
.
.
.
.
.
.

流程图

程序

地址
十六进制代码
标签
助记符
注释
F000
31,00, 20


LXI SP, 2000H
初始化堆栈指针
F003
21,00, 85


LXI H,8500H
加载内存地址以获取字节计数
F006
4E


MOV C,M
将内存内容加载到C寄存器
F007
06,00


MVI B,00H
清除B寄存器
F009
21,01, 85


LXI H, 8501H
加载第一个参数地址
F00C
11,05, 85


LXI D, 8505H
加载第二个参数地址
F00F
1A
LOOP
LDAX D
将DE与第二个操作数地址加载
F010
8E


ADC M
将内存内容和进位与累加器相加
F011
27


DAA
对累加器内容进行十进制调整
F012
F5


PUSH PSW
将累加器内容存储到堆栈中
F013
4


INR B
将B增加1后压入堆栈
F014
23


INX H
增加HL对以指向下一个地址
F015
13


INX D
增加DE对以指向下一个地址
F016
0D


DCR C
减少C,直到所有字节都未用尽
F017
C2,0F, F0


JNZ LOOP
当字节未被考虑时,再次循环
F01A
D2,21, F0


JNC SKIP
当进位=0时,跳转到存储
F01D
3E,01


MVIA, 01H
当进位=1时,将其压入堆栈
F01F
F5


PUSH PSW
将累加器内容存储到堆栈中
F020
04


INR B
将B增加1后压入堆栈
F021
21,F0, 85
SKIP
LXIH, 85F0H
加载目标指针
F024
F1
L1
POP PSW
弹出AF以从堆栈中取回字节
F025
77


MOV M, A
将累加器数据存储在HL指向的内存位置
F026
23


INX H
增加HL对以指向下一个地址
F027
05


DCR B
减少B
F028
C2,24, F0


JNZ L1
转到L1以存储堆栈内容
F02B
76


HLT
终止程序


输出

地址
数据
.
.
.
.
.
.
85F0
01
85F1
05
85F2
29
85F3
94
85F4
07
.
.
.
.
.
.

更新于: 2020年6月26日

1K+ 浏览量

启动你的职业生涯

通过完成课程获得认证

开始
广告