问题:在8085微处理器中编写汇编语言程序,以从给定的50个数字列表中分离出奇数和偶数。从内存位置2100H开始将奇数存储在另一个列表中。从存储位置2200H开始,甚至将nos存储在另一个列表中。列表的起始地址为2000H。
例子:
解释:
如果数字的最低有效位为1,则数字为奇数,否则为偶数。因此,为了确定数字是偶数还是奇数,我们借助ANI指令对01执行AND运算。如果数字是奇数,那么我们将在累加器中得到01否则为00。 ANI指令还会影响8085的标志。因此,如果累加器包含00,则置零标志,否则将其复位。
算法:
- 将存储单元2000加载到HL寄存器对中。
- 将存储位置2100加载到DE寄存器对中以存储奇数。
- 将元素数存储在寄存器C中。
- 将列表中的下一个数字移至累加器。
- 用01H执行AND操作以检查数字是偶数还是奇数。
- 如果均匀,请跳至步骤9。
- 获取累加器中的数字,并将其存储在DE指向的存储位置中。
- 增量DE。
- 增量HL。减C.
- 如果C不为零,请跳至步骤4。
执行与上述类似的步骤来存储偶数。
程序:
Memory Location | Mneumonics | Comments |
---|---|---|
2000H | LXI H, 2000H | Initialize memory pointer 1 |
2003H | LXI D, 2100H | Initialize memory pointer 2 |
2006H | MVI C, 32H | Initialize counter |
2008H | MOV A, M | Get the number |
2009H | ANI 0lH | Check for odd number |
200BH | JZ 2011H | If EVEN, don’t store |
200EH | MOV A, M | Get the number |
200FH | STAX D | Store the number in result list |
2010H | INX D | Increment pointer 2 |
2011H | INX H | Increment pointer l |
2012H | DCR C | Decrement counter |
2013H | JNZ 2008H | If not zero, repeat |
2016H | LXI H, 2000H | Initialize memory pointer l |
2019H | LXI D, 2200H | Initialize memory pointer2 |
201CH | MVI C, 32H | Initialize counter |
201EH | MOV A, M | Get the number |
201FH | ANI 0lH | Check for even number |
2021H | JNZ 2027H | If ODD, don’t store |
2024H | MOV A, M | Get the number |
2025H | STAX D | Store the number in result list |
2026H | INX D | Increment pointer 2 |
2027H | INX H | Increment pointer l |
2028H | DCR C | Decrement counter |
2029H | JNZ 201EH | If not zero, repeat |
202CH | HLT | Stop |