📜  8085程序找到一个数字的阶乘

📅  最后修改于: 2021-06-28 14:39:06             🧑  作者: Mango

问题–使用8085微处理器编写一个汇编语言程序来计算数字的阶乘。

例子 –

Input : 04H
Output : 18H 
as 04*03*02*01 = 24 in decimal => 18H

数据结果存储

在8085微处理器中,不存在直接指令将两个数字相乘,因此乘法是通过重复加法完成的,因为4×3等于4 + 4 + 4(即3倍)。
在D寄存器中加载04H->添加04H 3次-> D寄存器现在包含0CH->添加0CH 2次-> D寄存器现在包含18H->加18H 1次-> D寄存器现在包含18H->输出为18H

阶乘迭代

算法 –

  1. 将数据加载到寄存器B
  2. 要开始乘法,请将D设置为01H
  3. 跳至步骤7
  4. 递减B乘以先前的数字
  5. 跳至第3步,直到B> 0的值
  6. 将内存指针指向下一个位置并存储结果
  7. 向E加载B的内容并清除累加器
  8. 重复将D的内容添加到累加器E次
  9. 将累加器内容存储到D
  10. 转到步骤4
Address Label Mnemonic Comment
2000H Data Data Byte
2001H Result Result of factorial
2002H LXI H, 2000H Load data from memory
2005H MOV B, M Load data to B register
2006H MVI D, 01H Set D register with 1
2008H FACTORIAL CALL MULTIPLY Subroutine call for multiplication
200BH DCR B Decrement B
200CH JNZ FACTORIAL Call factorial till B becomes 0
200FH INX H Increment memory
2010H MOV M, D Store result in memory
2011H HLT Halt
2100H MULTIPLY MOV E, B Transfer contents of B to C
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

解释 –

  1. 首先用数据设置寄存器B。
  2. 通过一次调用MULTIPLY子例程将寄存器D设置为数据。
  3. 通过调用MULTIPLY子例程4 * 3等于4 + 4 + 4(即3次)来减少B并将D加到自身B上。
  4. 重复上述步骤,直到B达到0,然后退出程序。
  5. 结果在存储在存储器中的D寄存器中获得