8085程序:从数组中提取所有非00H的数据
在这里,我们将学习如何使用8085从数组中提取所有非00H的数字。
问题陈述
编写一个8085程序,从数组中提取所有非00H的数字,并将它们存储到不同的位置。数字从8001地址开始存储,8000地址存储数组大小,结果将从9000地址开始存储。
讨论
为了解决这个问题,我们从内存中读取数字,然后对数字和00H执行或运算。如果零标志被启用,则表示该数字为00,因此我们忽略它。否则,我们将其存储到正确的位置。
输入
地址 | 数据 |
---|---|
… | … |
8000 | 0A |
8001 | 45 |
8002 | 21 |
8003 | 00 |
8004 | FD |
8005 | 00 |
8006 | 00 |
8007 | 36 |
8008 | 98 |
8009 | 00 |
800A | AC |
… | … |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | | LXI H,8000 | 加载数组大小 |
F003 | 4E | | MOV C,M | 将大小存储到C |
F004 | 11, 00, 90 | | LXI D,9000 | 加载目标地址 |
F007 | 23 | LOOP: | INX H | 指向下一个位置 |
F008 | 7E | | MOV A,M | 将内存中的数字取到A |
F009 | F6, 00 | | ORI 00H | A与00H进行或运算 |
F00B | CA, 10, F0 | | JZ SKIP | 如果A为0,则跳过 |
F00E | 12 | | STAX D | 否则将A存储到DE指向的内存中 |
F00F | 13 | | INX D | 指向下一个位置 |
F010 | 0D | SKIP: | DCR C | 计数器减1 |
F011 | C2, 07, F0 | | JNZ LOOP | 如果C不为0,则跳转到LOOP |
F014 | 76 | | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
… | … |
9000 | 45 |
9001 | 21 |
9002 | FD |
9003 | 36 |
9004 | 98 |
9005 | AC |
… | … |
广告