8085程序检查五位二码
现在让我们来看一个英特尔8085微处理器的程序。这个程序将帮助我们检查给定的值是否为有效的五位二码。
问题陈述:
编写8085汇编语言程序以检查给定数字是否为五位二码。该数字存储在8000H位置。
讨论:
五位二码的检查很简单。首先,我们必须检查高三位是否为0。如果它们为0,那么我们将检查接下来的五位。如果这5位中恰好有两个1,则它是一个有效的五位二码。
这里首先我们将数字与(1110 0000)进行与运算,如果前三位为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进行与运算 | |
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 |
. . . | . . . |
广告