.XLIST ; Las macros y subrutinas que se encuentran en este archivo y en el archivo ; rutinas.asm, suponen que las cadenas de caracteres siguen las conveciones ; de Pascal: el primer byte indica la longitud y los siguientes son los ; caracteres que componen la cadena. ; Constantes Llamar_DOS EQU 21H Video EQU 10H CR EQU 0DH LF EQU 0AH BS EQU 08H NIL EQU -1 ; Convenciones de MS-DOS para empezar la ejecucion de un programa. Empezar MACRO Segmento_Codigo, Segmento_Datos ASSUME CS:Segmento_Codigo, DS: Segmento_Datos, ES: Segmento_Datos MOV AX, Segmento_Datos MOV DS, AX MOV ES, AX ENDM ; Llamada a MS-DOS para terminar la ejecucion de un programa. Terminar MACRO MOV AH, 4CH INT Llamar_DOS ENDM ; Genera un PUSH por cada registro que aparece en la lista ; Invocacion: Salvar_Registros Salvar_Registros MACRO Lista_Registros IRP Registro, PUSH Registro ENDM ENDM ; Genera un POP por cada registro que aparece en la lista ; Invocacion: Recuperar_Registros Recuperar_registros MACRO Lista_Registros IRP Registro, POP Registro ENDM ENDM ; Borra la pantalla y pone el cursor en la esquina ; superior izquierda Borrar_Pantalla MACRO CALL FAR PTR Rutina_Borrar ENDM ; Posiciona el cursor el la fila DH y la columna DL Posicion_x_y MACRO CALL FAR PTR Rutina_Posicion ENDM ; Lee caracteres del teclado, hasta que se teclee , en la variable ; Cadena. Esta ultima es el parametro de la macro. ; Invocacion: Leer_Cadena Variable_de_tipo_byte Leer_Cadena MACRO Cadena PUSH DI LEA DI, Cadena CALL FAR PTR Rutina_Leer POP DI ENDM ; Imprime en la pantalla el parametro Cadena ; Invocacion: Imprimir_Cadena Variable_de_tipo_byte Escribir_Cadena MACRO Cadena PUSH DX LEA DX, Cadena CALL FAR PTR Rutina_Imprimir POP DX ENDM ; Lee un numero (decimal) del teclado y lo deja en AX. Leer_Numero MACRO CALL FAR PTR Convertir_a_Numero ENDM ; Imprime en decimal en la pantalla el numero que se encuentra en AX. Escribir_Numero MACRO Call FAR PTR Rut_Imprimir_Numero ENDM ; Escribe en binario en la pantalla el numero que se encuentra en AX. Escribir_Binario MACRO CALL FAR PTR Rutina_Escribir_Binario ENDM ; Escribe el caracter que se encuentra en AL en la posicion del cursor ; no desplaza al cursor. Escribir_Caracter MACRO CALL FAR PTR Rutina_Escribir_Caracter ENDM ;********************************** ; MACROS PARA MANEJO DE ARCHIVOS ;********************************** ; Se dispone de 5 macros para manejar archivos: ; Crear_Archivo: permite crear un archivo (solo uno) como archivo de ; salida del programa. ; Abrir_Archivo: permite abrir un archivo (solo uno) como archivo de ; entrada del programa. ; Leer_Byte: lee un byte del archivo de entrada creado con Crear_Archivo. ; Escribir_Byte: escribe un byte en el archivo abierto con Abrir_Archivo. ; Cerrar_Archivo: cierra el archivo de salida. ; Esta macro crea un archivo con el nombre dado como parametro. ; Retorna el carry en 1 si hay algun error. ; Invocacion: Crear_Archivo Variable_de_tipo_byte Crear_Archivo MACRO Nombre_Archivo PUSH DX LEA DX, Nombre_Archivo CALL FAR PTR Rutina_Crear_Archivo POP DX ENDM ; Esta macro abre un archivo con el nombre dado como parametro. ; Retorna el carry en 1 si hay algun error. ; Invocacion: Abrir_Archivos Variable_de_tipo_byte Abrir_Archivo MACRO Nombre_Archivo PUSH DX LEA DX, Nombre_Archivo CALL FAR PTR Rutina_Abrir_Archivo POP DX ENDM ; Esta macro lee un byte del archivo abierto con Abrir_Archivo. El caracter ; queda en AL. Si el archivo se termino, devuelve -1 en AX. Pone el carry ; en 1 si se produce algun error. Leer_Byte MACRO CALL FAR PTR Rutina_Leer_Byte ENDM ; Esta macro escribe un byte en el archivo creado con Crear_Archivo. El byte ; debe estar en AL. Pone el carry en 1 si se produce algun error. Escribir_Byte MACRO CALL FAR PTR Rutina_Escribir_Byte ENDM ; Esta macro cierra el archivo creado por Crear_Archivo. Cerrar_Archivo MACRO CALL FAR PTR Rutina_Cerrar_Archivo ENDM ; Macro para declarar variables. El primer parametro es una lista que ; contiene los nombres de las variables que se desea declarar (entre <>). ; El segundo parametro es el tipo de las variables (DW, DB). El ultimo ; parametro es el valor inicial (? por defecto). ; Invocacion: Declarar , Tipo [, constante] Declarar MACRO Lista_Variables, Tipo, Valor IRP Variable, IFB Variable Tipo ? ELSE Variable Tipo Valor ENDIF ENDM ENDM .LIST