8085程序:查找两个二进制模式之间的位差异。
我们将学习如何使用8085查找两个二进制模式的位差异。
问题陈述
两个二进制模式存储在8030H和8031H位置。将它们加载到寄存器A和B中。找出位不同的位置,并将这些位置编号从8050H开始存储到内存中。(在A为0且B为1的位置,位不同)
讨论
为了解决这个问题,我们将数字放入A和B中。然后用08H初始化C作为计数器,寄存器L将跟踪A为1且B为0的位位置。通过旋转数字并通过进位标志,我们可以检查这些条件。假设我们放入B5H(1011 0101)和E6H(1110 0110),那么我们可以看到D1和D6位置不同。所以我们将1和6存储到内存中。
输入
地址 | 数据 |
---|---|
… | … |
8030 | B5 |
8031 | E6 |
… | … |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
8000 | 21, 30, 80 | START | LXI H,8030H | 初始化指向输入缓冲区的指针 |
8003 | 11, 50, 80 | | LXI D,8050H | 初始化指向输出缓冲区的指针 |
8006 | 7E | | MOV A, M | 从输入缓冲区读取数据并存储到寄存器A和B |
8007 | 23 | | INX H | |
8008 | 46 | | MOV B, M | |
8009 | 0E, 08 | | MVI C, 08H | 将计数器初始化为8 |
800B | 2E, 00 | | MVI L, 00H | 使用寄存器L跟踪位位置 |
800D | 1F | LOOP | RAR | 将累加器右移到进位标志 |
800E | DA, 1C, 80 | | JC CHECK | 检查D7位是开还是关 |
8011 | 67 | | MOV H, A | 寄存器H临时保存寄存器A的内容 |
8012 | 78 | | MOV A, B | 寄存器B的D7位被放入进位标志 |
8013 | 1F | | RAR | |
8014 | 47 | | MOV B, A | 将A复制到B |
8015 | 7C | DCRM | MOV A, H | 将H复制到A |
8016 | 2C | | INR L | 将位位置加1 |
8017 | 0D | | DCR C | 递减计数器,直到达到0 |
8018 | C2, 0D, 80 | | JNZ LOOP | |
801B | 76 | | HLT | 终止程序 |
801C | 67 | CHECK | MOV H, A | 寄存器H临时保存寄存器A的内容 |
801D | 78 | | MOV A, B | 寄存器B的D7位被放入进位标志 |
801E | 1F | | RAR | |
801F | D2, 26, 80 | | JNC WRITE | 检查进位标志是否设置 |
8022 | 47 | | MOV B, A | 将A复制到B |
8023 | C3, 15, 80 | | JMP DCRM | 无条件跳转 |
8026 | 47 | WRITE | MOV B, A | 匹配的位模式位置被 写入输出缓冲区 |
8027 | 7D | | MOV A, L | |
8028 | 12 | | STAX D | |
8029 | 13 | | INX D | 转到下一个位置 |
802A | C3, 15, 80 | | JMP DCRM | 无条件跳转 |
输出
地址 | 数据 |
---|---|
… | … |
8050 | 01 |
8051 | 06 |
… | … |
广告