Está en la página 1de 13

REPORTE: PRÁCTICA 2

ENSAMBLADOR

Nombre: Morales Martínez Andrés


No. control: 18030666
Materia: Lenguajes de Interfaz
Semestre: 6º Semestre
Carrera: Ing. Sistemas Computacionales
Prof.: Rubén Torres Frías
Índice
Objetivo .............................................................................................................................................2
Desarrollo ..........................................................................................................................................2
Código ................................................................................................................................................8
Conclusión .......................................................................................................................................12

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:

Después, añadimos el archivo main.asm:

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

dando click en la siguiente parte:

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:

En el apartado de Microsoft Macro Assembler, incluimos el path en esta sección:

6
Posteriormente en el apartado de Vinculador > General, se agrega el path en:

Finalmente, en el apartado de Vinculador > Entrada, se agrega la cadena “Irvine32.lib;” al principio


de la línea del siguiente apartado:

7
Código
A continuación, se presenta el código a utilizar:

Ejercicio 1: Crear un programa que obtenga el factorial de un número


TITLE Practica2_Ensamblador

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

mov edx, OFFSET mensaje2 ;preparamos el mensaje en edx


call WriteString ;presentamos el mensaje
call WriteInt ;presenta lo que hay en eax

ret
main endp
end main

Al ejecutar el código, presenta el factorial del número ingresado:

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

mov ecx, eax ;establecemos las iteraciones


sub ecx, 2 ;restamos 2 a las iteraciones
mov eax, nmenos2
call WriteInt ;presenta el 0 en pantalla
mov eax, nmenos1
call WriteInt ;presenta el 1 en pantalla

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

mov aux, eax ; guardamos la suma en una var. auxiliar

mov eax, nmenos1


mov nmenos2, eax ;(n-2) = (n-1)

mov eax, aux


mov nmenos1, eax ;(n-1) pasa a ser la suma anterior
loop fibo
ret
main endp
end main

Vemos en pantalla los términos de la serie Fibonacci:

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

mov edx, OFFSET mensaje2 ;preparamos el mensaje en edx


call WriteString ;presentamos el mensaje
call WriteInt ;presenta lo que hay en eax

;****************************************************************************
******
;Serie fibonacci
mov edx, OFFSET mensaje1 ;preparamos el mensaje en edx
call WriteString ;presentamos el mensaje
call ReadInt ;el numero se almacena en eax

mov ecx, eax ;establecemos las iteraciones


sub ecx, 2 ;restamos 2 a las iteraciones
mov eax, nmenos2
call WriteInt ;presenta el 0 en pantalla
mov eax, nmenos1
call WriteInt ;presenta el 1 en pantalla

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

mov aux, eax ; guardamos la suma en una var. auxiliar

mov eax, nmenos1


mov nmenos2, eax ;(n-2) = (n-1)

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.

Además de ello, de manera general, se reforzaron los conocimientos acerca de la programación en


lenguaje ensamblador, como lo es el uso de tipos de variable (BYTE, WORD, etc), los tamaños
(8bits, 16bits, 32bits, etc.) y los registros (AL, AH, AX, AEX, etc.)., asimismo, se siguieron
implementado algunos procedimientos que ofrece la librería Irvine en esta práctica.

12

También podría gustarte