Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ENSAMBLADOR
1
Objetivo
El objetivo de esta práctica es elaborar 2 ejercicios, el primero es crear un programa que obtenga
el factorial de un número, el segundo ejercicio consiste en implementar un programa en
ensamblador que calcule la serie Fibonacci para ‘n’.
Desarrollo
Para comenzar, creamos un proyecto vacío en Visual Studio:
2
Dentro del proyecto, dando click en la solución habilitamos las dependencias necesarias:
3
Ahora accedemos a las propiedades del archivo:
4
Revisamos que el tipo de elemento esté marcado como “Microsoft Macro Assembler”:
Ahora se procede a añadir la librería Irvine para trabajar con ciertas herramientas de la misma,
para ello descargamos el archivo del siguiente enlace:
http://asmirvine.com/gettingStartedVS2019/index.htm
Una vez descargado el archivo, lo ubicamos en el disco C, quedando la ruta como C:\Irvine, como
se muestra a continuación:
5
El siguiente paso es realizar la configuración en Visual Studio para incluir la librería al proyecto,
para ello accedemos a las propiedades de la solución:
6
Posteriormente en el apartado de Vinculador > General, se agrega el path en:
7
Código
A continuación, se presenta el código a utilizar:
include Irvine32.inc
.data
mensaje1 BYTE "Ingrese un número: ",0
mensaje2 BYTE "Su factorial es: ",0
fact DWORD ?
.code
main proc
;Factorial de un número
mov edx, OFFSET mensaje1 ;preparamos el mensaje en edx
call WriteString ;presentamos el mensaje
CALL ReadInt ;el numero se almacena en eax
mov fact, eax ; copia eax en fact
mov ecx, eax ;establecemos las iteraciones
dec ecx ;decrementa ecx
ciclofact:
dec fact ;decrementa fact
mul fact ;multiplica eax*fact y el resultado se almacena en eax
loop ciclofact ;cuando el ciclo termine, eax tendrá lo acumulado
ret
main endp
end main
8
Ejercicio 2: Implemente un programa en ensamblador que calcule la serie
Fibonacci para n.
TITLE Practica2_Ensamblador
include Irvine32.inc
.data
mensaje1 BYTE "Ingrese un número: ",0
nmenos2 DWORD 0
nmenos1 DWORD 1
aux DWORD ?
.code
main proc
;Serie fibonacci
mov edx, OFFSET mensaje1 ;preparamos el mensaje en edx
call WriteString ;presentamos el mensaje
call ReadInt ;el numero se almacena en eax
fibo:
mov eax, nmenos1 ;preparamos n-1
add eax, nmenos2 ;se suma (n-1)+(n-2) y el resultado se almacena en eax
call WriteInt ;presentamos eax
9
Código completo
TITLE Practica2_Ensamblador
include Irvine32.inc
.data
mensaje1 BYTE "Ingrese un número: ",0
mensaje2 BYTE "Su factorial es: ",0
fact DWORD ?
nmenos2 DWORD 0
nmenos1 DWORD 1
aux DWORD ?
.code
main proc
;Factorial de un número
mov edx, OFFSET mensaje1 ;preparamos el mensaje en edx
call WriteString ;presentamos el mensaje
CALL ReadInt ;el numero se almacena en eax
mov fact, eax ; copia eax en fact
mov ecx, eax ;establecemos las iteraciones
dec ecx ;decrementa ecx
ciclofact:
dec fact ;decrementa fact
mul fact ;multiplica eax*fact y el resultado se almacena en eax
loop ciclofact ;cuando el ciclo termine, eax tendrá lo acumulado
;****************************************************************************
******
;Serie fibonacci
mov edx, OFFSET mensaje1 ;preparamos el mensaje en edx
call WriteString ;presentamos el mensaje
call ReadInt ;el numero se almacena en eax
fibo:
mov eax, nmenos1 ;preparamos n-1
add eax, nmenos2 ; se suma (n-1)+(n-2) y el resultado se almacena
en eax
call WriteInt ;presentamos eax
10
mov eax, aux
mov nmenos1, eax ;(n-1) pasa a ser la suma anterior
loop fibo
ret
main endp
end main
11
Conclusión
Al realizar esta práctica se aplicó lo aprendido sobre introducción de los ciclos en ensamblador,
desarrollando 2 ejercicios implentándolos, los cuales se explican a continuación.
Ejemplo1: En este ejercicio se usa el ciclo loop para realizar iteraciones cuantas veces se necesite
dependiendo del número ingresado por teclado, para calcular el factorial de este.
Ejemplo2: En este ejercicio se usa el ciclo loop para realizar iteraciones cuantas veces se necesite
dependiendo del número ingresado por teclado, para presentar por teclado los n términos de la
serie Fibonacci.
Fue muy interesante ya que se hicieron pruebas en un cuaderno para implementar los algoritmos
necesarios de los ejercicios, de esta manera se comprendió un poco más acerca del uso de los
registros tales como el eax y el ecx, éste último usado por el ciclo loop para decrementar su valor
en cada iteración.
12