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 |
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP