8085程序:求N个字单元内容之和


现在让我们来看一个Intel 8085微处理器的程序。在这个程序中,我们将看到如何添加N个字单元的内容。

问题陈述:

编写8085汇编语言程序,将存储在内存中的N个16位数相加。

讨论:

16位数字存储在内存地址8001H开始的位置。N的值存储在8000H位置。相加后,结果将存储在8050H开始的位置。

在8085中,寄存器的数量有限。因此我们将计数存储到内存中,当我们需要更新它时,我们将从内存中获取它,更新它,然后再次将其存储到内存中。

这里16位数字存储在DE和HL地址中,使用DAD指令将它们相加。

输入:

第一个输入

地址
数据
.
.
.
.
.
.
8000
03
8001
34
8002
12
8003
78
8004
56
8005
BC
8006
9A


.
.
.
.
.
.

流程图:

程序:

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

LXI SP,C000H
初始化堆栈指针
F003
21, 00, 00

LXI H,0000H
清零HL寄存器对
F006
22, 52, 80

SHLD 8052H
将HL内容存储到8052H和8053H
F009
01, 00, 80

LXI B,8000H
指向地址以获取数字计数
F00C
0A

LDAX B
将计数加载到累加器
F00D
32, 00, 90

STA 9000H
临时存储累加器内容
F010
03
LOOP:
INX B
指向获取低位字节
F011
0A

LDAX B
用内存内容加载累加器
F012
5F

MOV E,A
将累加器内容存储到E
F013
03

INX B
指向获取高位字节
F014
0A

LDAX B
用内存内容加载累加器
F015
57

MOV D,A
将累加器内容存储到D
F016
19

DAD D
将DE与HL相加
F017
D2, 23, F0

JNC SKIP
如果CY=0,则跳转到SKIP
F01A
E5

PUSH H
将HL内容压入堆栈
F01B
2A, 52, 80

LHLD 8052H
用8052H和8253H的内容加载HL
F01E
23

INX H
增加HL内容
F01F
22, 52, 80

SHLD 8052H
将HL内容存储到8052H和8053H
F022
E1

POP H
从堆栈中取回HL内容
F023
3A, 00, 90
SKIP:
LDA 9000H
加载临时存储的数据
F026
3D

DCR A
将A减1
F027
32, 00, 90

STA 9000H
存储更新后的值
F02A
C2, 10, F0

JNZ LOOP
如果Z=0,则跳转到LOOP
F02D
22, 50, 80

SHLD 8050H
将HL内容存储到8050H和8051H
F030
76

HLT
结束程序

输出:

第一个输出

地址
数据
.
.
.
.
.
.
8050
68
8051
03
8052
01
8053
00
.
.
.
.
.
.

更新于:2019年7月30日

213 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告