Está en la página 1de 15

REPORTE: EJEMPLOS DE LA

LIBRERÍA IRVINE32

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 investigar e implementar 8 ejercicios utilizando diferentes
procedimientos incluidos en la libreria Irvine32.

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:

Ejemplo 1: Crear un archivo cualquiera


.data
filename byte "archivo.txt", 0

.code
; Ejemplo1: Crear un archivo de nombre con lo que hay en edx
mov edx, offset filename ;El parámetro requerido es el nombre del archivo
almacenado como variable en el registro edx
call CreateOutputFile

Al ejecutar el código, crea un archivo en el directorio del proyecto:

Ejemplo 2: Obtener el número de columnas y filas de la consola


.data
rows byte ?
cols byte ?

.code
; Ejemplo2: Obtener el numero de columnas y filas de la consola
call GetMaxXY ;No requiere parámetros
mov rows, dh
mov cols, dl

Vemos los valores de las variables en el inspector:

8
Ejemplo 3: Mover el puntero de consola a una posición determinada
.code
; Ejemplo3: Mover el puntero de consola a una posicion determinada
mov dh, 20
mov dl, 20
call Gotoxy ;Requiere 2 parámetros: el valor de x almacenado en el
registro dl y el parámetro y almacenado en dh.

Al ejecutar el código, en consola se mueve el puntero a la posición (20,20):

20

20

Ejemplo 4: Obtener un número aleatorio


.data
ranNum DWORD ?
.code
; Ejemplo4: Genera un numero entero de 32bits
call Randomize ; Se prepara el proceso de aleatorizar
mov eax, 4000 ;se establece el rango entre 0-3999
call RandomRange ;Genera el número aleatorio
mov ranNum, eax ;Almacena el numero en una variable

El procedimiento genera un número aleatorio entre 0 y 3999.

9
Ejemplo 5: Obtener el número de caracteres de un string
.data
buffer byte "abcdefg", 0
bufLength dword ?
; Ejemplo5: Obtener el tamaño de un string
INVOKE Str_length, ADDR buffer ;El procedimiento requiere la cadena
mov bufLength, eax ;El tamaño se almacena en eax

El procedimiento retorna el número de caracteres de la cadena.

Ejemplo 6: Hacer un delay por 3 segundos


.data
message2 BYTE "Hola",0
message BYTE "Han pasado 3 segundos :)",0
.code
; Ejemplo6: Hacer un delay por 3 segundos
mov eax,3000 ; 3 second
call Delay
mov edx,OFFSET message
mov ebx,OFFSET message2
call MsgBox

Al ejecutar, pasan 3 segundos y se presenta el MsgBox con el mensaje:

Ejemplo 7: Copiar el valor de una cadena de una variable a otra


.data
source BYTE "hello",0ah,0dh,0
target BYTE SIZEOF source DUP (?)
.code
; Ejemplo7: Copia una cadena de una variable a otra
INVOKE Str_copy,
ADDR source,
ADDR target ;Requiere 2 params. La variable fuente y destino
mov edx,OFFSET source
call WriteString
mov edx,OFFSET target
call WriteString

10
Al presentar por pantalla el valor de ambas variables, dichos valores ahora son equivalentes.

Ejemplo 8: Convertir una cadena de minúsculas a mayúsculas


.data
source BYTE "hello",0ah,0dh,0
.code
; Ejemplo8: Convertir una cadena en mayúsculas
mov edx,OFFSET source
call WriteString
INVOKE Str_ucase, ADDR source ;requiere sólo la cadena a convertir
mov edx,OFFSET source
call WriteString

Al presentar por pantalla la cadena, antes de hacer la conversión, sus caracteres son minúsculas,
después de la conversión, serán mayúsculas.

11
Código completo
TITLE Ejemplos de procedimientos con Irvine32

include Irvine32.inc

.data
filename byte "archivo.txt", 0

rows byte ?
cols byte ?

ranNum DWORD ?

buffer BYTE "abcdefg", 0


bufLength dword ?

message2 BYTE "Hola",0


message BYTE "Han pasado 3 segundos :)",0

source BYTE "hello",0ah,0dh,0


target BYTE SIZEOF source DUP (?)
.code
main proc

; Ejemplo1: Crear un archivo de nombre con lo que hay en edx


;mov edx, offset filename ;El parámetro requerido es el nombre del archivo
almacenado como variable en el registro edx
;call CreateOutputFile

; Ejemplo2: Obtener las dimensiones de la


;call GetMaxXY
;mov rows, dh
;mov cols, dl

; Ejemplo3: Mover el puntero de consola a una posicion determinada


;mov dh, 20
;mov dl, 20
;call Gotoxy

; Ejemplo4: Genera un numero entero de 32bits


;call Randomize ; Se prepara el proceso de aleatorizar
;mov eax, 4000 ;se establece el rango entre 0-3999
;call RandomRange ;Genera el número aleatorio
;mov ranNum, eax ;Almacena el numero en una variable

; Ejemplo5: Obtener el tamaño de un string


;INVOKE Str_length, ADDR buffer
;mov bufLength, eax

; Ejemplo6: Hacer un delay por 3 segundos


;mov eax,3000 ; 3 second
;call Delay
;mov edx,OFFSET message
;mov ebx,OFFSET message2
;call MsgBox

12
; Ejemplo7: Copia una cadena de una variable a otra
;INVOKE Str_copy,
; ADDR source,
; ADDR target ;Requiere 2 params. La variable fuente y destino
;mov edx,OFFSET source
;call WriteString
;mov edx,OFFSET target
;call WriteString

; Ejemplo8: Convertir una cadena en mayúsculas


;mov edx,OFFSET source
;call WriteString
;INVOKE Str_ucase, ADDR source ;requiere sólo la cadena a convertir
;mov edx,OFFSET source
;call WriteString

ret
main endp
end main

13
Conclusión
Al realizar esta práctica se comprendieron algunos procedimientos que incluye la librería Irvine32,
los cuales se explican a continuación.

Ejemplo1: En este ejercicio se usa el procedimiento CreateOutputFile para crear un archivo con el
valor string que tenga la variable que se pase por parámetro en el registro edx.

Ejemplo2: En este ejercicio se usa el procedimiento GetMaxXY para obtener el número de filas y
columnas de la ventana de consola, no necesita parámetros.

Ejemplo 3: En este ejercicio se usa el procedimiento GoToXY para reubicar el puntero de la consola
a una posición determinada, se requieren 2 parámetros: el valor de ‘X’ almacenado en el registro
dl y el parámetro ‘Y’ almacenado en dh.

Ejemplo 4: En este ejercicio se usa el procedimiento Randomize y RandomRange para generar un


número aleatorio en un determinado rango, necesita un parámetro que es el valor máximo ‘n’ que
tendrá el rango, el cual va de 0 a (n-1), dicho parámetro se almacena en eax.

Ejemplo 5: En este ejercicio se usa el procedimiento Str_Length para obtener el número de


caracteres de una cadena, este es el único parámetro que se otorga después de la directiva ADDR
cadena.

Ejemplo 6: En este ejercicio se usa el procedimiento Delay para detener la ejecución durante ‘n’
milisegundos, este único parámetro se almacenará en eax.

Ejemplo 7: En este ejercicio se usa el procedimiento Str_copy, el cual copia el valor del string de
una variable a otra, se ocupan dos parámetros, la variable fuente y la variable destino,
especificadas después de la directica ADDR source, ADDR target.

Ejemplo 8: En este ejercicio se usa el procedimiento Str_ucase el cual transforma una cadena de
minúsculas a mayúsculas, necesita un solo parámetro: la cadena a convertir, el cual se especifica
des pues de la directiva ADDR source.

Fue muy interesante conocer los procedimientos que ofrece la librería irvine32, se realizaron
varias búsquedas en internet adicionales, ya que la documentación oficial de la librería Irvine está
incompleta o desactualizada, sin embargo, conocí las dos formas de llamar a los procedimientos
las cuales se hacen mediante CALL e INVOKE, en esta última se pueden especificar los parámetros
que recibirá el procedimiento mediante ADDR.

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.).

14

También podría gustarte