乐趣区

关于asm:8086程序实现如何计算一个数字的阶乘汇编编程

先决条件 - 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. 进行执行

程序–

地址 内存 正文
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 转到 [040A] 直到 CX-> 00
0410 MOV [0600], AX [0600] <-AX
0414 MOV [0601], DX [0601] <-DX
0418 HLT 进行执行

阐明–

  1. MOV CX, [0500]将 0500 内存地位内容加载到 CX 寄存器
  2. MOV AX, 0001 用 0001 加载 AX 寄存器
  3. MOV DX, 0000 加载 DX 寄存器为 0000
  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 进行执行程序

更多汇编编程开发相干内容请参考:lsbin – IT 开发技术:https://www.lsbin.com/

查看以下更多 8085 汇编程序实现相干的内容:

  • 8085 程序减去两个带有或不带有借位的 8 位数字:https://www.lsbin.com/1641.html
  • 8085 程序查找数字的平方根:https://www.lsbin.com/1575.html
  • 8085 和 8086 微处理器之间有什么区别?:https://www.lsbin.com/3473.html
退出移动版