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