8085程序交换内存中的一块字节
在这个程序中,我们将了解如何使用8085交换一块字节。
问题陈述
编写8085汇编语言程序来交换一块数据,其中块大小已知。
讨论
数据存储在地址8010H到8019H和9010H到9019H。地址8000H存储要交换的字节数。
逻辑非常简单,HL和DE寄存器对分别指向第一块和第二块数据。通过获取数据,我们只是交换每个内存位置的值。然后重复此过程以完全交换两块数据。
输入
地址 | 数据 |
---|---|
... | ... |
8000 | 06 |
... | ... |
8010 | 00 |
8011 | 11 |
8012 | 22 |
8013 | 33 |
8014 | 44 |
8015 | 55 |
... | ... |
9010 | 84 |
9011 | 63 |
9012 | 12 |
9013 | 47 |
9014 | 48 |
9015 | AD |
... | ... |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 10, 80 | LXI H, 8000H | 指向8000H获取字节计数 | |
F003 | 4E | MOV C,M | 从内存加载计数 | |
F004 | 21, 10, 80 | LXI H,8010H | 指向第一块地址 | |
F007 | 11, 10, 90 | LXI D,9010H | 指向第二块地址 | |
F00A | 46 | LOOP | MOV B, M | 将第一块的元素取到B |
F00B | 1A | LDAX D | 将第二块的元素取到累加器 | |
F00C | 77 | MOV M, A | 将累加器内容存储到第二块 | |
F00D | 78 | MOV A, B | 将B加载到A | |
F00E | 12 | STAX D | 存储到第二块 | |
F00F | 23 | INX H | 指向第一块的下一个地址 | |
F010 | 13 | INX D | 指向第二块的下一个地址 | |
F011 | 0D | DCR C | 减少计数变量 | |
F012 | C2, 0A, F0 | JNZ LOOP | 当块未完成时,跳转到LOOP | |
F015 | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
... | ... |
8010 | 84 |
8011 | 63 |
8012 | 12 |
8013 | 47 |
8014 | 48 |
8015 | AD |
... | ... |
9010 | 00 |
9011 | 11 |
9012 | 22 |
9013 | 33 |
9014 | 44 |
9015 | 55 |
... | ... |
广告