8085微处理器检查五选二码的程序
这里我们将看到一个8085微处理器的程序。这个程序将帮助我们检查给定的值是否为有效的五选二码。
问题陈述−
编写一个8085汇编语言程序来检查给定的数字是否为五选二码。数字存储在8000H位置。
讨论−
五选二码的检查很简单。首先,我们必须检查前三位是否为0。如果它们为0,那么我们将检查接下来的五位。如果这五位中恰好有两个1,那么它就是一个有效的五选二码。
这里,我们首先使用(1110 0000)与数字进行AND运算,如果前三位为0,则结果将为0,之后我们使用旋转操作来检查1的个数。如果进位标志被启用,则计数将增加。因此,1的总数将被反映出来。
如果数字是有效的五选二码,则此程序将把FFH存储到8050H位置,否则将把00H存储到8050H位置。
输入
第一个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 12 |
. . . | . . . |
第二个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 13 |
. . . | . . . |
第三个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 03 |
. . . | . . . |
流程图
程序−
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 3A, 00, 80 | | LDA 8000H | 从内存中加载数字 |
F003 | 67 | | MOV H,A | 将A加载到H |
F004 | 2E, 00 | MVI L,00H | 清除寄存器L | |
F006 | E6, E0 | | ANI E0H | 将累加器和11100000b进行AND运算 |
F008 | C2, 21, F0 | | JNZ DONE | 如果Z = 0,跳转到Done |
F00B | 7C | | MOV A,H | 将H加载到A |
F00C | 0E, 05 | | MVI C,05H | 将C加载为05H用于计数 |
F00E | 16, 00 | | MVI D,00H | 清除寄存器D |
F010 | 0F | LOOP | RRC | 将累加器内容向右旋转 |
F011 | D2, 15, F0 | | JNC SKIP | 如果CY = 0,跳转到skip |
F014 | 14 | | INR D | 将D增加1 |
F015 | 0D | SKIP | DCR C | 将C减1 |
F016 | 10, F0 | | JNZ LOOP | 跳转到LOOP |
F019 | 3E, 02 | | MVI A,02H | 将A初始化为02H |
F01B | BA | | CMP D | 将D与A比较 |
F01C | C2, 21, F0 | | JNZ DONE | 如果Z = 0,跳转到DONE |
F01F | 2E, FF | | MVI L,FFH | 将L加载为FFH |
F021 | 7D | DONE | MOV A,L | 将结果从L取到A |
F022 | 32, 50, 80 | | STA 8050H | 将结果存储在8050H |
F025 | 76 | | HLT | 终止程序 |
输出
第一个输出
地址 | 数据 |
---|---|
… | … |
8050 | FF |
… | … |
第二个输出
地址 | 数据 |
---|---|
… | … |
8050 | 00 |
… | … |
第三个输出
地址 | 数据 |
---|---|
… | … |
8050 | FF |
… | … |
广告