问题–使用8085微处理器编写用于计算数字的n次幂的汇编语言代码。
例子 –
Input : Base=>02H
Exponent=>03H
Output :08H
在8085微处理器中,不存在直接指令将两个数字相乘,因此乘法是通过重复加法完成的,因为4 * 4等于4 + 4 + 4 + 4(即4倍)。
加载02H(基数)到寄存器B,加载03H(指数)到寄存器C->将D寄存器设置为02H->添加02H B(即2)次-> D寄存器现在包含04H->添加04H B(即2)次-> D寄存器现在包含08H->输出为08H。
算法 –
- 将基数加载到寄存器B中,然后将指数加载到寄存器C中。
- 要开始乘法,请将D设置为01H。
- 跳至步骤7。
- 减量C.
- 跳至第3步,直到C> 0的值。
- 将内存指针移到下一个位置并存储结果。
- 向E中装入B的内容并清除累加器。
- 重复将D的内容添加到累加器E次。
- 将累加器内容存储到D。
- 转到步骤4。
程序 –
Address | Label | Mnemonic | Comment |
---|---|---|---|
2000H | Base | Data Byte for base | |
2001H | Exponent | Data Byte for exponent | |
2002H | Result | Result of factorial | |
2003H | LXI H, 2000H | Load data from memory | |
2006H | MOV B, M | Load base to B register | |
2007H | INX H | Increment memory | |
2008H | MOV C, M | Load exponent to C register | |
2009H | MVI D, 01H | Set D register to 1 | |
200BH | POWER_LOOP | CALL MULTIPLY | Subroutine call for multiplication |
200EH | DCR C | Decrement C | |
200FH | JNZ POWER_LOOP | Call power_loop till C becomes 0 | |
2012H | INX H | Increment memory | |
2013H | MOV M, D | Store result in memory | |
2014H | HLT | Halt | |
2100H | MULTIPLY | MOV E, B | Transfer contents of B to E |
2101H | MVI A, 00H | Clear accumulator to store result | |
2103H | MULTIPLYLOOP | ADD D | Add contents of D to A |
2104H | DCR E | Decrement E | |
2105H | JNZ MULTIPLYLOOP | Repeated addition | |
2108H | MOV D, A | Transfer contents of A to D | |
2109H | RET | Return from subroutine |
解释 –
- 将寄存器B设置为基数,将寄存器C设置为指数。
- 通过一次调用MULTIPLY子例程将寄存器D设置为基。
- 通过调用MULTIPLY子例程,将C减1并将D加到自身B倍。
- 重复上述步骤,直到C达到0,然后退出程序。
- 结果在存储在存储器中的D寄存器中获得