8085程序用于计算给定8位数中1的个数
在这个程序中,我们将看到如何计算8位数中1的个数。
问题陈述
编写8085汇编语言程序,计算存储在8000H位置的8位数中1的个数。
讨论
在这个程序中,我们使用旋转操作来计算1的个数。由于8位数有8个不同的位,因此我们将数字旋转8次。我们可以使用RRC或RLC。这里我们使用了RRC指令。此指令将LSb发送到MSb以及进位标志。因此,在每次迭代之后,我们可以检查进位状态以获得1的计数。
如果数字是DA(11011010),则答案将是5,因为数字中有五个1。
输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | DA |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 37 | STC | 设置进位 | |
F001 | 3F | CMC | 补码进位 | |
F002 | 3A, 00, 80 | LDA 8000H | 将数字加载到A | |
F005 | 0E, 08 | MVI C,08H | 将计数器初始化为08H | |
F007 | 06, 00 | MVI B,00H | 清空B寄存器 | |
F009 | 0F | LOOP | RRC | 右移 |
F00A | D2, 0E, F0 | JNC SKIP | 如果CY = 0,则跳过下一步 | |
F00D | 04 | INR B | 如果CY = 1,则增加B | |
F00E | 0D | SKIP | DCR C | 将C减1 |
F00F | C2, 09, F0 | JNZ LOOP | 如果Z = 0,则跳转到循环 | |
F012 | 78 | MOV A,B | 将计数加载到A | |
F013 | 32, 50, 80 | STA 8050H | 将结果存储在8050H | |
F016 | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | 05 |
. . . | . . . |
广告