8085微处理器中两个两位BCD数的乘法程序
在这里,我们将看到一个8085微处理器程序,该程序将找到两个BCD数的乘法结果。
问题陈述−
编写一个8085汇编语言程序来查找两个BCD数的乘积。这些数字存储在8000H和8001H位置。
讨论−
在这个程序中,数据从8000H和8001H获取。结果存储在8050H和8051H位置。
众所周知,8085没有乘法指令,因此我们必须使用重复加法的方法。在这个过程中,在每次加法之后,我们都会调整累加器的值以获得十进制等效值。当有进位时,我们就会增加MSB(最高有效位)的值。我们可以使用INR指令来递增,但这里使用ADI 01H。INR指令不会影响CY标志,因此我们需要ADI指令。
输入
第一个输入
地址 | 数据 |
---|---|
… | … |
8000 | 12 |
8001 | 20 |
… | … |
第二个输入
地址 | 数据 |
---|---|
… | … |
8000 | 27 |
8001 | 03 |
… | … |
流程图
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H,8000H | 加载第一个操作数地址 | |
F003 | 46 | MOV B,M | 将第一个操作数存储到B寄存器 | |
F004 | 23 | INX H | 增加HL寄存器对 | |
F005 | 4E | MOV C,M | 将第二个操作数存储到C寄存器 | |
F006 | 1E, 00 | MVI E, 00H | 清除E寄存器 | |
F008 | 63 | MOV H,E | 清除H寄存器 | |
F009 | 7B | MOV A,E | 清除A寄存器 | |
F00A | B9 | CMP C | 比较C和A | |
F00B | CA, 23, F0 | JZ DONE | 当Z=0时,跳转到DONE | |
F00E | 80 | LOOP: | ADD B | 将B加到A |
F00F | 27 | DAA | 十进制调整 | |
F010 | 57 | MOV D,A | 将A存储到D | |
F011 | D2, 19, F0 | JNC NINC | 跳转到NINC | |
F014 | 7C | MOV A,H | 将H存储到A | |
F015 | C6, 01 | ADI 01H | 将A增加1 | |
F017 | 27 | DAA | 十进制调整 | |
F018 | 67 | MOV H,A | 将A恢复到H | |
F019 | 7B | NINC: | MOV A,E | 将E加载到A |
F01A | C6, 01 | ADI 01H | 将A增加1 | |
F01C | 27 | DAA | 十进制调整 | |
F01D | 5F | MOV E,A | 将A恢复到E | |
F01E | B9 | CMP C | 比较C和A | |
F01F | 7A | MOV A,D | 将D加载到A | |
F020 | C2, 0E, F0 | JNZ LOOP | 跳转到LOOP | |
F023 | 6F | DONE: | MOV L,A | 将A加载到L |
F024 | 22, 50, 80 | SHLD 8050H | 将HL寄存器对存储到8050H和8051H位置 | |
F027 | 76 | HLT | 终止程序 |
输出
第一个输出
地址 | 数据 |
---|---|
… | … |
8050 | 40 |
8051 | 02 |
… | … |
第二个输出
地址 | 数据 |
---|---|
… | … |
8050 | 81 |
8051 | 00 |
… | … |
广告