Programas con Uso de librerías en Ensamblador
Para facilitar la programación, hay algunas funciones comunes que pueden incluirse en su programa. Para hacer que su programa utilice funciones definidas en otro archivo, debe usar la directiva INCLUDE seguida de un nombre de archivo. El compilador busca automáticamente el archivo en la misma carpeta donde se encuentra el archivo de origen, y si no puede encontrar el archivo allí, busca en la carpeta Inc.
Para usar cualquiera de las funciones en emu8086.inc, debe tener la siguiente línea al comienzo de su archivo fuente:
include 'emu8086.inc'
Referencias externas al módulo:
Son imprescindibles si se hace un programa en alto nivel con procedimientos en assembler. Hay tres: PUBLIC, EXTRN e INCLUDE.
PUBLIC nombre[, nombre...]: Estos nombres simbólicos se escriben en el archivo objeto. Durante una sesión con el linker, los símbolos en diferentes módulos pero con los mismos nombres tendrán la misma dirección.
EXTRN nombre:tipo [,nombre:tipo...]: Define una variable externa con el nombre y tipo (NEAR, FAR, BYTE, WORD, DWORD o ABS (número constante especificado con la directiva EQU o =)) especificado. El tipo debe ser el mismo que el del ítem indicado con la directiva PUBLIC en otro módulo.
INCLUDE nombre_de_archivo: Ensambla las sentencias indicadas en dicho archivo.
emu8086.inc define las siguientes macros :
PRINT string - macro con 1 parámetro, imprime una cadena.
PRINTN string - macro con 1 parámetro, imprime una cadena. Lo mismo que PRINT pero agrega automáticamente "retorno de carro" al final de la cadena.
PUTC char - macro con 1 parámetro, imprime un carácter ASCII en la posición actual del cursor.
GOTOXY col, fila - macro con 2 parámetros, establece la posición del cursor.
CURSOROFF - apaga el cursor de texto.
CURSORON - enciende el cursor de texto.
Ensamblador: Suma de dos números
;include para añadir librerias http://jbwyatt.com/253/emu/asm_tutorial_05.html
;gmo name 'Suma de dos numeros' include 'emu8086.inc' ;nombre del programa org 100h ;agregamos libreria emu8086.inc .data ;se abre el bloque de datos suma db 2 dup (?) ;arreglo suma de 2 espacios(byte) .code ;directiva indica la continuacion del prog Sumas proc ;proceso Sumas printn " " print "Introduce el primer numero ==>" call scan_num ;recibe los valores mov suma[0], cl;recibe de scan_num cl y se mandan a las posiciones del arreglo printn " " print "Introduce el segundo numero ==>" call scan_num mov suma[1], cl printn " " xor ax, ax ;limpia el registro ax add al, suma[0] ;manda la suma al registro al para poder imprimir con print_num add al, suma[1] printn " " print "La suma es: " call print_num Sumas endp exit: ;etiqueta salir print "" printn "" print "Presiona enter para salir... " mov ah, 0 ;termina el programa int 16h ret define_print_string ;comando definido emu8086.inc define_print_num define_print_num_uns define_scan_num endResultado:
La suma de los valores 12 y 7 decimal da 19. Como se puede ver se guarda en el registro "ax" como 13 equivalente en hexadecimal.
Referencia:
No hay comentarios:
Publicar un comentario