Referencias externas al módulo
Sirve para poder particionar un programa en varios archivos fuentes o módulos. 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.
Para facilitar la programación, hay algunas funciones comunes que pueden incluirse en un programa. Para hacer que nuestros programas usen funciones definidas en otro archivo, debe usar INCLUDE seguido 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'
emu8086.inc define las siguientes macros:
- PUTC char: imprime un solo caracter
- GOTOXY col, row: coloca el cursor en las coordenadas solicitadas
- PRINT string: Imprime una cadena
- PRINTN string: Imprime una cadena y tras imprimirla hace un salto de linea.
Veamos unos ejemplos prácticos:
Este código fue tomado del siguiente vídeo:
Codigo:
name "suma de dos numeros" include "emu8086.inc" org 100h .data suma db 2 dup (?) .code sumas proc print " Introduce el primer numero: " call scan_num mov suma[0],cl printn " " print " Introduce el segundo numero: " call scan_num mov suma[1],cl xor ax,ax add al,suma[0] add al,suma[1] printn " " print " La suma es: " call print_num sumas endp exit: print " " printn " " print "Presiona enter para salir..." mov ah,0 ;servicio de pulsación de teclado int 16h ;invoca a servicios de taclado ret define_print_string define_print_num define_print_num_uns define_scan_num end
Resultado:
El siguiente programa compara la cantidad de años de una persona avisando si eres mayor o menor de edad.
Codigo:
.model small .stack .data include "emu8086.inc" num1 db 0; variable para la edad .code inicio proc far ;poner el primer letrero print " Ingrese su edad: " ;lectura del valor call scan_num mov num1,cl ;lectura segundo valor xor ax,ax mov al,num1 cmp al,18d ;Si lo que se encuentra en al>18 JGE mayor ;salta a mayor JMP menor ;sino ve a menor mayor: printn " " print "Eres mayor de edad" jmp final menor: printn " " print "Eres menor de edad" jmp final final: print " " printn " " print "Presiona enter para salir..." mov ah,0 ;servicios de lectura de una pulsación de teclado int 16h ;Invoca a servicios de teclado mov ah,4ch int 21h ret define_print_string define_print_num define_print_num_uns define_scan_num endp inicio end
Resultado:
El siguiente programa nos permitirá algo similar al anterior, sin embargo, nos permitirá mostrar si hemos aprobado o reprobado una asignatura en base a una calificación.
Usaremos en este caso gotoxy en este programa:
.MODEL SMALL .STACK 64 .DATA include "emu8086.inc" nota db 0 .CODE OPERACIONES PROC FAR ;DECLARACION DE PROCEDIMIENTO ;MUESTRO EL MENSAJE print " " print "Ingrese la calificacion: " call scan_num ;Leo el numero mov nota,cl ;lo guardo en nota xor ax,ax ;borro el contenido de ax mov al,nota ;muevo nota a al CMP AL,70d ;comparo al con 70 JGE MAYOR ;si es mayor o igual pasa a mayor JMP MENOR ;si no a menor MAYOR: printn " " print "Aprobado" JMP SALIR MENOR: printn " " print "Reprobado" JMP SALIR SALIR: print " " printn " " gotoxy 10,10 ;coloco el cursor en las coordenadas 10x,10y print "Presiona enter para salir..." ;imprimo despues este mensaje mov ah,0 ;servicio de lectura de pulsacion de tecla int 16h ;invoca servicios de teclado mov ah,4ch int 21h ret OPERACIONES ENDP define_print_string define_print_num define_print_num_uns define_scan_num END
Resultado:
Comentarios
Publicar un comentario