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 –
- 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)
- Inserte 0001 en AX (Condición para instrucción MUL) y 0000 en DX
- Multiplique CX con AX hasta que CX se convierta en cero (0) usando la instrucción LOOP
- Copie el contenido de AX a la ubicación de memoria 0600
- Copie el contenido de DX a la ubicación de memoria 0601
- 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 –
- MOV CX, [0500] carga el contenido de la ubicación de memoria 0500 en el registro CX
- MOV AX, 0001 carga el registro AX con 0001
- MOV DX, 0000 carga el registro DX con 0000
- MUL CX multiplica AX con CX y almacena el resultado en el par DX:AX
- LOOP 040A ejecuta el bucle hasta que CX no es igual a cero
- MOV [0600], AX almacena el contenido del registro AX en la ubicación de memoria 0600
- MOV [0601], DX almacena el contenido del registro DX en la ubicación de memoria 0601
- 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