8085 带重叠的块移动


在这个程序中,我们将学习如何将数据块从一个位置移动到另一个位置。

问题陈述

编写 8085 汇编语言程序来移动数据块。假设这些块是重叠的。块大小已给出,块从 X 开始,我们必须将其移动到 Y 位置。

讨论

重叠块的移动比较棘手;我们需要使用一些特殊的技巧来移动重叠地址位置中的块。这里块从 X 位置开始,我们必须将其移动到 Y 位置。Y 位置在块内。因此 Y < X + 块大小。

在这个程序中,数据存储在 8010H 位置,我们将将其放置在 8014H。块大小存储在 8000H 位置。

为了将块移动到一些重叠的位置,我们将从块的末尾元素开始。所以首先移动块的最后一个元素,然后移动前面的字节。

输入

地址
数据
.
.
.
.
.
.
8000
07
.
.
.
.
.
.
8010
11
8011
22
8012
33
8013
44
8014
55
8015
66
8016
77
.
.
.
.
.
.

流程图

程序

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


LXI H, 8000H
加载查找块大小的位置
F003
4E


MOV C, M
将块大小存储到 C 寄存器
F004
06, 00


MVI B,00H
清除 B 寄存器
F006
21,10, 80


LXI H,8010H
将源地址加载到 HL 对
F009
11, 14, 80


LXI D, 8014H
将目标地址加载到 DE 对
F00C
09


DAD B
将 BC 与 HL 相加,指向源块末尾的下一个位置
F00D
2B


DCX H
指向最后一个元素
F00E
EB


XCHG
交换 DE 和 HL 对的内容
F00F
09


DAD B
将 BC 与 HL 相加,指向目标块末尾的下一个位置
F010
2B


DCX H
指向最后一个元素
F011
EB


XCHG
交换 DE 和 HL 对的内容
F012
7E
LOOP
MOV A, M
将内存元素加载到累加器
F013
12


STAX D
将累加器内容存储到 D 指向的内存中
F014
1B


DCX D
减小 DE 寄存器对
F015
2B


DCX H
减小 HL 寄存器对
F016
0D


DCR C
减小 C 寄存器
F017
C2, 12, F0


JNZ LOOP
跳转到循环
F01A
76


HLT
终止程序


输出

地址
数据
.
.
.
.
.
.
8000
07
.
.
.
.
.
.
8010
11
8011
22
8012
33
8013
44
8014
11
8015
22
8016
33
8017
44
8018
55
8019
66
801A
77

更新于:2020年6月27日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.