8086 programa para hallar el factorial de un numero

Prerrequisito – Programa 8085 para encontrar el factorial de un número
Problema – Escribir un programa en lenguaje ensamblador para calcular el factorial de un número usando el microprocesador 8086

Ejemplos –

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

Suposiciones –
Dirección inicial del programa: 0400 Ubicación de
la memoria de entrada: 0500
Ubicación de la memoria de salida: 0600 y 0601

Importante:
si el número dado es un número de 16 bits, el registro AX se usa automáticamente como segundo parámetro y el producto se almacena en el par de registros DX: AX. Esto significa que el registro DX tiene la parte alta y el registro AX tiene la parte baja de un número de 32 bits.

En el microprocesador 8086, el usuario tiene instrucciones directas (MUL) para multiplicar dos números, por lo que no tenemos que sumar Multiplicando por Multiplicador como en 8085

Ventaja de 8086 sobre 8085 (en caso de Multiplicar):

  • No tiene que escribir un código voluminoso ya que 8086 tiene un código pequeño
  • Fácil de recordar
  • Ya tengo instrucción de multiplicación

Algoritmo –

  1. Ingrese el número cuyo factorial se va a encontrar y almacene ese número en el registro CX (Condición para la instrucción LOOP)
  2. Inserte 0001 en AX (Condición para instrucción MUL) y 0000 en DX
  3. Multiplique CX con AX hasta que CX se convierta en cero (0) usando la instrucción LOOP
  4. Copie el contenido de AX a la ubicación de memoria 0600
  5. Copie el contenido de DX a la ubicación de memoria 0601
  6. Detener ejecución

Programa –

DIRECCIÓN MNEMOTÉCNICA COMENTARIOS
0400 MOV CX, [0500] CX <- [0500]
0404 HACHA MOV, 0001 HACHA <- 0001
0407 MOV DX, 0000 DX <- 0000
040A MUL CX DX:AX <- AX * CX
040C BUCLE 040A Vaya a [040A] hasta CX->00
0410 MOV [0600], HACHA [0600]<-AX
0414 MOV [0601], DX [0601]<-DX
0418 HLT Detener ejecución

Explicación –

  1. MOV CX, [0500] carga el contenido de la ubicación de memoria 0500 en el registro CX
  2. MOV AX, 0001 carga el registro AX con 0001
  3. MOV DX, 0000 carga el registro DX con 0000
  4. MUL CX multiplica AX con CX y almacena el resultado en el par DX:AX
  5. LOOP 040A ejecuta el bucle hasta que CX no es igual a cero
  6. MOV [0600], AX almacena el contenido del registro AX en la ubicación de memoria 0600
  7. MOV [0601], DX almacena el contenido del registro DX en la ubicación de memoria 0601
  8. HLT detiene la ejecución del programa

Publicación traducida automáticamente

Artículo escrito por Ankit_Bisht y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *