8085程序检查回文
现在让我们来看一个Intel 8085微处理器的程序。这个程序将ASCII转换为二进制值。
问题陈述
编写8085汇编语言程序来检查位模式是否为回文。
讨论
在这个程序中,我们从8000H位置获取数字。如果数字不是回文,程序将返回00H;否则,将返回FFH。
例如,输入是18H,则二进制值为(0001 1000),这是一个回文。数字52H(0101 0010)不是回文。
在这个问题中,我们将第一个数字放入累加器,然后将其左移。左移时,MSB将被放置在LSB,也放在进位标志中。通过右移,将此进位标志插入D寄存器。因此,位模式将被反转,现在通过检查实际数字和反转数字的值,我们可以确定它是否为回文。
输入
第一个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | BD |
. . . | . . . |
第二个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 52 |
. . . | . . . |
第三个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 18 |
. . . | . . . |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 3A, 00, 80 | LDA 8000H | 将数字加载到A寄存器 | |
F003 | 67 | MOV H, A | 将A寄存器的内容移到H寄存器 | |
F004 | 0E, 08 | MVI C,08H | 初始化计数器 | |
F006 | 7C | LOOP: | MOV A, H | 将H寄存器的内容加载到A寄存器 |
F007 | 07 | RLC | 左移旋转 | |
F008 | 67 | MOV H, A | 将A寄存器的内容送回H寄存器 | |
F009 | 7A | MOV A, D | 将D寄存器的内容加载到A寄存器 | |
F00A | 1F | RAR | 带进位的右移旋转 | |
F00B | 57 | MOV D, A | 将A寄存器的内容送回D寄存器 | |
F00C | 0D | DCR C | C寄存器减1 | |
F00D | C2, 06, F0 | JNZ LOOP | 如果零标志为0,则跳转到LOOP | |
F010 | 7C | MOV A, H | 将H寄存器的数据加载到A寄存器 | |
F011 | BA | CMP D | 将D寄存器与A寄存器比较 | |
F012 | CA, 1A, F0 | JZ TRUE | 如果两者相同,则为回文 | |
F015 | 3E, 00 | MVI A, 00H | 将00H加载到A寄存器 | |
F017 | C3, 1C, F0 | JMP EXIT | 跳转到EXIT | |
F01A | 3E, FF | TRUE: | MVI A, FFH | 将FFH加载到A寄存器 |
F01C | 32, 50, 80 | EXIT: | STA 8050H | 将结果存储到内存中 |
F01F | 76 | HLT | 终止程序 |
输出
第一个输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | FF |
. . . | . . . |
第二个输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | 00 |
. . . | . . . |
第三个输出
地址 | 数据 |
---|---|
. . . | . . . |
8050 | FF |
. . . | . . . |
广告