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

📅  最后修改于: 2021-06-28 09:08:24             🧑  作者: Mango

先决条件–找到一个数字的阶乘的8085程序
问题–编写一个汇编语言程序,以使用8086微处理器来计算数字的阶乘

例子 –

Input : 04H
Output : 18H
as In Decimal : 4*3*2*1 = 24
   In Hexadecimal : 24 = 18H

Input : 06H
Output : 02D0H
as In Decimal : 6*5*4*3*2*1 = 720
   In Hexadecimal : 720 = 02D0H

假设–
程序的起始地址:0400
输入存储器位置:0500
输出存储器位置:0600和0601

重要的 –
如果给定数字是16位数字,则AX寄存器将自动用作第二个参数,并且乘积将存储在DX:AX寄存器对中。这意味着DX寄存器保留32位数字的高位,而AX寄存器保留32位数字的低位。

在8086微处理器中,用户具有直接指令(MUL)将两个数字相乘,因此我们不必像8085中那样将乘数乘以乘数

8086相对于8085的优势(如果是乘法):

  • 无需编写庞大的代码,因为8086的代码很小
  • 容易记住
  • 已经有乘法指令

算法 –

  1. 输入要查找其阶乘的编号,并将该编号存储在CX寄存器中(LOOP指令的条件)
  2. 在AX(MUL指令的条件)中插入0001,在DX中插入0000
  3. 使用LOOP指令将CX与AX相乘,直到CX变为零(0)
  4. 将AX的内容复制到内存位置0600
  5. 将DX的内容复制到内存位置0601
  6. 停止执行

程序 –

ADDRESS MNEMONICS COMMENTS
0400 MOV CX, [0500] CX <- [0500]
0404 MOV AX, 0001 AX <- 0001
0407 MOV DX, 0000 DX <- 0000
040A MUL CX DX:AX <- AX * CX
040C LOOP 040A Go To [040A] till CX->00
0410 MOV [0600], AX [0600]<-AX
0414 MOV [0601], DX [0601]<-DX
0418 HLT Stop Execution

解释 –

  1. MOV CX,[0500]将0500内存位置内容加载到CX寄存器
  2. MOV AX,0001将0001装入AX寄存器
  3. MOV DX,0000用0000加载DX寄存器
  4. MUL CX将AX与CX相乘并将结果存储在DX:AX对中
  5. LOOP 040A循环运行,直到CX不等于零
  6. MOV [0600],AX将AX寄存器内容存储到内存位置0600
  7. MOV [0601],DX将DX寄存器的内容存储到内存位置0601
  8. HLT停止执行程序