Está en la página 1de 20

FUNCION

DESCRIPCION

PAR. ENTRADA

PAR. SALIDA

NOMBRE MACRO

NOTAS

LECTURA
01H 03H 07H 08H Lee un carcter del dispositivo de entrada stndard (con eco). Lee un carcter del dispositivo auxiliar (COM1). Lee un carcter del dispositivo de entrada stndard (sin eco). Lee un carcter del teclado (sin eco) AH = 1 AH = 3 AH = 7 AH = 8

DE

CARACTER
AL = carcter AL = carcter AL = carcter AL = carcter READ_KBD_AND_ECHO AUX_INPUT DIR_CONSOLE_INPUT READ_KBD

ESCRITURA
02H 04H 05H Enva un carcter a la salida stndard Enva un carcter al dispositivo auxiliar Enva un carcter a la impresora stndard AH = 2 // DL = carcter AH = 4 // DL = carcter AH = 5 // DL = carcter

DE

CARACTER
Ninguno Ninguno Ninguno DISPLAY_CHAR CARACTER AUX_OUTPUT CARACTER PRINT_CHAR CARACTER

OTRAS
06H Si DL = 0FFH, devuelve el cdigo ASCII de la tecla pulsada y Fz = 0. Si no hay tecla pulsada Fz = 1. Si DL <> 0FFH, ste se enva a la salida stndard Enva un string terminado con '$' a la consola Lee un string del teclado Comprueba si hay caracteres disponibles del teclado Borra el buffer de teclado. Si AL contiene los valores 1,6,7,8 0Ah ejecuta la system call respectiva.

DE

PANTALLA/TECLADO
Si DL = 0FFH antes de la llamada: Fz = 0 indica que AL tiene un carcter del teclado. Si DL <> 0FFH no hay parmetro de salida Ninguno Ninguno AL = 0FFH -> hay caracteres AL = 0 -> No hay caracteres AL = 0 (solo se vaci el buffer) Si se ejecut la s.c. 1,6,7,8 0AH, los propios de la funcin respectiva. DIR_CONSOLE_IO SWITCH

AH = 6 DL -> (ver descripcin)

09H 0AH 0BH 0CH

AH = 9 DS:DX = puntero a string AH = 0AH DS:DX = puntero a buffer AH = 0BH AH = 0CH AL = 1,6,7,8 = 0AH si AL <> 1,6,7,8,0AH solo borra buffer

DISP_STRING STRING GET_STRING LIMIT,STRING CHECK_KBD_STATUS FLUSH_AND_READ_KBD SWITCH (1)

FUNCION

DESCRIPCION

PAR. ENTRADA

PAR. SALIDA

NOMBRE MACRO

NOTAS

MANEJO
0EH Selecciona la unidad de disco actual

DE

DISCOS
Al = n de unidades lgicas SELECT_DISK DISK

AH = 0EH DL = cdigo unidad (0=A, 1=B, etc.) AH = 19H AH = 1AH DS:DX = direccin del DTA AH = 2FH AH = 36H DL = unidad de disco ( 0=defecto,1=A,2=B...)

19H 1AH 2FH 36H

Obtiene el cdigo de la unidad actual Pone la direccin del DTA Obtiene la direccin del DTA Devuelve el n de clusters disponibles

AL -> disco actual (0=A, 1=B, etc.) Ninguno ES:BX = puntero al DTA AX = 0FFFFH si n de disco invlido. En caso contrario indica n de sectores por cluster. BX = clusters disponibles CX = bytes/sector DX = n de clusters totales

CURRENT_DISK SET_DTA BUFFER GET_DTA GET_DISK_SPACE DRIVE

MANEJO DE
39H 3AH 3BH 47H Crea un directorio Borra un directorio Cambia de directorio Devuelve el pathname absoluto del directorio en curso de un disco AH = 39H DS:DX = puntero a pathname AH = 3AH DS:DX = puntero a pathname AH = 3BH DS:DX = puntero a pathname AH = 47H DS:SI -> puntero a buffer de 64 Bytes DL = unidad de disco (0=defecto,1=A,2=B,...)

DIRECTORIOS
FC = 0 -> no hubo error FC = 1 -> se produjo error FC = 0 -> no hubo error FC = 1 -> se produjo error FC = 0 -> no hubo error FC = 1 -> se produjo error Fc = 0 no hubo error Fc = 1 hubo error; Si AX = 15 cdiggo de unidad de disco incorrecto MAKE_DIR PATH REM_DIR PATH CHANGE_DIR PATH GET_DIR DRIVE,BUFFER (2) (2) (2)

FUNCION

DESCRIPCION

PAR. ENTRADA

PAR. SALIDA

NOMBRE MACRO

NOTAS

MANEJO
3CH Crea un fichero y le asigna el primer handle disponible

DE

FICHEROS
Fc = 1 -> error: AX=3 pathname invlido,AX=4 Demasiados ficheros abiertos,AX=5 Acceso denegado. Fc = 0 -> AX = n de handle Fc = 1 -> error. AX = 2 no se encuentra fichero. AX = 5 acceso denegado Fc = 0 -> no hubo error Si Fc = 1 -> error: AX=1 funcin invlida // AX=2 fichero no encontrado // AX=3 path invlido // AX=5 acceso denegado. Si Fc = 0 -> CL = atributos CREATE_HANDLE PATH,ATTRIB (2)

AH = 3CH DS:DX = puntero a string donde reside el pathname. CX = atributo AH = 41H DS:DX = puntero a string con pathname AH = 43H // AL = 0 leer atributos // AL = 1 poner atributos. CX <- atributos (si AL = 1) DS:DX = puntero a string AH = 4EH DS:DX = puntero a string ASCIIZ con pathname (se admiten metacaracteres) CX = atributos AH = 4FH

41H

Borra un fichero

DELETE_ENTRY PATH

43H

Lee o pone los atributos de un fichero

CHANGE_ATTR PATH,ACTION,ATTRIB

(2)

4EH

Busca la primera entrada de fichero que coincida con las especificaciones dadas

Si Fc = 1 -> error: AX=2 pathname invlido // AX = 12H No se encontr el fichero coincidente. Si Fc = 0 -> fichero encontrado (datos en el DTA). Si Fc = 1 y AX = 12H no hay ms ficheros coincidentes con el patrn especificado en la funcin anterior Si Fc = 0 -> ficheros encontrado (datos en el DTA).

FIND_FIRST_FILE PATH,ATTRIB

(3)

4FH

Busca las siguientes entradas si la funcin anterior (4EH) encontr una entrada coincidente (Fc = 0).

FIND_NEXT_FILE

(3)

56H

Renombra un fichero

AH = 56H DS:DX = puntero a pathname original ES:DI = puntero a pathname nuevo

FC = 0 -> no hubo error FC = 1 -> se produjo error // AX=2 -> fichero no encontrado // AX=5 -> Acceso denegado // AX = 17 -> los dos pathname son de otro drive

RENAME_FILE OLD_PATH,NEW_PATH

FUNCION

DESCRIPCION

PAR. ENTRADA

PAR. SALIDA

NOMBRE MACRO

NOTAS

MANEJO
3DH Abre un fichero o dispositivo existente

DE

CONTENIDO DE

FICHEROS
OPEN_HANDLE PATH,ACCESS (4)

AH = 3DH DS:DX = puntero a pathname. AL = byte de acceso

Fc = 0 -> no hubo error: AX = handle Fc = 1 -> error: AX = 1 funcin invlida // AX=2 fichero no encontrado //AX=3 pathname invlido //AX=4 Demasiados ficheros abiertos // AX=5 Acceso denegado // AX=12 acceso invlido. Si Fc = 1 -> error: AX = 6 si handle invlido Si Fc = 0 -> func. ejecutada normalmente. Si Fc = 1 -> error: AX=5 acceso denegado // Ax=6 handle invlido. Si Fc = 0 -> AX = n de bytes ledos

3EH 3FH

Cierra un fichero que se abri con las funciones 3DH o 3CH. Lee de un fichero o dispositivo un n de bytes determinado hacia un buffer

AH = 3EH BX = handle AH = 3FH BX = handle CX = n de bytes DS:DX = puntero a buffer AH = 40H BX = handle CX = n de bytes DS:DX = puntero a buffer AH = 42H AL = indicador de posicin: 0 -> BOF 1 -> POSICION ACTUAL 2 -> EOF BX = handle CX:DX = offset (ver nota 6)

CLOSE_HANDLE HANDLE READ_HANDLE HANDLE,BUFFER,BYTES (5)

40H

Escribe a un fichero o dispositivo un n de bytes determinado desde un buffer

Si Fc = 1 -> error: AX=5 acceso denegado // Ax=6 handle invlido. Si Fc = 0 -> AX = n de bytes escritos Si Fc = 0: DX:AX = Ubicacin del puntero (contando desde el inicio) Si Fc = 1 -> error: AX = 1 -> funcin invlida AX = 6 -> handle invlido

WRITE_HANDLE HANDLE,DATA,BYTES

(5)

42H

Mueve la posicin del puntero asociado al handle de un fichero para indicar la posicin a la que acceder la siguiente operacin

MOVE_PTR HANDLE,HIGH,LOW,METHOD

(6)

MANEJO DE
2AH Devuelve la fecha del sistema AH = 2AH

FECHA Y HORA

DEL

SISTEMA
GET_DATE

CX = Ao (de 1980 a 2099) DH = mes (1-12) // DL = Da(1-31) // AL = Da de la semana (0 = Domingo) AL = 0FFH -> Error, fecha invlida AL = 00 -> No hubo error

2BH

Pone la fecha del sistema

AH = 2BH CX = Ao DH = Mes DL = Da

SET_DATE YEAR,MONTH,DAY

FUNCION
2CH

DESCRIPCION
Devuelve la hora del sistema AH = 2CH

PAR. ENTRADA

PAR. SALIDA
CH = Hora CL = Minutos (0-59) DH = Segundos (0-59) DL = Centsimas (0-99) AL = 0FFH -> Error, hora no vlida AL = 00 -> No hubo error

NOMBRE MACRO
GET_TIME

NOTAS

2DH

Pone la hora del sistema

AH = 2DH CH = Hora (0-23) CL = Minutos (0-59) DH = Segundos (0-59) DL = Centsimas (0-99)

SET_TIME HOUR,MINUTES,SECON DS,HUNDRETHS

MANEJO
48H Pide memoria al sistema para asignarla al proceso en curso.

DINAMICO
AH = 48H BX = n de prrafos a pedir

DE

MEMORIA
Si Fc = 0: AX contiene la direccin del segmento del bloque asignado. Si Fc = 1 -> Error: AX = 7 bloque de control de memoria mal. // AX = 8 memoria insuficiente (BX indica el n mximo de prrafos disponibles. ALLOCATE_MEMORY BYTES

49H

Libera la memoria obtenida con la funcin 48H

AH = 49H ES = Direccin inicial del segmento

Si Fc = 0 -> No hubo error Si Fc = 1 -> Error: AX=7 Bloque malo // AX=9 Valor en ES invlido Si Fc = 0 -> No hubo error Si Fc = 1 -> Error: AX = 7 Bloque mal // AX = 9 Valor en ES invlido // AX = 8 No hay suficiente memoria

FREE_MEMORY SEG_ADDR

4AH

Cambia el tamao de un bloque de memoria

AH = 4AH ES = direccin del segmento del bloque a cambiar BX = Nuevo tamao del bloque en prrafos

LIB_MEM_COM LAST_BYTE,STACK_SIZE Y LIB_MEM_EXE LAST_SEGM

(7)

FUNCION

DESCRIPCION

PAR. ENTRADA

PAR. SALIDA

NOMBRE MACRO

NOTAS

MANEJO DE
35H Obtiene la direccin de la rutina de servicio de una interrupcin Modifica la direccin de la rutina de servicio de una interrupcin

VECTORES DE

INTERRUPCION
GET_VECTOR INTERRUPT

AH = 35H AL = n de interrupcin AH = 25H AL = n interrupcin DS:DX = Direccin

ES:BX = Direccin Rutina

25H

Ninguno

CAPTURE_INT INTERRUPT,HANDLER_OFF, HANDLER_SEG Y RESTORE_INT

SALIDA DE
4CH 31H Termina el programa y devuelve control al sistema operativo. Idntica a la 4CH excepto que deja al programa residente (No libera memoria). AH = 4CH AL = cdigo de retorno AH = 31H AL = cdigo de retorno DX = N de prrafos de memoria que deben quedar sin liberar

PROGRAMA
Ninguno Ninguno END_PROCESS RETURN_CODE KEEP_PROCESS _COM RETURN_CODE,LAST_BYTE Y KEEP_PROCESS_EXE RETURN_CODE, LAST_BYTE,FIRST_SEGM (8)

NOTAS: 1.La composicin del buffer para la funcin 0AH debe tener la siguiente estructura: BYTE 1: N mximo de caracteres en el buffer incluyendo el retorno de carro BYTE 2: N real de caracteres tecleados sin contar el retorno de carro, este valor lo pone la funcin pero hay que dejar reservado el byte. BYTE 3 a N: Es el buffer donde se depositarn los caracteres tecleados, debe tener al menos la longitud especificada en el byte 1. 2.El pathname debe ser un string de caracteres terminado por un NULL y debe especificar el camino absoluto o relativo. Atributos de fichero: 00 01 02 04 3.Normal Solo Lectura Oculto Fichero Sistema

Estas funciones (4EH y 4FH) devuelven las caracteristicas del fichero encontrado en los 43 primeros bytes del DTA, que se supone est en un buffer declarado con anterioridad con la funcin 1AH. La estructura del DTA es la siguiente: Bytes 0 a 14h: Reservados Byte 15h: Atributo Bytes 16h a 19h: Hora y fecha ltima escritura (*) Bytes 1Ah a 1Dh: Tamao en bytes Bytes 1Eh a 2Ah: Nombre y extensin del fichero ajustado a la izda. y terminado en NULL. Si tiene extensin hay un punto entre el nombre y la extensin. No hay caracteres blancos intermedios. (*) Formato de Hora y Fecha:

Offsets 16H y 17H (Hora), forman una Word (offset 17H parte alta de la Word): bits 0 a 4 Segundos bits 5 a 10 Minutos bits 11 a 15 Horas Offsets 18H y 19H (Fecha), forman una Word (offset 19H parte alta de la Word): bits 0 a 4 Da bits 5 a 8 Mes bits 9 a 15 Ao 4.Byte de acceso: 0 = Lectura 1 = Escritura 2 = Lectura / escritura 5.Si Fc = 0 a la salida de la funcin, AX indica el nmero de bytes ledos o escritos. Si AX es menor que el nmero de bytes pedidos, es porque se ha producido una lectura o escritura parcial causada probablemente porque se alcanz el EOF en lectura o porque el disco est lleno en escritura.

6.-

A la funcin se le pasa un parmetro de 32 bits (entero con signo) que se interpreta como un desplazamiento relativo a una posicin inicial que se especifica en AL (BOF,EOF o posicin actual). Si el desplazamiento es negativo, el puntero se mueve hacia el comienzo del fichero. Si es positivo se mueve hacia el final del fichero. Si se intenta mover el puntero por debajo del BOF o por encima del EOF no da error. El puntero se queda en BOF o EOF (Se puede comprobar por el valor en DX:AX). Para reducir la cantidad de memoria inicialmente asignada a un programa COM utilizar la macro LIB_MEM_COM, y para un programa EXE utilizar la macro LIB_MEM_EXE. El valor en DX debe ser el tamao total a permanecer en memoria (no solo el tamao del segmento de cdigo). Por ejemplo, no se debe olvidar incluir el tamao del PSP. KEEP_PROCESS_COM se sale dejando residente un programa COM. KEEP_PROCESS_EXE se sale dejando residente un programa EXE.

7.8.-

CONTENIDO DEL FICHERO MACROS.MAC

LECTURA DE CARACTER
READ_KBD_AND_ECHO MACRO MOV INT ENDM MACRO MOV INT ENDM AH,01 21H

AUX_INPUT

AH,03 21H

DIR_CONSOLE_INPUT MACRO MOV INT ENDM READ_KBD MACRO MOV INT ENDM

AH,7 21H

AH,8 21H

ESCRITURA DE CARACTER
DISPLAY_CHAR MACRO MOV MOV INT ENDM MACRO MOV MOV INT ENDM MACRO MOV MOV INT ENDM CARACTER DL,CARACTER AH,02 21H CARACTER DL,CARACTER AH,04 21H CARACTER DL,CARACTER AH,05 21H

AUX_OUTPUT

PRINT_CHAR

OTRAS DE PANTALLA/TECLADO
DIR_CONSOLE_IO MACRO MOV MOV INT ENDM MACRO LEA MOV INT ENDM SWITCH DL,SWITCH AH,06 21H STRING DX,STRING AH,9 21H

DISP_STRING

; Macro DISP_STRINGZ, visualiza un string ASCIIZ. Puede contener el carcter "$". Modifica AX,BX,DL y Fc DISP_STRINGZ LOCAL BUCLE: MACRO STRINGZ BUCLE,FIN LEA BX,STRINGZ MOV DL,[BX] TEST DL,DL JZ FIN MOV AH,2 INT 21H INC BX JMP SHORT BUCLE ENDM GET_STRING MACRO LEA MOV MOV INT ENDM MACRO MOV INT ENDM MACRO MOV MOV INT ENDM LIMIT,STRING DX,STRING STRING, LIMIT AH,0AH 21H

FIN:

CHECK_KBD_STATUS

AH,0BH 21H SWITCH AL,SWITCH AH,0CH 21H

FLUSH_AND_READ_KBD

MANEJO DE DISCOS
SELECT_DISK MACRO MOV MOV INT ENDM MACRO MOV INT ENDM MACRO LEA MOV INT ENDM MACRO MOV INT ENDM MACRO MOV MOV INT ENDM DISK DL,DISK - 'A' AH,0EH 21H

CURRENT_DISK

AH,19H 21H BUFFER DX,BUFFER AH,1AH 21H

SET_DTA

GET_DTA

AH,2FH 21H DRIVE DL,DRIVE AH,36H 21H

GET_DISK_SPACE

MANEJO DE DIRECTORIOS
MAKE_DIR MACRO LEA MOV INT ENDM MACRO LEA MOV INT ENDM MACRO LEA MOV INT ENDM MACRO MOV LEA MOV INT ENDM PATH DX, PATH AH,39H 21H PATH DX,PATH AH,3AH 21H PATH DX,PATH AH,3BH 21H DRIVE,BUFFER DL,DRIVE SI,BUFFER AH,47H 21H

REM_DIR

CHANGE_DIR

GET_DIR

MANEJO DE FICHEROS
CREATE_HANDLE MACRO PATH,ATTRIB LEA DX,PATH MOV CX,ATTRIB MOV AH,3CH INT 21H ENDM MACRO LEA MOV INT ENDM MACRO LEA MOV MOV MOV INT ENDM MACRO LEA MOV MOV INT ENDM MACRO MOV INT ENDM PATH DX,PATH AH,41H 21H PATH,ACTION,ATTRIB DX,PATH AL,ACTION CX,ATTRIB AH,43H 21H PATH, ATRIB DX,PATH CX,ATRIB AH,4EH 21H

DELETE_ENTRY

CHANGE_ATTR

FIND_FIRST_FILE

FIND_NEXT_FILE

AH,4FH 21H

RENAME_FILE

MACRO OLD_PATH,NEW_PATH LEA DX,OLD_PATH PUSH DS POP ES LEA DI,NEW_PATH MOV AH,56H INT 21H ENDM

MANEJO DE CONTENIDO DE FICHEROS


OPEN_HANDLE MACRO LEA MOV MOV INT ENDM MACRO MOV MOV INT ENDM MACRO MOV LEA MOV MOV INT ENDM MACRO MOV LEA MOV MOV INT ENDM MACRO MOV MOV MOV MOV MOV INT ENDM PATH,ACCESS DX, PATH AL, ACCESS AH,3DH 21H HANDLE BX,HANDLE AH,3EH 21H HANDLE,BUFFER,BYTES BX,HANDLE DX, BUFFER CX,BYTES AH,3FH 21H HANDLE,DATA,BYTES BX,HANDLE DX, DATA CX,BYTES AH,40H 21H HANDLE,HIGH,LOW,METHOD BX,HANDLE CX,HIGH DX,LOW AL,METHOD AH,42H 21H

CLOSE_HANDLE

READ_HANDLE

WRITE_HANDLE

MOVE_PTR

MANEJO DE FECHA Y HORA DEL SISTEMA


GET_DATE MACRO MOV INT ENDM MACRO MOV MOV MOV MOV INT ENDM MACRO MOV INT ENDM MACRO MOV MOV MOV MOV MOV INT ENDM AH,2AH 21H YEAR,MONTH,DAY CX,YEAR DH,MONTH DL,DAY AH,2BH 21H

SET_DATE

GET_TIME

AH,2CH 21H HOUR,MINUTES,SECONDS,HUNDRETHS CH,HOUR CL,MINUTES DH,SECONDS DL,HUNDRETHS AH,2DH 21H

SET_TIME

MANEJO DE MEMORIA DINAMICA


ALLOCATE_MEMORY MACRO BYTES MOV MOV SHR INC MOV INT ENDM MACRO MOV MOV MOV INT ENDM MACRO LOCAL MOV LEA ADD JC ADD JC MOV CL,4 SHR INC MOV INT JC SHL MOV XOR PUSH FIN: ENDM LIB_MEM_EXE MACRO LAST_SEGM LOCAL SIGUE MOV BX,SP DEC BX MOV CL,4 SHR BX,CL INC BX MOV AX,SS ADD AX,BX MOV BX,LAST_SEGM CMP AX,BX JBE SIGUE MOV BX,AX SIGUE: MOV AX,ES SUB BX,AX MOV AH,4AH INT 21H ENDM BX,BYTES CL,4 BX,CL BX AH,48H 21H SEG_ADDR AX,SEG_ADDR ES,AX AH,49H 21H LAST_BYTE,STACK_SIZE FIN AX,8 ;Cdigo de retorno mem. insuficiente BX,LAST_BYTE-1 ;Offset ltimo byte del prog. BX,STACK_SIZE FIN ;SI Carry sale por error FC=1,AX=8 BX,2 ;Espacio para meter word a ceros FIN ;Si carry, sale por error BX,CL BX AH,4AH 21H FIN BX,CL SP,BX AX,AX AX ;N prrafos necesarios por exceso ;Modifica tamao bloque ;Si error,sale con Fc=1 ;Multiplica prrafos * 16 y ;pone al final el SP ;Coloca una word a ceros en pila

FREE_MEMORY

LIB_MEM_COM

;Ultimo offset de la pila ;Calcula n de prrafos por exceso ;AX=SS+(SP/16) por exceso ;BX = Last Segment ;Compara ambos valores ;y coge el valor mayor en BX ;Le resta el segmento del PSP

MANEJO DE VECTORES DE INTERRUPCCION


GET_VECTOR MACRO MOV MOV INT ENDM MACRO PUSH MOV MOV MOV LEA MOV INT POP ENDM MACRO PUSH LDS MOV MOV INT POP ENDM INTERRUPT AL,INTERRUPT AH,35H 21H INTERRUPT,HANDLER_OFF,HANDLER_SEG DS AX,HANDLER_SEG DS,AX AL,INTERRUPT DX,HANDLER_OFF AH,25H 21H DS INTERRUPT,FAR_OLD_ADDRESS DS DX,FAR_OLD_ADDRESS AL,INTERRUPT AH,25H 21H DS

CAPTURE_INT

RESTORE_INT

FINALIZACION DE PROGRAMA
END_PROCESS MACRO MOV MOV INT ENDM MACRO MOV LEA MOV SHR INC MOV INT ENDM MACRO LOCAL LEA MOV SHR ADD ADD JC MOV SUB JC MOV MOV INT ENDM RETURN_CODE AL,RETURN_CODE AH,4CH 21H RETURN_CODE,LAST_BYTE AL,RETURN_CODE DX, LAST_BYTE - 1 CL,4 DX,CL DX AH,31H 21H RETURN_CODE,LAST_BYTE,FIRST_SEGM FIN DX,LAST_BYTE - 1 CL,4 DX,CL DX,11H DX,SEG LAST_BYTE FIN AX,FIRST_SEGM DX,AX FIN AL,RETURN_CODE AH,31H 21H

KEEP_PROCESS_COM

KEEP_PROCESS_EXE

FIN:

COPROCESADOR
; Esta macro transfiere el byte ms significativo de la palabra de estado del coprocesador, al byte menos significativo de PSW. ; Requiere como parmetro un nombre de variable tipo word que se usa como almacenamiento intermedio. Solo modifica AX y PSWL.

MOVE_STSWH_TO_PSWL

MACRO FSTSW MOV SAHF ENDM

VAR_W VAR_W AX,VAR_W