Está en la página 1de 12

REPORTE: PRÁCTICA

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
Capturas...........................................................................................................................................10
Conclusión .......................................................................................................................................11

1
Objetivo
El objetivo de esta práctica es elaborar un programa en ensamblador que permita evaluar la
siguiente expresión aritmética:

((a * (b+c)) – 2 )/ (d + (4*e – f))

Implementando la librería irvine32 para solicitar los datos al usuario.

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:

TITLE Evaluar expresión res = ((a * (b+c)) – 2 )/ (d + (4*e – f))

.386
.model flat,stdcall
.stack 4096
ExitProcess proto, dwExitCode:dword

include Irvine32.inc

.data
; variables de 32bits con registros de 32bits
res SDWORD ?
vala SDWORD ?
valb SDWORD ?
valc SDWORD ?
vald SDWORD ?
vale SDWORD ?
valf SDWORD ?
mensaje0 BYTE "Ejercicio para resolver ((a * (b+c)) - 2 )/ (d + (4*e -
f))",0dh, 0ah,0
mensaje1 BYTE "Ingresa el primer numero(vala): ",0
mensaje2 BYTE "Ingresa el segundo numero(valb): ",0
mensaje3 BYTE "Ingresa el tercer numero(c): ",0
mensaje4 BYTE "Ingresa el cuarto numero(vald): ",0
mensaje5 BYTE "Ingresa el quinto numero(vale): ",0
mensaje6 BYTE "Ingresa el sexto numero(valf): ",0
mensaje7 BYTE "El resultado de la operacion es: ",0
.code
main proc
mov edx, OFFSET mensaje0
call WriteString

mov edx, OFFSET mensaje1


call WriteString
call ReadInt
mov vala, eax

mov edx, OFFSET mensaje2


call WriteString
call ReadInt
mov valb, eax

mov edx, OFFSET mensaje3


call WriteString
call ReadInt
mov valc, eax

mov edx, OFFSET mensaje4


call WriteString
call ReadInt
mov vald, eax

mov edx, OFFSET mensaje5


call WriteString

8
call ReadInt
mov vale, eax

mov edx, OFFSET mensaje6


call WriteString
call ReadInt
mov valf, eax

;(b+c)
mov eax, valb
add eax, valc
mov valb, eax
; (a * (b+c))
mov eax, vala
imul valb
mov vala, eax
; ((a * (b+c)) – 2 )
mov eax, vala
sub eax, 2
mov vala, eax
; 4*e
mov eax, 4
imul vale
mov vale, eax
; (4*e – f)
mov eax, vale
sub eax, valf
mov vale, eax
; (d + (4*e – f)
mov eax, vald
add eax, vale
mov vald, eax
; ((a * (b+c)) – 2 )/ (d + (4*e – f))
mov eax, vala
idiv vald
mov res, eax

mov edx, OFFSET mensaje7


call WriteString
mov edx, OFFSET res
call WriteInt

invoke ExitProcess,0
main endp
end main

9
Capturas
Para ejecutar el programa, primero se compila con CTRL+B:

Luego de comprobar que la compilación fue correcta, se ejecuta con F5:

Introducimos uno a uno los 6 valores que se piden:

Como se puede observar, el valor resultado se presenta al final de la secuencia.

Otros ejemplos:

10
Conclusión
Al realizar esta práctica se comprendieron muchos conceptos en relación con el lenguaje
ensamblador, tales como las directivas, los mnemotécnicos del lenguaje, los desplazamientos y
localidades de memoria, así como conocer de manera introductoria cómo se manejan para escribir
un programa. Asimismo, se comprendió el concepto de registro de un procesador y sus distintos
tamaños, hablando también de los tipos de datos que pueden almacenar.

También gracias a la inclusión de la librería Irvine se pudo hacer uso de datos de entrada por
teclado, ampliando el panorama de conocimiento sobre el uso del lenguaje ensamblador.

Cabe mencionar que Visual Studio ofrece apoyo al momento de compilar y ensamblar el código,
utilizando el ensamblador MASM para este propósito.

11

También podría gustarte