Você está na página 1de 41

1

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

- Comparacin de como se carga en memoria un programa .COM y uno .EXE

El DOS subdivide los 640K en dos grandes reas de memoria:


La primera contiene una parte del sistema operativo. Comienza en la direccin 0000:0000 y contiene la tabla de los vectores de
interrupcin y otras tablas internas, buffers y variables de memoria. La parte del sistema operativo que contiene, es la parte
residente del procesador de comandos y los manejadores de dispositivos "instalables" residentes.
La segunda est destinada para el TPA (Transient Program Area) el mismo contiene programas y el bloque de ambiente para su
ejecucin. El TPA comienza despus del rea reservada para el sistema operativo.
2

- Mapa de memoria de 1 MB

Bloque Direcciones Descripcin


0 0000:0000 RAM hasta 64K. Tabla de vectores del CPU, DOS
0000:FFFF y variables del BIOS.
1 1000:0000 RAM hasta 128K.
1000:FFFF
2 2000:0000 RAM hasta 192K.
2000:FFFF
3 3000:0000 RAM hasta 256K.
3000:FFFF
4 4000:0000 RAM hasta 320K.
4000:FFFF
5 5000:0000 RAM hasta 384K.
5000:FFFF
6 6000:0000 RAM hasta 448K.
6000:FFFF
7 7000:0000 RAM hasta 512K.
7000:FFFF
8 8000:0000 RAM hasta 576K.
8000:FFFF
9 9000:0000 RAM hasta 640K.
9000:FFFF
10 A000:0000 RAM adicional para vdeo
A000:FFFF
11 B000:0000 RAM de vdeo
B000:FFFF
12 C000:0000 Expansin de ROM BIOS
C000:FFFF
13 D000:0000 BASE para ROM
D000:FFFF
14 E000:0000 BASE para ROM
E000:FFFF
15 F000:0000 ROM BIOS
F000:FFFF
3

- 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.

Usos especiales de los registros.

Smbolo Nombre Uso


AX Acumulador Operaciones aritmticas, destino/fuente para I/O.
BX Base Apuntador para datos.
CX Contador Contador de lazos, contador para rotacin de bits.
DX Dato Operaciones aritmticas, direcciones I/O.
SP Stack Pointer Offset del tope del stack actual.
BP Base Pointer Apuntador dentro del marco del stack.
SI Indice fuente Instrucciones con string
DI Indice destino Instrucciones con string

Los registros asociados a los registros de segmentos:

Registro de Banderas (EFLAGS)

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.

VM (virtual mode) SF (sign flag)


RF (resume flag) ZF (zero flag)
NT (nested task flag) AF (auxiliary carry)
IOPL (I/O privilege level) PF (parity flag)
OF (overflow) CF (carry flag)
DF (direction flag)
IF (interrupt enable)
TF (trap flag)
5
Funcin de cada uno de los flags del sistema y de control.
VM: S es "1" le indica al p que va a operar como un 8086.
RF: Deshabilita la opcin de depurar (debugg).
NT: Controla el anidamiento de tareas.
IOPL: Se utiliza como mecanismo de proteccin para controlar el acceso al espacio de direcciones de I/O.
DF: S es "1" provoca en las instrucciones de string el auto decremento de los registros apuntadores, lo que significa que
manipula los strings de la direccin ms alta hacia la ms baja. S es "0" provoca el auto incremento de los registros apuntadores,
de la direccin ms baja hacia la ms alta.
IF: S es "1" permite el reconocimiento de la interrupcin mascarable, s es "0" no lo permite.
TF: S es "1" introduce al procesador en la modalidad de depuracin (single step).

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)

Parte del bus direccionable de acuerdo a las lneas byte enable.

Posibles configuraciones de las lneas byte enable.


6
Posible duplicacin de datos en el bus de datos.

Tipo de ciclo en los buses.

Organizacin fsica del espacio de direcciones de memoria.

NOTA: Observese como se almacenan los datos en los bancos de memoria.

Encausamiento de instrucciones (Pipelining).


7
No. 3
Modos de direccionamiento.
Fuente de los operandos:
- Registro.
- Memoria.
- Dispositivos de entrada y salida.

Los modos de direccionamiento del 80386DX estn clasificados en tres tipos:


- Direccionamiento de registros.
- Direccionamiento inmediato.
- Direccionamiento de memoria.

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

TASM Nombre /switch

-TLINK.EXE PROG. EXE


PROG.MAP

TLINK Nombre /switch

Switches importantes del TASM


/Zi y /ZD Generan informacin para que el programa sea depurado facilmente con el TD

Switches importantes del TLINK

/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).

- Formato para un programa en assembler.


.MODEL SMALL, BASIC
.STACK 256 ;El stack posee 256 Words
.DATA
VALORES DW 0001H,0203H,0405H,0607H,0809H,0A0BH,0C0DH,0E0FH
VALOR EQU 0002H

.CODE

BEGIN: MOV DX,SEG VALORES


MOV DS,DX
MOV BX,OFFSET VALORES
.
.
.
AQUI VA TODO EL PROGRAMA FUENTE.
.
.
.

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 XLAT CS:[BX] Despus XLAT Despus


CS = 2000H CS = 2000H CS = 2000H
DS = 0300H DS = 0300H DS = 0300H
BX = 0100H BX = 0100H BX = 0100H
AL = 0DH AL = 29H AL = 48H

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.

PARA MUL, DIV E IDIV. PARA IMUL


14
DIV.
En la division cuando se utilizan operandos de distinto tamao se debe tener el cuidado de que el resulttado sea del tamao del
operando divisor, porque si es mas grande la operacin DIV va a arrojar un error de division por cero.
En resumen: s el divisor es un byte el cociente debe ser tambin un byte, esto se debe a que si el resultado no es un byte la
operacion intentar almacenar el resultado en AX pero AH tambien se utiliza para almacenar el resto, se presenta el problema de
que almacenar en AH si el resultado o el residuo, el fabricante solucion esto arrojando el error de divisin por cero.
Si se dese evitar este inconveniente se deben utilizar operandos del mismo tamao.

Ejem:

AX = 0304H AAD AX = 0022H


CL = 02H CL = 02H
DIV CL AX = 0011H
CL = 02H

Ejem:

AX = 0305H AAD AX = 0023H


CL = 02H CL = 02H
DIV CL AX = 0111H (AH es el residuo)
CL = 02H

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:

AL = 09H MUL CL AL = 0024H


CL = 04H CL = 04H
AAM AX = 0306H
CL = 04H
15
No. 5
Investigar :
La instruccin LOOP y sus variantes:
LOOPE/LOOPZ
LOOPNE/LOOPNZ
Instrucciones lgicas (AND, OR, XOR, NOT)
Las Instrucciones de comparacin, salto incondicional y salto condicional.
Instrucciones de rotacin: con carry (RCL , RCR), Sin carry (ROL, ROR)
Comparar y rastrear STRINGS :
CMPSB, CMPSW, CMPSD
SCASB, SCASW, SCASD
El prefijo REP en el manejo de STRINGS y sus variantes:
REPE/REPZ
REPNE/REPNZ
Carga y almacenaje de Strings (STOSB, STOSW, STOSD, LODSB, LODSW, LODSD)

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.

Instrucciones de desplazamiento (SHL, SAL, SHR, SAR, SHLD, SHRD)


Operandos permitidos para las instrucciones (SHL, SAL, SHR, SAR)

Desplazamiento lgico y aritmtico a la izquierda: (SHL, SAL)


17
Desplazamiento lgico a la derecha (SHR)

Desplazamiento aritmtico a la derecha.

Instrucciones para prueba y rastreo de bits:

Para el caso de prueba de bits:


BT Bit test BT D,S
BTR Bit test y reset BTR D,S
BTS Bit test y set BTS D,S
BTC Bit test y complemento BTC D,S

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:

Para el caso de rastreo de bits:


BSF Rastrea el bit hacia adelante BSF D,S
BSR Rastrea el bit hacia atrs BSR D,S

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

Instrucciones para el control de flags:

LAHF Cargar AH con los Flags.


SAHF Almacenar AH en los flags.
CLC Borrar CF
STC Set CF
CMC Complementa CF
CLI Borrar IF
STI Set IF
CLD Borrar DF
STD Set DF
Llamado a subrutina.
Corto:
Para hacer la llamada se usa CALL ETIQUETA
Para salir se usa RETN

Largo:
Para hacer la llamada se usa CALL FAR PTR ETIQUETA
Para salir se usa RET o RETF

Manejo del STACK.


PUSHF
Almacena las banderas en el STACK

POPF
Recupera las banderas del STACK (OF, DF, IF, TF, SF, AF, PF y CF)
PUSHA POPA

PUSHAD POPAD

Instrucciones para el manejo de strings.


MOVSB MOVSW MOVSD
ES:DI DS:SI ES:DI DS:SI ES:DI DS:SI
SI=SI +/- 1 S DF = 0/1 SI=SI +/- 2 S DF = 0/1 SI=SI +/- 4 S DF = 0/1
DI=DI +/- 1 S DF = 0/1 DI=DI +/- 2 S DF = 0/1 DI=DI +/- 4 S DF = 0/1
Hasta que CX sea 0000H para cualquiera de los casos.
19
No. 6
Manejo de Servicios.
Servicios de teclado de la ROM BIOS. (INT 09H e INT 16H)
INT 09H (ISR "Interrupt Service Routine"): Se invoca va hardware cada vez que se pulsa una tecla.
INT 16H (DSR "Device Service Routine"): proporciona la interfaz por medio de la cual el sistema operativo o software de
aplicacin mantiene relacin con el buffer del teclado.
El DSR contiene funciones que pueden leer el buffer del teclado, escribirlo, verificar el estado del buffer, etc.

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

INT 16H servicio 02H.

Entrada: AH = 02H

Salida: AL = El estado de las teclas Shift.


B7 = 1 La tecla insert est activa.
B6 = 1 Caps Lock est activa.
B5 = 1 Num Lock est activa.
B4 = 1 Scroll Lock est activa.
B3 = 1 La tecla Alt est presionada.
B2 = 1 La tecla Crtl est presionada.
B1 = 1 El shift izquierdo est presionado.
B0 = 1 El shift derecho est presionado.

INT 16H servicio 00H.

Entrada: AH = 00H

Salida: AH = Cdigo de barrido o identificacin de caracteres especiales.


AL = Cdigo ASCII o cdigo de traduccin de caracteres especiales.

INT 16H servicio 01H.


Entrada: AH = 01H

Salida: AH = Cdigo de barrido o identificacin de caracteres especiales.


AL = Cdigo ASCII o cdigo de traduccin de caracteres especiales.
ZF = 0 si se ha pulsado una tecla. Es decir, se decide con JNZ.
ZF = 1 si no se ha pulsado tecla. Es decir, se decide con JZ.

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.

Establecer Modo de Vdeo (Interrupcin l0H, servicio 00H)


Registros de Entrada:
AH: 00H
AL: Modo de vdeo deseado

Registros de Salidad: Inalterados

Memoria Afectada: Normalmente la memoria de vdeo se blanquea a menos que el bit ms significativo de AL est en "1"

Establecer posicin del Cursor (Interrupcin 10H, servicio 02H)


Registros de Entrada:
AH: 02H
BH: Pgina de vdeo
DH: Fila para el Cursor
DL: Columna para el Cursor

Registros de salida: Inalterados

Memoria Afectada: Ninguna

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.

Seleccionar pgina de display activa (Interrupcin l0H, servicio 05H)


Registros de Entrada:
AH: 05H
AL: Pgina de display deseada

Registros de salida: Inalterados

Memoria Afectada: Este servicio determina que rea de vidoo ser desplegada.

Pginas de display para algunos Modos de display y tipos de adaptadores.


Nmero del Modo Adaptador de Display Rango de pginas
0 Todos 0-7
1 Todos 0-7
2 CGA 0-3
EGA/MCGA/vGA 0-7
3 CGA 0-3
EGA/MCGA/VGA 0-7
7 MDA 0
CGA/EGA/VGA 0-7
13 EGA/VGA 0-7
14 EGA/VGA 0-3
15 EGA/VGA 0-1
16 EGA/VGA 0-1
22
Escribir Carcter y Atributo (Interrupcin l0H, service 09H)
Registros de Entrada:
AH: 09H
AL: Cdigo ASCII del carcter
BH: Nmero de la pgina de vdeo
BL: Atributo de vdeo para el caracter en AL
CX: Cantidad de caracteres/atributo a mostrar

Registros de salida: Inalterados


MemoryAfectada: Este servicio modifica el rea de vdeo activa.

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.

Verificar el estado actual del vdeo (Interrupcin l0H, servicio 0FH)


Registros de Entrada:
AH: 0FH

Registros de salida:
AH: Ancho de la pantalla
AL: Modo actual de vdeo
BH: pgina active.

Memoria Afectada: Ninguna

Escribir cadena de caracteres (Interrupcin 21H, servicio 09H)


Registros de Entrada:
AH: 09H
DX: Offset de la direccin de la cadena
DS: Segmento de la direccin de la cadena

Registros de salida: Inalterados

Descripcin: La cadena de caracteres debe finalizar con el signo de dollar "$"

Buffered Input "Editor de lnea" (Interrupcin 21H, servicio 0AH)


Registros de Entrada:
AH: 0AH
DX: Offset de la direccin del buffer
DS: Segmento de la direccin del buffer

Registros de salida: Inalterados

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.

Modo Tipo Adaptador Definicin Caja Cars Cols


00h Texto CGA[3] 320x200 8x8 40x25 16
EGA[2,3] 320x350 8x14 40x25 16
MCGA 320x400 8x16 40x25 16
VGA[1] 360x400 9x16 40x25 16
0lh Texto CGA 320x200 8x8 40x25 16
EGA(2] 320x350 8x14 40x25 16
MCGA 320x400 8x16 40x25 16
VGA[1] 360x400 9x16 40x25 16
02h Texto CGA[3] 640x200 8x8 80x25 16
EGA[2,3] 640x350 8x14 80x25 16
MCGA 640x400 8x16 80x25 16
VGA[1] 720x400 9x16 80x25 16
03h Texto CGA 640x200 8x8 80x25 16
EGA[2] 640x350 8x14 80x25 16
MCGA 640x400 8x16 80x25 16
VGA[1] 720x400 9x16 80x25 16
04h Grfico CGA/EGA/ 320x200 8x8 40x25 4
MCGA/VGA
05h Grfico CGA/EGA[3] 320x200 8x8 40x25 4
MCGA/VGA 320x200 8x8 40x25 4
06h Grfico CGA/EGA/ 640x200 8x8 80x25 2
MCGA/VGA
07h Texto MDA/EGA 720x350 9x14 80x25 Mono
VGA[1] 720x400 9x16 80x25 Mono
08h Grfico PCjr 160x200 8x8 20x25 16
09h Grfico PCjr 320x200 8x8 40x25 16
0Ah Grfico PCjr 640x200 8x8 80x25 4
0Bh -
RESERVADO-
0Ch -
RESERVADO-
0Dh Grfico EGA/VGA 320x200 8x8 40x25 16
0Eh Grfico EGA/VGA 640x200 8x8 80x25 16
0Fh Grfico EGA/VGA 640x350 8x14 80x25 Mono
10h Grfico EGA/VGA 640x350 8x14 80x25 16
11h Grfico MCGA/VGA 640x480 8x16 80x30 2
12h Grfico VGA 640x480 8x16 80x30 16
13h Grfico MCGA/VGA 320x200 8x8 40x25 256

[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

Registros de Salida: Inalterados

Memoria Afectada: Este servicio modifica el rea de la pgina de vdeo activa

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:

Valor del Paleta Paleta


PIXEL 0 Color 1 Color
00 Background Background
01 Verde Cyan
10 Rojo Magenta
11 Marrn Blanco

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)

Localidades de memoria para MDA y HGA

Direccin de caracter Direccin de


Fila Columna Seg = B000 atributo Seg = B000
00 00 0000 0001
00 4F 009E 009F
01 00 00A0 00A1
01 4F 013E 0013F
17 00 0E60 0E61
17 4F 0EFE 0EFF
18 00 0F00 0F01
18 4F 0F9E 0F9F

Ecuaciones para el calculo de la posicin del caracter.

Posicin = (Fila x A0H) + (Columna x 2)


Configuracin de los bits de atributo para display monocromtico.
26

Configuracin de los bits de atributo para display a color.

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)

Interrupciones para escribir en modo texto.

Leer caracter y atributo donde se encuentre el cursor:


INT 10H
Entrada: AH = 08H
BH = pgina de video

Salida: AH = byte de atributo


AL = Cdigo ASCII del caracter.

Escribir caracter y atributo donde se encuentre el cursor:


INT 10H
Entrada: AH = 09H
AL = Cdigo ASCII del caracter a imprimir
BH = pgina de video
BL = Atributo del caracter en AL
CX = Nmero de caracteres / atributo a mostrar.

Salida: Los registros permanecen inalterados.


27

Algunos modos grficos:

Modo Pixels (col. x Texto


filas)
4 320 x 200 40 x 25
5 320 x 200 40 x 25
6 640 x 200 80 x 25
0D 320 x 200 40 x 25
0E 640 x 200 80 x 25
0F 640 x 350 80 x 25

(639)d = 027FH, (349)d = 015DH

Direcciones para la verificacin del tipo de monitor utilizado.

Dir. Log. Localidades Descripcin.


0040:0010 Byte POST equipment list 1
0040:0063 Word Puerto base para el video.

Significado de los bits de la direccion 0040:0010


28
No. 9
.MODEL SMALL
.STACK 256

COLOR EQU 0B800H


MONO EQU 0B000H

.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.~"

MENSAJE2 DB "El espacio que actualmente ocupa este mensaje en la pantalla~"


DB "ha sido resguardado en el segmento de DATOS una vez que se~"
DB "pulse cualquier tecla, este mensaje desaparece quedando en~"
DB "su lugar el antiguo texto. ~"

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

Findcard: MOV BX,0040H ;Busca el valor base del puerto.


MOV ES,BX
MOV Monitor_Addr,COLOR ;La tarjeta de color por defecto.
MOV BX,ES:10H ;Obtiene parametro del equipo.
AND BX,30H ;Se queda con los bits 5-4.
CMP BX,30H ;Es monocolor (bits=11)
JNE NotMono ;No se queda como esta.
MOV Monitor_Addr,MONO ;Si, se coloca en monocolor.
NotMono: RETN ;Retorna del llamado.
29
COMMENT|
Esta rutina calcula la cantidad de columnas que hay en cada fila y cuantas filas hay en el
rectangulo. Este calculo lo realiza a partir de las variables CESI y CEID.|
CALCULA: PUSH BX
MOV DX,CESI
CALL CONVERT
MOV CESI1,DX
MOV AX,CESI
MOV BX,CEID
SUB BH,AH
MOV FILA,BH
INC FILA
SUB BL,AL
MOV COLUMN,BL
INC COLUMN
POP BX
RETN

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

TEXTO: MOV AH,ATRIBUTO


NUEVO_CARAC: MOV AL,DS:[SI]
CMP AL,"~"
JE FIN
MOV ES:[DI],AX
ADD DI,0002H
INC SI
JMP NUEVO_CARAC
FIN: 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

;Esta rutina copia en la RAM de video lo salvado en el segmento de datos.


RECUPERA: PUSH ES
MOV AX,MONITOR_ADDR
MOV ES,AX
MOV SI,CESI_REC
MOV UT_1,SI
MOV CH,FILA_REC
MOV CL,COLUMN_REC
MOV DI,OFFSET BUF
SIG_FILA1: MOV SI,UT_1
MOV CL,COLUMN
PROXIMO1: MOV AX,DS:[DI]
MOV ES:[SI],AX
ADD SI,0002H
ADD DI,0002H
DEC CL
JNZ PROXIMO1
ADD UT_1,0A0H
DEC CH
JNZ SIG_FILA1
POP ES
RETN
END INICIO
END
31
No. 10

Breve explicacin de como se guardan los datos en la superficie del disco.

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.

Servicios de disco de la INT 21H

INT 21H servicio 0DH. Reset disk.


S hay informacin en el buffer la escribe. (no cierra el archivo)
Entradas: AH = 0DH

Salidas : Ninguna.

INT 21H servicio 0EH. Verificar drive por defecto.

Tiene dos propositos:


1.- Establecer el drive lgico por defecto. 0 = A, 1 = B, 2 = C etc.
2.- Indican cuantos drives lgicos existen en el sistema.
Entradas: AH = 0EH
DL = Drive deseado.

Salidas : AL = Cantidad de drives lgicos.

INT 21H servicio 19H. Verificar drive actual.

Entradas: AH = 19H

Salidas: AL = Nmero del drive. 0 = A, 1= B etc.

INT 21H servicio 2FH. Verificar Disk Transfer Area (DTA).

Devuelve la direccin del DTA actual.

Entradas: AH = 2FH

Salidas: BX = Offset de la direccion del DTA.


ES = Segmento del DTA.
33
INT 21H servicio 36H. Verificar espacio libre en disco.

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.

Salidas : AX = Sectores por Cluster.


BX = Clusters disponibles.
CX = Bytes por sector.
DX = Cluster por drive.

INT 21H servicio 39H. Crear subdirectorio.


La ruta y nombre del subdirectorio debe terminar con el caracter NULL = 0.

Entradas: AH = 39H
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 3AH. Remover subdirectorio.


La ruta y nombre del subdirectorio debe terminar con el caracter NULL = 0.

Entradas: AH = 3AH
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 3BH. Establecer subdirectorio.


La ruta y nombre del subdirectorio debe terminar con el caracter NULL = 0.

Entradas: AH = 3BH
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 3CH. Crear archivo.


Este servicio se utiliza para crear o truncar un archivo en disco. A diferencia de la INT 21H, 5BH

Entradas: AH = 3CH
CX = Atributo del archivo.
DX = Offset de la direccion de la ruta.
DS = Segmento de la direccin de la ruta.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).


34
INT 21H servicio 3DH. Abrir archivo.
En AL se debe cargar el modo que se utilizar al abrir el archivo.

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.

Salidas : AX = File handle cdigo de error. (s CF = "1" hay error).

INT 21H servicio 3EH. Cerrar archivo.


Cierra un archivo previamente abierto.

Entradas: AH = 3EH
BX = File Handle.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 40H. Escribir archivo.


Escribe en un archivo previamente abierto.

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.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 41H. Borrar archivo.

Entradas: AH = 41H
DX = Offset de la direccin de la ruta.
DS = Segmento de la direccin de la ruta.

Salidas : AX = Cdigo de error. (s CF = "1" hay error).


35
INT 21H servicio 3FH. Leer archivo.

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.

Salidas : AX = Cantidad de bytes leidos. (s CF = "0" ).


AX = Cdigo de error. (s CF = "1" hay error).

INT 21H servicio 56H. Renombrar archivo.

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.

Salidas : AX = Cantidad de bytes leidos. (s CF = "0" ).


AX = Cdigo de error. (s CF = "1" hay error).

Para investigar las Interrupciones:

INT 21H, 42H Mover puntero de archivo.


INT 21H, 43H Obtener atributos de un archivo.
INT 21H, 47H Obtener ruta.
INT 21H, 4EH Buscar primer nombre de archivo que coincida.
INT 21H, 4FH Buscar siguiente nombre de archivo que coincida.

Hacer un ejemplo.
36
No. 11
Puerto Serial.

Inicializacin del puerto de comunicacin (Interrupcin 14H servicio 00H)

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.

Significado de los bits en AL para la INT 14H , 00H


37
Transmitir caracter (INT 14H, 01H)

Entrada:
AH = 01H
AL = Byte a enviar.
DX = Puerto de comunicacin.

Salida:
AH = Estado de lnea.

Recibir caracter (INT 14H, 02H)

Entrada:
AH = 02H
DX = Puerto de comunicacin.

Salida:
AH = Estado de lnea.
AL = Caracter recibido.

Estado del puerto serial (INT 14H, 03H)

Entrada:
AH = 03H
DX = Puerto de comunicacin.

Salida:
AH = Estado de lnea.
AL = Estado del modem.

Significado de los bits en AH para la INT 14H , 03H

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

Puerto 21H. Habilitacin y deshabilitacin de las interrupciones (con 0 se habilita).

INT 21H servicio 35H. Verificar vector de interrupcin.


Entrada:
AH = 35H
AL = Nmero de la interrupcin.

Salida:
BX = Offset de la direccin de la rutina de servicio.
ES = Segmento donde se encuentra la rutina de servicio.

INT 21H servicio 25H. Establecer vector de interrupcin.


Entrada:
AH = 25H
AL = Nmero de la interrupcin.
DX = Offset de la direccin de la nueva rutina de servicio.
DS = Segmento donde se encuentra la nueva 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

COLOCA: MOV DX,OFFSET NewInt ;Nuevo offset de la rutina de servicio.


MOV AL,IntUse ;Redirecciona este vector para que
MOV AH,25H ;apunte a NewInt. (DS ya esta cargado)
INT 21H
MOV ES,DS:[EnvBlock] ;Recoge el segmento del bloque de ambiente.
MOV AH,49H ;libera la memoria que no se necesita.
INT 21H

MOV DX,OFFSET CARGADOR ;Fin del area residente.


MOV CL,4 ;Divide por 16
SHR DX,CL ;No en parrafos.
INC DX ;sumar 1 por seguridad.
MOV AL,0 ;Retorna el codigo de OK.
MOV AH,31H ;TSR function
INT 21H
END INICIO
END

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

DB "El virus Natas fue capturado en Santaf de Bogot el 31 de agosto",13,10,00H


DB "de 1994. Se recibieron las primeras muestras el 3 de septiembre y este",13,10,00H
DB "producto estuvo terminado dos das despus.",13,10,00H
DB "Natas es un virus hbrido, infecta Tablas de Particin, Sectores de",13,10,00H
DB "Arranque, archivos .COM y EXE. Adems es totalmente polimrfico en",13,10,00H
DB "archivos, en cada archivo infectado el virus est encriptado utilizando",13,10,00H
DB "una rutina de decodificacin completamente diferente. Por lo tanto las",13,10,00H
DB "bsquedas por medio de signaturas son totalmente ineficaces para",13,10,00H
DB "identificarlo. Este virus es tambin sigiloso, si est residente en",13,10,00H
DB "memoria no se detectan cambios en los archivos, sectores de arranque o",13,10,00H
DB "tablas de particin infectados. Los antivirus convencionales, basados en",13,10,00H
DB "chequeos de integridad y/o inmunizacin son totalmente ineficaces para",13,10,00H
DB "detectarlo y/o eliminarlo.",13,10,00H

.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

AHI_ESTA: MOV AH,00H


INT 78H
MOV CX,0014
MOV SI,OFFSET LIN1
LAZO: MOV AH,01H
INT 78H
LOOP LAZO
JMP DONE1
Done: MOV AX,4C01H
INT 21H
Done1: MOV AH,00
INT 16H
MOV AH,00H
INT 78H
MOV AX,4C00H
INT 21H
END INICIO
END

Você também pode gostar