Escolar Documentos
Profissional Documentos
Cultura Documentos
No. 1
- PSP: Estructura y parmetros en la lnea de comandos.
- Mapa de memoria de 1 MB.
- Extendida, Expandida.
- BIOS.
Offset Descripcin Cant. de Bytes RAM
00H Llamada a la INT 20H 2 0000:0000
02H Direccin del segmento del ltimo parrafo de 2
memoria destinado para el programa.
04H RESERVADO 1
05H Llamada a la INT 21H 5
0AH Copia del vector de interrupcin 22H 4
0EH Copia del vector de interrupcin 23H 4
12H Copia del vector de interrupcin 24H 4
16H RESERVADO 22
2CH Direccin del segmento del bloque de ambiente. 2
2EH RESERVADO 34
50H INT 21H, RETF 3
53H RESERVADO 9
5CH FCB 1 16
6CH FCB 2 20
80H Cantidad de caracteres en la lnea de Comando 1
81H Lnea de Comando (trmina con "CR") 127
- Mapa de memoria de 1 MB
- Memoria Expandida:
Dentro del mapa de memoria de 1MB por lo general hay uno o ms bloques de 64KB que no se estn utilizando (BIOS, RAM de
video, etc.) que los creadores del EMS decidieron utilizar como ventana para el EMS, usualmente este bloque se encuentra en la
direccin
D000:0000 - D000:FFFF, pero el hardware de la EMS permite ubicarlo en otras direcciones.
Las rutinas del BIOS comienzan en la direccin F000:E000 y se extiende hasta la F000:FFFF que es la direccin ms alta que
puede direccionar el 8088/8086. El BIOS almacena las variables que le son de utilidad a partir de la direccin 0040:0000.
4
No. 2
Modelo de software del micro-procesador 80386DX en modo real.
Notacin: S (bandera de status), C (bandera de control), X (bandera del sistema). Los bits que contienen un "0" o un "1" indican
que son reservados por el fabricante y no se deben definir.
BS16: Se utiliza para activar la operacin del bus de datos en modalidad de 16 bits.
ADS: Indica que el valor en el bus de direcciones es valido.
READY: Se "muestre" al final de T2 y s es "0" el p lee el valor del bus de datos. Pero, s es "1" el p introduce estados
de espera.
NA: Controla el encausamiento de las direcciones s NA est activa antes del fin de un ciclo, se produce el encausamiento, de
lo contrario el encausamiento se detiene.
LOCK: Impide que otro dispositivo tome el control de los buses, adems impide el reconocimiento de la seal HOLD. (Se activa
a travs de una instruccin)
Direccionamiento de registros.
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0002H
CS = 0100H CS = 0100H
BX = 1234H BX = 1234H
AX = XXXXH AX = 1234H
Direccionamiento de inmediato.
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0002H
CS = 0100H CS = 0100H
AX = XXXXH AX = XX15H
Direccionamiento de memoria.
Direccionamiento directo
PA = Physical Address = Direccin fsica
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0004H
CS = 0100H CS = 0100H
DS = 0200H DS = 0200H
CX = XXXXH CX = BEEDH
Mensaje = 1234H
8
Direccionamiento indirecto por registro.
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0002H
CS = 0100H CS = 0100H
DS = 0200H DS = 0200H
SI = 5678H SI = 5678H
AX = XXXXH AX = 0100H
Direccionamiento de base.
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0004H
CS = 0100H CS = 0100H
DS = 0200H DS = 0200H
BX = 1000H BX= 1000H
AX = BEEDH AX = BEEDH
BETA=0ABCH
9
Direccionamiento "indexado".
Ejem:
Antes de ejecutar Despus de ejecutar
IP = 0000H IP = 0004H
CS = 0100H CS = 0100H
DS = 0200H DS = 0200H
SI = 2000H SI = 2000H
AX = XXXXH AX = XXEDH
10
No. 4
Programas necesarios para convertir el programa fuente en ejecutable.
-TASM.EXE PROG.LST
PROG.CRF
PROG.OBJ
/v y /s = Agrega informacin simbolica y los nmeros de lnea al programa ejecutable de manera que pueda ser usado por
el TD (Estos switches deben ser escritos en minsculas).
.CODE
MOV AX,4C00H
INT 21H
END BEGIN
END
Set de instrucciones.
Instrucciones de transferencia de datos con signo esxtendido y cero extendido (MOVSX y MOVZX) "SOLO 386"
11
Operandos permitidos.
Antes Despus
EBX = 12345678H MOVSX EBX,AX EBX = FFFF9ABCH
AX = 9ABCH AX = 9ABCH
SF = "1"
Antes Despus
EBX = 12345678H MOVZX EBX,AX EBX = 00009ABCH
AX = 9ABCH AX = 9ABCH
ZF = "1"
XCHG
Operandos permitidos.
Antes Despus
AX = 1234H XCHG AX,DX AX = 5678H
DX = 5678H DX = 1234H
Antes Despus
IP = 0000H IP = 0004H
CS = 0100H XCHG [SUM],BX CS = 0100H
DS = 0200H DS = 0200H
BX = ABCDH BX = 00FFH
XLAT y XLATB
La diferencia entre XLAT y XLATB es que XLATB solo puede usar el DS.
12
Antes Despus
IP = 0000H IP = 0104H
CS = 1100H CS = 1100H
DS = 1200H DS = 1300H
SI = XXXXH SI = 0020H
Instrucciones aritmticas.
Instrucciones aritmticas para sumar (ADD, ADC, INC, AAA y DAA):
Operandos permitidos.
Para AAA (Para AX desempaquetado)
Para la suma Para INC DAA (Para AL)
13
Ejem:
AH = 00H ADD AL,CL AH = 01H
AL = 39H AAA AL = 07H
CL = 38H CL = 38H
Ejem:
AH = 00H ADD AL,CL AL = 6CH
AL =34H CL = 38H
CL = 38H AAA AH = 01H
AL = 02H
CL = 38H
En esta parte se muestra el uso de la instruccin AAA ajuste ASCII para la suma, tambin conocida como ajuste decimal
desempaquetado.
Para su uso se deben tener en cuenta las siguientes consideraciones:
1.- Los valores a utilizar deben estar exclusivamente en BCD, adems, la instruccin opera bien cuando:
a.- El nibble alto de los operandos fuente es cero, es decir, desde 00 hasta 09.
b.- Los operandos estan en ASCII, es decir, desde 30 hasta 39.
Independientemente se utilice la opcin a o b el resultado es exactamente el mismo.
Por ejemplo si se suma 05 + 07 = 0CH.
El resultado despues de aplicar AAA sera: AX = 0102 si AH = 00 antes de ejecutar la instruccin si no es asi AH = AH + 1.
Observe que 0CH = (12)D. Lo desempaquetado est en que AH contiene el dgito alto de 12 que es 01 y AL contiene el dgito bajo
que es 02.
2.- Cuando se produce un carry auxiliar ste es sumado a AH, por lo tanto es necesario que AH sea igual a 0 antes de efectuar la
operacin.
Instrucciones aritmticas para restar (SUB, SBB, DEC, NEG y DAS):
Operandos permitidos.
Para la resta Para DEC y NEG Para DAS
NEG es el complemento a 2
Instrucciones aritmticas para multiplicar y dividir (MUL, DIV, IMUL, IDIV, AAM ):
Resultado de ejecutar MUL o IMUL:
AX = AL * 8 bits
DX, AX = AX * 16 bits
EDX, EAX = EAX * 32 bits
Resultado de ejecutar DIV o IDIV:
AH, AL = AX / 8 bits AH contiene el residuo.
DX, AX = DX, AX / 16 bits DX contiene el residuo.
Operandos permitidos.
Ejem:
Ejem:
AAM.
Despus de multiplicar dos nmeros en BCD desempaquetados, se utiliza la instruccion AAM para ajustar el resultado a un
nmero decimal desempaquetado en AX. Para que la instruccion funcione los operandos fuentes deben poseer sus respectivos
nibbles altos en cero.
Ejem:
SCASB
La instruccion SCASB utiliza los siguientes registros:
AL debe contener el cdigo ASCII que se est buscando.
ES y DS deben apuntar al segmento donde se encuentra la cadena a examinar, casi siempre ES y DS son iguales.
CX debe contener el nmero que representa la cantidad de bytes que posee la cadena a examinar.
La bandera de direccion DF debe estar en 0/1 para incrementar/disminuir DI en 1 durante la busqueda del byte.
La bandera de cero ZF se activa cuando el byte buscado es encontrado (ZF = 1).
DI debe apuntar al offset cero de la tabla a examinar.
Si el byte es encontrado DI queda apuntando a la siguiente direccion de memoria despus del byte buscado.
Si el byte no es encontrado DI queda apuntando a la siguiente direccion de memoria despus del ltimo byte de la cadena.
SCASW
La instruccion SCASW utiliza los siguientes registros:
AX = palabra que se busca dentro de la tabla. Esta palabra debe cargarse en AX de forma invertida si se busca en tabla de bytes y
al derecho si la tabla es de palabras.
ES y DS deben apuntar al segmento donde se encuentra la tabla a examinar, casi siempre ES y DS son iguales.
CX debe contener el nmero que representa la cantidad de palabras que posee la tabla a examinar.
La bandera de direccion DF debe estar en 0/1 para incrementar/disminuir DI en 2 durante la busqueda de la palabra.
La bandera de cero ZF se activa cuando la palabra buscada es encontrada (ZF = 1).
DI debe apuntar al offset cero de la tabla a examinar.
Si la palabra es encontrada DI queda apuntando a la siguiente direccin de memoria despus de la palabra buscada.
Si la palabra no es encontrada DI queda apuntando a la siguiente direccin de memoria despues de la ltima palabra de la tabla.
Para buscar en cadenas de texto se debe tener especial cuidado que la cadena a buscar est en un offset par dentro del texto.
Recuerde que DI crece o decrece de 2 en 2.
SCASD
Esta instruccin trabaja en modalidad de 32 bits.
La instruccion SCASD utiliza los siguientes registros:
EAX = doblepalabra que se busca dentro de la tabla. Esta palabra debe cargarse en EAX de forma invertida si se busca en tabla de
bytes y al derecho si la tabla es de doblespalabras.
ES y DS deben apuntar al segmento donde se encuentra la tabla a examinar,casi siempre ES y DS son iguales.
CX debe contener el nmero que representa la cantidad de doblespalabras que posee la tabla a examinar.
La bandera de direccion DF debe estar en 0/1 para incrementar/disminuir DI en 4 durante la busqueda de la doblepalabra.
La bandera de cero ZF se activa cuando la doblepalabra buscada es encontrada (ZF = 1).
EDI debe apuntar al offset cero de la tabla a examinar.
Si la doblepalabra es encontrada EDI queda apuntando a la siguiente direccion de memoria despues de la doblepalabra buscada.
Si la palabra no es encontrada EDI queda apuntando a la siguiente direccion de memoria despus de la ltima palabra de la tabla.
Para buscar en cadenas de texto se debe tener especial cuidado que la cadena a buscar este en un offset multiplo de 4 dentro del
texto. Recuerde que EDI crece o decrece de 4 en 4.
16
CMPSB
La instruccion CMPSB utiliza los siguientes registros:
ES y DS los cuales apuntan al segmento donde se encuentra la cadena a examinar, casi siempre ES y DS son iguales.
CX debe contener el nmero que representa la cantidad de bytes que posee la cadena a patrn.
SI debe apuntar a la cadena donde se espera encontrar una cadena como la patrn.
DI debe apuntar a la cadena patrn (aunque es irrelevante si apunta a una o a la otra cadena).
Las cadenas pueden ser de la misma longitud, pero la cadena patron no puede ser la ms larga.
La comparacin, si se usa el prefijo REPE, se hace el primero que apunta SI con el primero que apunta DI, despues el segundo con
segundo y asi sucesivamente.
Al ser diferentes en un byte la repeticion se aborta y ZF=0.
Para buscar si un texto se encuentro dentro uno ms grande, se debe desarrollar un programa para tal efecto.
La bandera de direccion DF debe estar en 0/1 para incrementar/disminuir DI en 1 durante la busqueda de la cadena.
La bandera de cero ZF se activa cuando la cadena buscada es encontrada (ZF = 1).
Si existe coincidencia DI queda apuntando a la siguiente direccin de memoria despus del ultimo byte de la cadena patrn.
Si existe coincidencia SI queda apuntando a la siguiente direccin de memoria despus del ltimo que coincide con la cadena
patrn dentro del texto examinado.
CMPSW
La instruccion CMPSW utiliza los siguientes registros:
ES y DS los cuales apuntan al segmento donde se encuentra la cadena a examinar, casi siempre ES y DS son iguales.
CX debe contener el nmero que representa la cantidad de palabras que posee la cadena patrn.
SI debe apuntar a la cadena donde se espera encontrar una cadena como la patrn.
DI debe apuntar a la cadena patrn (aunque es irrelevante si apunta a una o a la otra cadena).
Las cadenas pueden ser de la misma longitud, pero la cadena patrn no puede ser la mas larga.
La comparacin, si se usa el prefijo REPE, se hace la primera palabra que apunta SI con la primera palabra que apunta DI, despus
la segunda con la segunda y asi sucesivamente.
Al ser diferentes en un byte la repeticion se aborta y ZF=0.
Para buscar si un texto se encuentro dentro uno mas grande, se debe desarrollar un programa para tal efecto.
La bandera de direccion DF debe estar en 0/1 para incrementar/disminuir DI en 2 durante la busqueda de la cadena.
La bandera de cero ZF se activa cuando la cadena buscada es encontrada (ZF = 1).
Si existe coincidencia DI queda apuntando a la siguiente direccin de memoria despus de la ltima palabra de la cadena patrn.
Si existe coincidencia SI queda apuntando a la siguiente direccin de memoria despus de la ltima palabra que coincide con la
cadena patron dentro del texto examinado.
Es importante que la cadena patrn posea un nmero par de bytes de lo contrario no habr coincidencia.
CMPSD
Solo funciona en modalidad de 32 bits y le es aplicable todo lo referente a CMPSW pero en vez de palabra se maneja doble
palabra. Se trabaja con los registros extendidos.
Es importante que la cadena patrn posea un nmero mltiplo de 4 en bytes de lo contrario no habr coincidencia.
Se salva el valor del bit perteneciente a D especificado por S en la bandera "CF" y luego se toma la accin correspondiente.
Operandos permitidos:
Operandos permitidos:
BSF
Se rastrea el operando S comenzando desde el bit 0.
ZF = 1 si todos los bits son cero de lo contrario ZF = 0.
El operando destino se carga con el indice del primer bit en "1". Este indice es igual a la pocisin del bit.
BSR
Se rastrea el operando S comenzando por el MSB.
ZF = 1 si todos los bits son cero de lo contrario ZF = 0.
El operando destino se carga con el indice del primer bit en "1". Este indice es igual a la pocisin del bit.
18
Largo:
Para hacer la llamada se usa CALL FAR PTR ETIQUETA
Para salir se usa RET o RETF
POPF
Recupera las banderas del STACK (OF, DF, IF, TF, SF, AF, PF y CF)
PUSHA POPA
PUSHAD POPAD
Paso 1
La interrupcin 09H en los PC AT solo puede interpretar los cdigos de barrido generados por el 8042. En los PC XT la
conversin del cdigo es innecesaria ya que los cdigos son pasados directamente a la (ISR) INT 09H.
Paso 2
La interrupcin recoge el cdigo de barrido en el puerto 60H (direccin del 8042) y procesa cada cdigo de la siguiente manera.:
1.- Los cdigos de barrido que corresponden a una combinacin con las teclas "Shift" o "Toggle" (Shift, Alt, Ctrl, Caps Lock,
Num Lock o Scroll Lock) provoca que la INT 09H actualice las variables en memoria que corresponden a las teclas Shift / Toggle.
2.- Los cdigos de barrido ledos se actualizan de acuerdo con el valor guardado en las direcciones de memoria pertenecientes a las
teclas Shift / Toggle.
3.- Algunas combinaciones de las teclas Shift / Toggle (tal como Crtl/Break, Crtl/Alt/Del) son interpretadas por la INT 09H como
una peticin a alguna de las funciones internas del sistema.
20
Paso 3.
Cuando la INT 16H se invoca desde el DOS o desde un programa de aplicacin el cdigo de barrido se obtiene del buffer del
teclado.
INT 16H
Funcin Descripcin
00H Leer la entrada de teclado
01H Leer el estado del teclado
02H Leer el estado de las banderas Shift
03H Establecer la velocidad de repeticin
04H Reservada
05H Almacena la tecla
06H - 0FH Reservadas
10H Leer la entrada del teclado extendido
11H Leer estado del teclado extendido
12H Leer estado de la bandera shift extendida
13H - FFH Reservadas
Entrada: AH = 02H
Entrada: AH = 00H
La diferencia entre stas ltimas es que el servicio 01H no espera por tecla.
21
No. 7
- Rutinas y variables pblicas y externas
- Linkeo de mltiples mdulos.
Memoria Afectada: Normalmente la memoria de vdeo se blanquea a menos que el bit ms significativo de AL est en "1"
Descripcin: Este servicio, est basado en el sistema de coordenadas de la pantalla. Generalmente, la fila del cursor, se almacena
en DH, esta puede variar desde 0 hasta 24. La columna del cursor la cual es almacenada en DL, normalmente varia desde 0 hasta
79. El rango exacto depende de el tipo de adaptador de vdeo que se use y del modo actual de vdeo.
S Ud. est utilizando el modo grfico, la pgina de vdeo almacenada en BH debe ser "0". En modalidad de texto, en la cual se
puede utilizar ms de una pgina de video, el nmero generalmente vara de 0 a 3. S Ud. est trabajando en modo de 40 columnas
las pginas de video pueden variar desde 0 hasta 7. La posicin del cursor para cada modo de vdeo es independiente de las otras
pginas.
Memoria Afectada: Este servicio determina que rea de vidoo ser desplegada.
Descripcin: El carcter a ser mostrado por este servicio puede ser desplegado en cualquier pgina de vdeo valida, no slo en la
pgina de vdeo activa. Con este servicio se pueden crear pginas de video ocultas, para ser desplegadas en el momento que se
requiera usando la INT 10H, 05H.
Registros de salida:
AH: Ancho de la pantalla
AL: Modo actual de vdeo
BH: pgina active.
Descripcin: Los caracteres introducidos se almacenan en el rea especifica del buffer indicada por DS:DX. El valor del primer
byte de este buffer indica la cantidad mxima de caracteres que se pueden introducir por el teclado el DOS modifica el segundo
byte de este buffer para indicar la cantidad de caracteres introducidos Esta interrupcin no retorna sino hasta que se pulse la tecla
retorno de carro (ENTER).
23
Modos de presentacin en vdeo.
[1] Modo VGA ampliado; de otra forma, el VGA puede emular las caractersticas ya sea de CGA o de EGA para este
modo.
[2] Modo EGA al conectarse a una pantalla de color ampliada; de otra forma, emula las caractersticas de CGA para este
modo.
[3] Denota tonos de gris.
24
Write Pixel Dot (Interrupt 10h, service 0Ch)
Registros de Entrada:
AH: 0CH
AL: Pixel value
BH: Pgina de vdeo.
CX: Columna del Pixel
DX: Fila del pixel
Sintaxis:
MOV AH,0CH ;Especifica el servicio 0CH
MOV BH,00H ;Pgina de vdeo.
MOV AL,11B ;Valor del pixel a usar
MOV CX,0A0H ;Posicin del pixel
MOV DX,64H
INT 10H
Descripcin: Trabaja en modo de resolucin grfica media o alta aunque el efecto para cada una es diferente.
En resolucin media usando adaptador CGA el contenido de AL puede variar desde 0 a 3. El efecto en el monitor del valor del
pixel depende del color de la paleta en uso. El resultado de los valores en AL pueden ser:
En alta resolucin el valor de AL puede variar entre 0 y 1. Estos valores corresponden a si el pixel est apagado (negro) o
encendido (blanco)
S el bit ms significativo de AL es 1, se hace un OR exclusivo del color del pixel con este bit
25
No. 8
Servicios de Video.
Diferentes tipos de adaptadores de display.
- IBM Monochrome Display Adapter (MDA) (720 x 350 pixels) (9 x 14 pixels por caracter)
- Hercules Graphics Adapter (HGA) (igual a la MDA)
- IBM Color Graphics Adapter (CGA)
- IBM Enhanced Graphics Adapter (EGA)
- IBM Multi-Color Graphics Array (MCGA)
- IBM Video Graphics Array (VGA)
Combinacin Color
0000 Negro
0001 Azul
0010 Verde
0011 Cyan
0100 Rojo
0101 Lila
0110 Marrn
0111 Blanco
1000 Grs
1001 Azul Claro
1010 Verde Claro
1011 Cyan Claro
1100 Rojo Claro
1101 Lila Claro
1110 Amarillo
1111 Blanco (alta intensidad)
.DATA
COMMENT|
;Cada linea posee 61 (3DH) caracteres de los cuales se imprimiran en pantalla 60 (3CH) el
ultimo caracter de cada linea "~" no se imprime pero indica que es el fin de la linea.|
MENSAJE1 DB "Este programa ha sido diseado para probar como se~"
DB "utiliza la memoria RAM de video, en lo que se refiere~"
DB "a salvar un rea de la memoria de la mencionada RAM,~"
DB "en el segmento de datos, para luego restaurarlo nuevamente.~"
ATRIBUTO DB ?
CESI DW ? ;Coordenada de la esquina superior izquierda del rectangulo.
CEID DW ? ;Coordenada de la esquina inferior derecha del rectangulo.
CESI1 DW ?
UT_1 DW ?
UT_2 DW ?
FILA DB ?
COLUMN DB ?
CESI_REC DW ?
FILA_REC DB ?
COLUMN_REC DB ?
Monitor_Addr DW ?
BUF DW 2000 DUP (?)
.CODE
INICIO: MOV DX,SEG MENSAJE1
MOV DS,DX
CALL FINDCARD
MOV CESI,050AH
MOV CEID,0845H
CALL CALCULA
; CALL SALVA_VIDEO ;OJO
MOV SI,OFFSET MENSAJE1
MOV ATRIBUTO,3EH
CALL MUESTRA
MOV AH,00H
INT 16H
CALL SALVA_VIDEO
MOV SI,OFFSET MENSAJE2
MOV ATRIBUTO,4FH
CALL MUESTRA
MOV AH,00H
INT 16H
CALL RECUPERA
MOV AX,4C00H
INT 21H
MUESTRA: PUSH ES
MOV CX,0004H
MOV AX,MONITOR_ADDR
MOV ES,AX
MOV DI,CESI1
MOV UT_1,DI
OTRA_LINEA: CALL TEXTO
INC SI
ADD UT_1,00A0H
MOV DI,UT_1
LOOP OTRA_LINEA
POP ES
RETN
COMMENT| Esta rutina copia en el segmento de datos la porcion de la RAM de video especificada
por las coordenadas.|
SALVA_VIDEO: PUSH ES
MOV AX,MONITOR_ADDR
MOV ES,AX
MOV SI,CESI1
MOV CESI_REC,SI
MOV UT_1,SI
MOV CH,FILA
MOV FILA_REC,CH
MOV CL,COLUMN
MOV COLUMN_REC,CL
MOV DI,OFFSET BUF
SIG_FILA: MOV SI,UT_1
MOV CL,COLUMN
PROXIMO: MOV AX,ES:[SI]
MOV DS:[DI],AX
ADD SI,0002H
ADD DI,0002H
DEC CL
JNZ PROXIMO
ADD UT_1,0A0H
DEC CH
JNZ SIG_FILA
POP ES
RETN
30
COMMENT|
Esta rutina convierte el valor de filas y columnas en DX a su correspondiente valor en la RAM
de video, el cual se retorna tambien en DX.|
CONVERT: PUSH AX
PUSH CX
PUSH BX
MOV AX,0000H
MOV BX,0000H
MOV CX,0000H
MOV AL,DH
MOV BL,0A0H
MUL BL
MOV CL,DL
ADD CX,CX
ADD AX,CX
MOV DX,AX
POP BX
POP CX
POP AX
RETN
Subdivisin de un disco.
Densidad
Tipo LD HD Bytespo Sectores Tracks Lados Capacid
r sector por por lado ad
Track
5 1/4 X 512 9 40 2 360 KB
5 1/4 X 512 15 80 2 1,2 MB
3 1/2 X 512 9 80 2 720 KB
3 1/2 X 512 18 80 2 1,44 MB
32
Interleave.
Salidas : Ninguna.
Entradas: AH = 19H
Entradas: AH = 2FH
El nmero del drive en este caso "0"representa el drive por defecto y el 1 = A, 2 = B, etc.
Entradas: AH = 36H
DL = Nmero del drive.
Entradas: AH = 39H
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3AH
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3BH
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3CH
CX = Atributo del archivo.
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3DH
AL = Cdigo para abrir. (02H para escritura y lectura)
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3EH
BX = File Handle.
Entradas: AH = 40H
BX = File Handle.
CX = Cantidad de bytes a escribir.
DX = Offset de la direccin del buffer desde donde se tomarn los datos.
DS = Segmento de la direccin del buffer desde donde se tomarn los datos.
Entradas: AH = 41H
DX = Offset de la direccin de la ruta.
DS = Segmento de la direccin de la ruta.
Entradas: AH = 3FH
BX = File handle
CX = Cantidad de bytes a leer.
DX = Offset de la direccin del buffer.
DS = Segmento de la direccin del buffer.
Entradas: AH = 56H
DX = Offset del nombre del archivo viejo.
DI = Offset del nombre del archivo nuevo.
DS = Segmento de la direccin del buffer del nombre del archivo viejo.
ES = Segmento de la direccin del buffer del nombre del archivo nuevo.
Hacer un ejemplo.
36
No. 11
Puerto Serial.
Entrada:
AH = 00H
AL = Paramtro de inicializacin
DX = Puerto de comunicacin. (0 = COM1, 1 = COM2, 2 = COM3 y 3 = COM4)
Salida:
AH = Estado de lnea.
AL = Estados del modem.
Entrada:
AH = 01H
AL = Byte a enviar.
DX = Puerto de comunicacin.
Salida:
AH = Estado de lnea.
Entrada:
AH = 02H
DX = Puerto de comunicacin.
Salida:
AH = Estado de lnea.
AL = Caracter recibido.
Entrada:
AH = 03H
DX = Puerto de comunicacin.
Salida:
AH = Estado de lnea.
AL = Estado del modem.
Unir 4 con 6
Unir 7 con 8
Pin2 = RxD
Pin3 = TxD
Pin5 = GND
38
No. 12
Ubicacin de las interrupciones externas.
Nivel de Entrada Offset dentro de
Prioridad Maestro Esclavo Funcin la tabla de Vectores INT
0 IRQ0 Salida del Timer 0
1 IRQ1 Teclado (buffer de salida lleno) 24H 09H
2 IRQ2 IRQ8 Reloj de tiempo real 1C0H 70H
IRQ9 Redireccionda por software a la INT 0AH 1C4H 71H
IRQ10 Reservada para el BIOS 1C8H 72H
IRQ11 Reservada para el BIOS 1CCH 73H
IRQ12 Reservada para el BIOS 1D0H 74H
IRQ13 Coprocesador 1D4H 75H
IRQ14 Controlador de Disco Duro 1D8H 76H
IRQ15 Reservada para el BIOS 1DCH 77H
3 IRQ3 COM2 2CH 0BH
4 IRQ4 COM1 30H 0CH
5 IRQ5 LPT2 34H 0DH
6 IRQ6 Controlador de diskkette 38H 0E H
7 IRQ7 LPT1 3CH 0FH
Salida:
BX = Offset de la direccin de la rutina de servicio.
ES = Segmento donde se encuentra la rutina de servicio.
Salida:
No altera ningn registro.
Salida de las rutinas de servicio.
MOV AL,20H ;Comando para avisar al 8259 que la rutina de servicio termin.
OUT 0A0H,AL ;Reabilita al 8259-2 para interrumpir.
OUT 20H,AL ;Reabilita al 8259-1 para interrumpir.
IRET ;Retorno de la rutina de servicio.
39
No. 13
Comment |
****************************************************************************************
Proposito: Este programa TSR actua como una funcion, para blanquear o
escribir en el monitor. Contiene dos funciones las cuales
se describen a continuacion:
AH Funcion
0 Blanquea la pantalla, y lleva el cursor al principio de la misma.
1 Imprime el string apuntado por DS:SI el cual debe terminar con el valor 00H
Este programa TSR es pasivo. Se puede usar desde otro programa invocando la INT 78H con AH cargado
con la funcion deseada.
****************************************************************************************|
.MODEL tiny ;Para crear un programa .COM
.CODE
ORG 100H
INICIO: JMP Cargador ;Va a la parte transitoria o cargador del programa TSR.
;******************************************************************
; Area para datos dentro del CODE SEGMENT.
;******************************************************************
IntUse EQU 78H ;Interrupcion a usar
EnvBlock EQU 2CH
ErrMsg DB "Lamentablemente el vector est siendo utilizado",13,10,0
;******************************************************************
; Area de programa.
;******************************************************************
;******************************************************************
; Lo siguiente es la nueva rutina de servicio para la INT 78H la cual limpia la pantalla
; y lleva el cursor al comienzo de la pantalla.
;******************************************************************
NewInt: CMP AH,0 ;Desea limpiar la pantalla?
JNE NI1 ;No, continua
CALL Cls ;Si, limpiar.
JMP NI9
NI1: CMP AH,1 ;Desea imprimir string?
JNE NI9 ;No, continua
CALL PrtString ;Si, imprime
NI9: IRET ;Retorna de la INT 78H
;******************************************************************
; Limpia la pantalla y lleva el cursor al comienzo de la misma.
;******************************************************************
CLS: MOV AH,8 ;Lee caracter y atributo de la pantalla
MOV BH,0 ;Asume pgina 0
INT 10H
MOV BH,AH ;Almacena el atributo (fondo).
MOV AH,6 ;Inserta lineas hacia arriba.
MOV AL,0 ;# de lineas a insertar.
MOV CX,0 ;Fila y columna de la esquina superior izquierda
MOV DH,24 ;Fila de la esquina inferior derecha.
MOV DL,79 ;Columna de la esquina inferior derecha.
INT 10H
MOV DX,0 ;Posiciona el cursor en la esquina superior izquierda de la pantalla.
MOV BH,0 ;Asume pagina 0 de video.
MOV AH,2
INT 10H
RET
;**************************************************************************
40
; La siguiente rutina imprime en la pantalla un String terminado en 00H apuntado por DS:SI.
;**************************************************************************
PRTSTRING: MOV DL,[SI] ;Recoje el caracter.
INC SI ;Queda apuntando al siguiente.
CMP DL,0 ;Fin del string?
JE PS2 ;Si, entonces termina.
MOV AH,02H ;No, imprimelo en la pantalla.
INT 21H
JMP PRTSTRING
PS2: RET
;******************************************************************
; Hasta aqui llega la parte residente del programa.
;******************************************************************
;******************************************************************
; De aqui en adelante comienza la parte transitoria del TSR.
; La cual se descarta despues de quedar instalada la INT 78H.
;******************************************************************
CARGADOR: MOV AL,IntUse ;Recoge la INT a usar.
MOV AH,35H
INT 21H
MOV AX,ES
ADD AX,BX ;Verifica si esta todo en cero.
CMP AX,0
JE COLOCA ;No esta siendo utilizada, colocar la nueva.
MOV SI,OFFSET ErrMsg ;Si se esta utilizando, envia mensaje de error.
CALL PrtString
MOV AH,4CH ;Termina con codigo.
MOV AL,01H
INT 21H
Comment |
*************************************************************************
Proposito: Blanquea, imprime texto en la pantalla y luego la blanquea.
*************************************************************************|
.MODEL small
.STACK 256
.DATA
IntUse EQU 78h ;Interrupcion a utilizar.
ErrMsg DB "CLRESCVI.COM no ha sido ejecutado$"
LIN1 DB 13,10,10,10,00
41
.CODE
INICIO: MOV AX,SEG ERRMSG
MOV DS,AX
MOV ES,AX
MOV AL,IntUse ;Recoge la INT a usar.
MOV AH,35h
INT 21h
MOV AX,ES ;Verifica si esta todo en cero.
ADD AX,BX
CMP AX,0
JNE AHI_ESTA ;Asume que si esta cargada.
MOV DX,OFFSET ErrMsg ;Apunta a mensaje de error.
MOV AH,9 ;Muestra el mensaje usando al DOS.
INT 21h
JMP Done