8085程序反序传输数据块
在这里,我们将学习如何使用8085反序传输数据块。
问题陈述
编写8085程序,以反序传输N字节的数据块。该数据块存储在地址8001及其后续地址中,数据块大小存储在8000地址中。数据块将移动到地址9000及其后续地址中。
讨论
为了解决这个问题,我们首先获取数据块的大小。DE寄存器对设置为指向目标地址9000H。HL寄存器对设置为指向数据块的最后一个元素。如果数据块大小为0A,则最后一个块将位于800A。首先,HL指向8000,从中获取块大小并存储到C中。现在将C与L寄存器相加以获取最后一个块的地址。现在从HL指向的内存中获取每个元素,并将其存储回DE指向的内存中。然后增加DE,并减少HL。因此,整个块将反向移动。
输入
| 地址 | 数据 |
|---|---|
| … | … |
| 8000 | 0A |
| 8001 | 11 |
| 8002 | 22 |
| 8003 | 33 |
| 8004 | 44 |
| 8005 | 55 |
| 8006 | 66 |
| 8007 | 77 |
| 8008 | 88 |
| 8009 | 99 |
| 800A | AA |
| … | … |
流程图

程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | | LXI H,8000 | 指向8000以获取块大小 |
| F003 | 4E | | MOV C,M | 将块大小存入C |
| F004 | 11, 00 90 | | LXI D,9000 | 指向目标地址 |
| F007 | 7D | | MOV A,L | 将L加载到A |
| F008 | 81 | | ADD C | 将C相加以指向块的最后一个地址 |
| F009 | 6F | | MOV L,A | 将A再次存储到L |
| F00A | 7E | LOOP | MOV A,M | 将内存加载到A |
| F00B | 12 | | STAX D | 将A存储到DE指向的目标位置 |
| F00C | 13 | | INX D | 将目标指向下一个地址 |
| F00D | 2B | | DCX H | 将源指向之前的地址 |
| F00E | 0D | | DCR C | 将C减1 |
| F00F | C2, 0A, F0 | | JNZ LOOP | 如果Z标志未设置,则跳转到LOOP |
| F012 | 76 | | HLT | 终止程序 |
输出
| 地址 | 数据 |
|---|---|
| … | … |
| 9000 | AA |
| 9001 | 99 |
| 9002 | 88 |
| 9003 | 77 |
| 9004 | 66 |
| 9005 | 55 |
| 9006 | 44 |
| 9007 | 33 |
| 9008 | 22 |
| 9009 | 11 |
| … | … |
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP