8085微处理器中两个8位数的乘法程序(移位加法法)
让我们来看一个8085微处理器的问题。在这个问题中,我们将看到如何使用移位加法法(而不是加法法)来乘以两个数字。
问题陈述 −
编写一个8085汇编语言程序,使用移位加法法来乘以两个8位数。
讨论 −
移位加法法是一种高效的流程。在这个程序中,我们从内存位置8000H和8001H获取数字。16位结果存储在8050H及其后的位置。
在这个方法中,我们将第一个数字放入DE寄存器对中。实际数字放在E寄存器中,D寄存器保持00H。第二个数字被放入A寄存器中。由于数字是8位数,因此我们将累加器内容移位八次。当旋转时进位标志被设置时,DE的内容将与HL相加。最初HL对将保持0000H。然后HL也与其自身相加。这样就生成了结果。
输入
地址 | 数据 |
---|---|
… | … |
8000 | 25 |
8001 | 2A |
… | … |
流程图
程序
地址 | 十六进制代码 | 标号 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 21, 00, 80 | LXI H,8000H | 指向第一个操作数 | |
F003 | 5E | MOV E,M | 将第一个操作数加载到E | |
F004 | 16, 00 | MVI D,00H | 清零D寄存器 | |
F006 | 23 | INX H | 指向下一个位置 | |
F007 | 7E | MOV A,M | 获取下一个操作数 | |
F008 | 0E, 08 | MVI C,08H | 用08H初始化计数器 | |
F00A | 21, 00, 00 | LXI H, 0000H | 清零HL对 | |
F00D | 0F | LOOP | RRC | 将累加器内容右移 |
F00E | D2, 12, F0 | JNC SKIP | 如果进位标志为0,则跳转到SKIP | |
F011 | 19 | DAD D | 将DE与HL相加 | |
F012 | EB | SKIP | XCHG | 交换DE和HL |
F013 | 29 | DAD H | 将HL与自身相加 | |
F014 | EB | XCHG | 再次交换DE和HL的内容 | |
F015 | 0D | DCR C | 递减C寄存器 | |
F016 | C2, 0D, F0 | JNZ LOOP | 如果Z=0,则跳转到LOOP | |
F019 | 22, 50, 80 | SHLD 8050H | 存储结果 | |
F01C | 76 | HLT | 结束程序 |
输出
地址 | 数据 |
---|---|
… | … |
8050 | 12 |
8051 | 06 |
… | … |
广告