Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Int 21H
Int 21H
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 = 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
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...)
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
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
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
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)
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)
40H
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
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
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
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
AH = 4AH ES = direccin del segmento del bloque a cambiar BX = Nuevo tamao del bloque en prrafos
(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
25H
Ninguno
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.-
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
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
SET_DTA
GET_DTA
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
CLOSE_HANDLE
READ_HANDLE
WRITE_HANDLE
MOVE_PTR
SET_DATE
GET_TIME
SET_TIME
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
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