Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ENSAMBLADOR
1
Objetivo
El objetivo de esta práctica es elaborar un programa en ensamblador que permita evaluar la
siguiente expresión aritmética:
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:
.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
8
call ReadInt
mov vale, 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
invoke ExitProcess,0
main endp
end main
9
Capturas
Para ejecutar el programa, primero se compila con CTRL+B:
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