Unidad 3 PDF
Unidad 3 PDF
Unidad 3 PDF
Contenido
Programación del microprocesador (primera parte)
Lenguajes de programación
Lenguajes de nivel bajo
Lenguajes de nivel medio
Lenguajes de alto nivel
Obtención de código objeto
Tipos de programación
Programación modular
Características de la programación modular
Ventajas de la programación mofdular
Programación estructurada
Programación concurrente
Programas concurrentes Programas
paralelos
Repertorio de instrucciones del lenguaje ensamblador
Instrucciones aritméticas
Instrucciones lógicas
Instrucciones de transferencia de datos
Instrucciones de bifurcación
Instrucciones de llamada a subrutina
Instrucciones misceláneas
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Programación del Microprocesador (Primera parte)
Lenguajes de programación
Ladillo
La portabilidad significa que es posible adaptar el software escrito para un
tipo de computador a otro tipo de computador, es decir con ninguno o con
mínimos cambios es posible obtener código objeto para diferentes
arquitecturas con la misma funcionalidad.
Ladillo
Un tipo de datos define un conjunto de valores que puede tener una variable
junto con un conjunto de operaciones que se pueden realizar sobre esta
variable.
Ensambladores:
TASM: Turbo Assembler.
MASM: Macro Assembler.
Encadenadores:
TLINK: Turbo Linker.
LINK: Linker.
Programación modular
Ladillo
Un módulo generalmente corresponde a funciones específicas de un
programa; cada función podrá probarse y codificarse individualmente
constituyendo un módulo.
Programación estructurada
Programación concurrente
Ladillo
Se entiende un sistema de tiempo real, como aquel compuesto por un
conjunto hardware y software que se relaciona y responde a ciertos cambios
en el mundo real que interactúa con éste, a una escala temporal dictada por
sus necesidades. La velocidad de respuesta es tal, que el sistema puede
afectar sensiblemente el equipo controlador.
Programas concurrentes
Programas paralelos
• Instrucciones aritméticas
• Instrucciones lógicas
• Instrucciones de transferencia de datos
• Instrucciones de bifurcación
• Instrucciones de llamada a subrutina
• Instrucciones misceláneas
Instrucciones aritméticas
• Indirecto sobre registro: en este modo, uno de los registros índice, apunta a
la posición de memoria que contiene el valor de uno de los operandos, el otro
operando se encuentra en un registro. Por ejemplo, el registro SI contiene el
valor 7324H, si se efectúa la operación ADD AL, [SI], significa que se está
sumando el valor contenido en la posición de memoria 7324H al valor
contenido en el registro AL. Como el acceso a uno de los operandos se hace
vía un apuntador, se le conoce a este modo como indirecto.
Actividad 4.1:
Instrucciones lógicas
Actividad 4.2
Elabore una tabla con las instrucciones lógicas que puede ejecutar el
microprocesador INTEL 8086, con la misma clasificación de la actividad 4.1.
Instrucciones de bifurcación
Actividad 4.4
Instrucciones misceláneas
Son otras instrucciones que funcionalmente no están cobijadas por los tipos
anteriormente mencionados; pueden existir varias dependiendo del
microprocesador. De manera general las otras instrucciones que puede disponer
un microprocesador son:
Actividad 4.5
Resumen
Bibliografía recomendada
Nexo
Tabla de contenido
Contenido
Programación del microprocesador (segunda parte)
Introducción
Formato de las instrucciones de lenguaje ensamblador
Identificador
Operacion
Operandos
Comentarios
Directivas del lenguaje ensamblador
Estructura del código fuente
Ensamblado de un programa fuente
Enlazado de un programa objeto
Ejecución de un programa
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Programación del microprocesador (segunda parte)
Indicadores de logro
Cada línea de código con la estructura anterior, puede llegar hasta 512 caracteres
de longitud; como separador de parámetros se usa un espacio en blanco o un
tabulador. A continuación se presentan ejemplos de cada caso:
Un identificador puede estar conformado por las letras del alfabeto, los dígitos del
0 al 9, signos de interrogación, carácter de subrayado, el signo $, el signo de
arroba y el punto (un punto no puede ser el primer carácter). En el lenguaje
ensamblador no hay distinción entre letras mayúsculas o minúsculas.
Operación
Operandos
Los operandos son parámetros que no siempre son requeridos en una línea de
código en ensamblador. Si es requerido, proporciona la información para la
operación que se efectúa sobre él. Para un elemento de datos (constante o
variable), el operando identifica el valor inicial. Para una instrucción, un operando
indica en dónde realizar la acción; una instrucción puede tener uno o dos
operandos o ninguno, depende del tipo de operación. A continuación se pueden
observar algunos ejemplos de tipos directivas e instrucciones con sus respectivos
operandos.
Ejemplos de directivas:
Comentarios
Observación
Una convención general es codificar todas las instrucciones y sus operandos en
mayúsculas y los comentarios en minúsculas, con el fin de darle mayor claridad al
código.
Directivas de lenguaje ensamblador
Observación
El nombre de un segmento debe estar en presente, ser único y cumplir con las
convenciones para nombres del lenguaje.
• END: Esta directiva finaliza todo el programa, se usa como parámetro de esta
directiva el nombre del procedimiento definido como FAR (procedimiento
principal. El formato es como se indica a continuación:
END PRINCIPAL
• DW: Cumple el mismo papel de DB pero en este caso define variables de una
o más palabras (words), un word consta de dos bytes. Algunos ejemplos de su
formato son:
• DD: Define variables de uno o más palabras dobles, cada palabra doble consta
de 4 bytes. La sintaxis es muy similar al DB y DW.
• DF: Define una palabra larga de 6 bytes, se usa a partir del 8086 y
procesadores posteriores.
• DQ: Define elementos que tienen una longitud de cuatro palabras (8 bytes), se
pueden definir uno o más elementos, cada uno con una longitud de 8 bytes.
El valor antes definido puede ser usado en otras partes del programa como si se
tratara del dato inicial así:
;-------------------------------------------------------------------------------------------------
; Definición del segmento de pila
;-------------------------------------------------------------------------------------------------
PILA SEGMENT PARA STACK 'stack'
DW 32 DUP(0);Define 32 palabras (64 bytes)
PILA ENDS ;Fin del segmento de pila
;-------------------------------------------------------------------------------------------------
; Definición del segmento de datos
;-------------------------------------------------------------------------------------------------
DATOS SEGMENT PARA 'data'
VARIABLE DB 123 ; Define una variable de un byte
DATOS ENDS ;Fin del segmento de datos
;-------------------------------------------------------------------------------------------------
; Definición del segmento de código
;-------------------------------------------------------------------------------------------------
CODIGO SEGMENT PARA 'code'
Ejemplo
C:\>TASM prueba.asm
Actividad 5.2
1. Desde la línea de comandos del DOS digitar MAS ó TASM y determinar qué
parámetros pide el programa.
2. Codificar el programa presentado como ejemplo de estructura general y
ensamblarlo. Luego abrir cada archivo que genera el ensamblador con un
editor de texto y verificar su contenido. ¿Qué archivo no es posible editar?,
¿por qué?.
Actividad 5.3
Ejecución de un programa
Para ejecutar el programa basta con teclear su nombre desde la línea de comando
del DOS, en ese instante se da lugar al proceso de carga y ejecución del mismo.
Resumen
Bibliografía recomendada
Tabla de Contenido
Contenido
Depuración de un programa desarrollado en ensamblador
El programa DEBUG
Comandos del DEBUG
Sintaxis de los comandos del DEBUG
Uso del DEBUG
Verificación de posiciones de memoria
Despliegue de datos
Verificación del equipo instalado en el sistema
Verificación del tamaño de la memoria
Verificación de otros datos importantes
Ejecución de un programa simbólico
Introducción de un programa en ensamblador
Creación y almacenamiento de un programa en ensamblador con
DEBUG
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Depuración de un programa desarrollado en ensamblador
Indicadores de logro
El programa DEBUG
Ladillo
Los DEGUGERS (depuradores), son herramientas que brindan las funciones
necesarias para hacer el seguimiento paso a paso de las ejecución de un
programa.
a) D DS: 200
b) DDS : 200
c) dds : 200
Se debe buscar en el directorio que contenga todos los programas del DOS; por lo
general se encuentra en (C:\DOS) o (C:\WINDOWS\COMMAND). En este
directorio se debe ejecutar el comando "DEBUG", en seguida debe aparecer un
guión (-), el cual indica que el programa está en ejecución y listo para recibir
comandos.
Despliegue de datos
Ejemplo 6.1
-D 40:100
0040:0100 00 00 07 00 00 00 40 00-00 A0 00 00 4C 2B 00 C0 ......@.....L+..
0040:0110 80 02 80 02 E0 01 08 10-01 08 01 04 00 18 01 00 ................
0040:0120 00 00 DF 02 25 02 3F 1B-FF 54 F6 0F 08 17 18 1C ....%.?..T......
0040:0130 00 00 00 00 00 00 00 00-0A 0A 0A 2E 7F 02 C0 9F ................
0040:0140 70 6A 00 F0 FF FF FF FF-C3 E2 00 F0 70 6A 00 F0 pj..........pj..
0040:0150 70 6A 00 F0 54 FF 00 F0-79 EA 00 F0 21 EA 00 F0 pj..T...y...!...
0040:0160 A5 FE 00 F0 87 E9 00 F0-70 6A 00 F0 70 6A 00 F0 ........pj..pj..
0040:0170 70 6A 00 F0 70 6A 00 F0-57 EF 00 F0 53 FF 00 F0 pj..pj..W...S...
Actividad 6.1
-d 40:10
0040:0010 23 C4 FE 80 02 92 10 20-00 00 20 00 20 00 0D 1C #...... .. . ...
BIT 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DATO 1 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1
Con este dato se deducen los dispositivos instalados según la siguiente tabla:
BITS DISPOSITIVO
15,14 Número de puertos paralelos; el valor se encuentra codificado en binario, de tal manera
que si se lee el dato 10, significa que hay dos puertos conectados.
13,12 Reservados.
11,10,9 Números de puertos seriales conectados. Si se lee el dato 011, significa que hay tres
puertos conectados.
8 Reservado.
7,6 Número de unidades de discos flexibles, en donde:
00 = 1, 01 = 2, 10 = 3, 11 = 4.
5,4 Modo de video, en donde:
01 = 40x25 a color
10 = 80x1225 a color
11 = 80x1225 monocromático
2,3 Reservados.
1 Indica si hay coprocesador matemático.
0 Indica si hay unidad de disco flexible presente.
Actividad 6.2
Los datos resultantes de los bytes 413H y 414H se deben invertir para obtener el
valor equivalente de kilobytes de memoria, el valor leído se encuentra en
hexadecimal por lo tanto hay que hacer la conversión a decimal.
Ejemplo 6.2
Actividad 6.4
Verificar los datos contenidos en las posiciones de memoria del punto anterior y
determinar su significado.
Ladillo
Un programa simbólico se refiere a aquel codificado en mnemónicos o lo
que es igual en lenguaje ensamblador.
14A5:0100
-U 100,106
14A5:0100 B032 MOV AL,32
14A5:0102 B364 MOV BL,64
14A5:0104 00D8 ADD AL,BL
14A5:0106 90 NOP
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=14A5 ES=14A5 SS=14A5 CS=14A5 IP=0100 NV UP EI PL NZ NA PO NC
14A5:0100 B032 MOV AL,32
-T
AX=0096 BX=0064 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=14A5 ES=14A5 SS=14A5 CS=14A5 IP=0106 OV UP EI NG NZ NA PE NC
14A5:0106 90 NOP
Actividad 6.5
MOV AL, AA
MOV AH, BB
MOV BX, 0
PUSH AX
POP BX
NOP
Resumen
Nexo
Una vez visto el formato de las instrucciones del lenguaje ensamblador y habiendo
aprendido a depurar un programa en este lenguaje, podremos continuar con el
estudio de los tipos de instrucciones del procesador, haciendo una clasificación
general según la funcionalidad de éstas y desarrollando ejercicios más complejos.
Este será el tema del siguiente fascículo, cuyo objeto será aprender los tipos de
instrucciones que tiene el procesador y su aplicación.
Autoevaluación formativa
Tabla de Contenido
Contenido
Instrucciones del microprocesador
Instrucciones del microprocesador
Instrucciones aritméticas
Instrucciones lógicas
Instrucciones de manipulación de datos
Instrucciones de manipulación de bits
Instrucciones de manipulación de cadenas
Instrucciones de comparación
Instrucciones de operaciones con las banderas
Instrucciones para operaciones con la pila
Instrucciones incondicionales para el control del programa
Instrucciones condicionales para el control del programa
Instrucciones para el control de ciclos
Instrucciones de entrada y salida de datos
Instrucciones de control del procesador
Modos de direccionamiento
Direccionamiento inmediato
Direccionamiento directo
Direccionamiento indirecto
Manipulación de registros y memoria
Movimiento de datos
Movimiento de datos entre operadores de longitud diferente
Intercambio de datos entre operadores
Inicialización de registros índices con una dirección
Toma de decisiones y control del programa
Transferencia de control
Saltos incondicionales (JMP)
Saltos condicionales (Jnnn)
Ciclos
Llamado a subrutinas
Llamado (CALL)
Regreso al punto en que fue invocada (RET)
Manipulación de datos binarios
Entrada y salida estándar de datos
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Instrucciones del microprocesador
Indicadores de logros
Instrucciones aritméticas
Instrucciones de comparación
Actividad 7.1
Modos de direccionamiento
Direccionamiento inmediato
Direccionamiento directo
Direccionamiento indirecto
En este tipo de acceso, los datos son apuntados por un registro índice, el cual
puede ser BX, DI y SI. Estos registros se asocian al registro apuntador de
segmento de datos DS, con el fin de apuntar a una posición específica de
memoria y efectuar operaciones sobre ella de manera indirecta. El registro índice
BP se asocia al registro SS con el fin de hacer operaciones sobre la pila.
Para indicar una dirección bajo este esquema, inicialmente se tiene que inicializar
el registro índice con la dirección (desplazamiento dentro del segmento de datos);
posteriormente, entre corchetes cuadrados, se apunta a la dirección antes cargada
con los desplazamientos requeridos.
Actividad 7.2
Observación
Es importante que el estudiante se familiarice con estas instrucciones mediante la
codificación de pequeños programas o el estudio de ejemplos.
Movimiento de datos
Es importante anotar que esta operación sólo es válida entre registros o entre un
registro y memoria. Como ejemplos podemos citar:
Esta instrucción permite inicializar los registros BX, DI o SI. Esta es una de las
operaciones más usadas en lenguaje ensamblador. Los siguientes ejemplos
ilustran algunas posibilidades de esta instrucción:
Etiqueta Instrucción Comentario
TABLA DB 20 DUP ? ;Tabla de 20 posiciones de un byte
LEA BX, TABLA ;Apunta BX a tabla
MOV [BX], 0 ;Carga cero en la posición cero
INC BX ;Incrementa apuntador
MOV [BX], 0 ;Carga cero el a posición uno
Actividad 7.3
Transferencia de control
Las instrucciones de control de flujo del programa son las de salto, las cuales
rompen la secuencia normal y redirigen (bifurcan) la ejecución hacia una posición
determinada; los saltos pueden ser incondicionales o condicionales.
Esta instrucción hace que el control del programa continúe en una determinada
posición de memoria apuntada por una etiqueta que se le pasa como argumento,
la etiqueta puede estar antes o después de la instrucción de salto. La sintaxis de
esta instrucción es:
Ciclos
Llamadas a subrutinas
Llamado (CALL)
El llamado a una subrutina se puede hacer dentro del mismo segmento (llamada
cercana) o en segmentos diferentes (segmento lejano); por ahora trataremos el
llamado cercano, en fascículos posteriores trataremos el llamado lejano. El
proceso que ejecuta el procesador al hacer el llamado a una subrutina es como
sigue:
La instrucción RET permite regresar el control del programa al punto en que fue
invocada la subrutina; para ello el procesador ejecuta el siguiente procedimiento.
Actividad 7.4
Actividad 7.5
Bibliografía recomendada
Nexo
1. Definir una tabla de datos que contenga los dígitos decimales en código ASCII.
2. Definir una tabla de datos vacía (sin inicializar) de 10 posiciones.
3. Crear una subrutina que, dado un dígito decimal codificado en ASCII, lo
convierta a código BCD.
4. El programa principal debe llamar mediante un ciclo a la subrutina antes
descrita para convertir todos los dígitos contenidos en la tabla de códigos
ASCII (fuente) y almacenar los resultados en la tabla vacía (destino).
5. Documentar al detalle la función que realiza cada línea de código.
Lenguaje de Máquina
Semestre 6
Fascículo No. 8
Tabla de Contenido
Contenido
Rutinas de servicio del BIOS y del sistema operativo (DOS)
Manejo de interrupciones
Atención de interrupciones de hardware.
Atención de interrupciones de software.
Interrupciones del BIOS
Interrupciones del DOS
Aplicaciones
Control del monitor
Control del teclado
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Rutinas de servicio del BIOS y del sistema operativo (DOS)
Las subrutinas del BIOS y del DOS para el acceso a dispositivos de entrada/salida
se invocan mediante la instrucción INT, tratada en la sección siguiente. Las
subrutinas en mención proporcionan diferentes servicios de acceso a dispositivos,
los cuales se solicitan pasando el valor que identifica a cada servicio en el registro
AH.
Manejo de interrupciones
Observación
Recuerde que una dirección de memoria que contiene una instrucción se
conforma por el contenido del registro código (CS) desplazamiento dado por el
apuntador de instrucciones (IP), conformando el formato
[segmento:desplazamiento].
Observación
La tabla de vectores de interrupción, contiene las direcciones de las subrutinas del
BIOS y del DOS disponibles para ser usadas por el programador. La posición de la
tabla es fija y se encuentra en memoria baja, pero su contenido es variable
dependiendo de la ubicación de las subrutinas en mención.
• INT 00H: División por cero. La invoca el procesador cuando hay un intento de
división por cero, su función es mostrar un mensaje de error.
• INT 01H: Ejecución paso a paso. Usado por los depuradores como el
DEBUG para permitir avanzar paso a paso en la ejecución de instrucciones de
un programa bajo prueba.
• INT 02H: Interrupción no enmascarable. Usada cuando se presentan
condiciones graves de error en el hardware.
• INT 03H: Punto de ruptura. Se usa por los programas depuradores para
detener la ejecución de un programa en cierto punto.
• INT 04H: Desbordamiento. Lo invoca el sistema por causa del
desbordamiento en el resultado de una operación aritmética.
• INT 05H: Impresión en pantalla. Permite imprimir el contenido de la pantalla.
• INT 08H: Reloj del sistema. Corresponde a la subrutina de servicio para una
interrupción de hardware que actualiza la hora del sistema y la fehca si es
necesario. El dispositivo temporizador genera la interrupción cada 54.9254
mseg, es decir se generan alrededor de 18.2 interrupciones por segundo.
• INT 09H: Interrupción del teclado. Se genera al presionar o soltar una tecla
en el teclado.
• INT 0BH: Control del puerto serial COM1. Controla el puerto indicado.
• INT 0CH: Control del puerto serial COM2. Controla el puerto indicado.
• INT 0DH: Control del puerto paralelo LPT2. Controla el puerto indicado.
• INT 0EH: Control de la unidad de disco flexible. Señala la operación del
dsico flexible, como la terminación de una operación de entrada/salida.
• INT 0FH: Control del puerto paralelo LPT1. Controla el puerto indicado.
• INT 10H: Despliegue en video. Proporciona los servicios necesarios para el
despliegue de información en el monitor.
• INT 11H: Determinación del equipo. Determina los dispositivos opcionales
que tiene conectados el sistema en el momento de encenderlo y almacena
esta configuración en la posición 40:10H.
• INT 12H: Determinación del tamaño de la memoria. Retorna en el registro
AX el tamaño de la memoria del sistema; el valor se da en Kbytes.
• INT 13H: Entrada/salida de datos en disco. Provee los servicios necesarios
para el acceso a disco, tales como la verificación de estado, formato, escritura
y lectura de datos.
• INT 14H: Comunicación de entrada/salida. Provee las funciones necesarias
para establecer una comunicación serial a través de uno de los puertos COM.
• INT 15H: Servicios del sistema. Proporciona los siguientes servicios:
autoprueba de encendido; lectura del estado del sistema; soporte a joystick;
determina el tamaño de la memoria extendida; conmuta el procesador a modo
protegido; provee la funcionalidad de la interfaz con el mouse.
• INT 16H: Entrada desde teclado. Provee los servicios necesarios para el
manejo de entrada de datos desde el teclado.
• INT 17H: Salida a la impresora. Proporciona los servicios necesarios para el
control de impresión.
• INT 18H: Entrada al programa BASIC de la ROM. Se usaba cuando los PC
no disponían de disco duro y en el arranque no tenía discos flexibles con el
sistema operativo.
• INT 19H: Cargador de arranque. Si hay un disco de arranque en el sistema,
esta función lee la pista 0, sector 1 y transfiere las instrucciones leídas a la
posición 7C00H y transfiere el control a esta localidad.
• INT 1AH: Leer y establecer hora. Lee y fija la hora del sistema.
• INT 1BH: Tomar control de una interrupción de teclado. Cuando son
presionadas las teclas CTRL + BREAK, el control es transferido a una dirección
de interrupción en donde la bandera esté en 1.
Observación
En los siguientes fascículos se estudiará la funcionalidad de algunas de las
interrupciones antes mencionadas, se determinará su aplicabilidad y forma de
emplearlas.
Observación
En los fascículos siguientes centraremos nuestra atención en el estudio de los
servicios proporcionados por la función 21H, ya que estos brindan la mayor
funcionalidad del DOS para los programas de usuario desarrollados en
ensamblador para PC.
Aplicaciones
Las funciones proporcionadas por el BIOS y el DOS proveen una gran cantidad de
servicios de control sobre el hardware, de manera que el diseñador y constructor
de programas de usuario las emplee de manera transparente. Sin estas funciones
resultaría bastante complejo el desarrollo de programas en ensamblador para PC,
ya que el diseñador tendría que conocer muy de cerca la arquitectura y
organización del hardware del sistema para poder controlarlo. Entre las
aplicaciones de éstas funciones tenemos: control del monitor y control del teclado.
Actividad 8.1
Desarrolle un programa .COM que borre la pantalla y despliegue los 256 códigos
ASCII. Para ello tenga en cuenta lo siguiente:
2. La mayoría de los 256 caracteres ASCII están representados por símbolos que
se pueden desplegar; algunos valores como 00H o FFH, pueden no tener un
símbolo desplegable y aparecen como un espacio en blanco. Para desplegar
cada carácter tenga en cuenta:
- Usar al INT 21H función 09H; este valor se debe inicializar en el registro AH
antes de invocar la función.
- El valor a desplegar debe permanecer en una variable tipo byte, a cuya
dirección debe estar apuntando el registro DX.
- Para imprimir los 25 caracteres se debe usar la instrucción LOOP con
ayuda del contador CX.
Al igual que el monitor, la entrada de datos básica se efectúa a través del teclado.
Entre los servicios primarios que se pueden obtener para tal fin son:
• Entrada de datos desde teclado sin repetición en pantalla: INT 21H, función
08H.
• Entrada de datos desde teclado: INT 21H, función 0AH.
Actividad 8.2
Crear un programa .COM que lea el teclado y almacene los datos leídos en un
vector. Los pasos a seguir para la realización de este programa son:
1. Definir el vector del tamaño que desee e inicializarlo con el código ASCII del
espacio en blanco.
2. Es necesario inicializar una estructura con los parámetros de lectura requeridos
por el servicio. Esta estructura se crea en el segmento de datos de la siguiente
manera:
Resumen
Bibliografía recomendada
Nexo
En el fascículo siguiente trataremos en detalle las funciones del BIOS y del DOS
referentes a la entrada y salida básica de datos en el PC. Se estudiará cada uno
de los servicios provistos por las funciones involucradas en estos procesos.
Autoevaluación formativa
Tabla de contenido
Contenido
Entrada y salida de datos por teclado y por pantalla (primera parte)
Control y salida de datos por pantalla
Ubicación del cursor
Limpiar la pantalla
Control de entrada de datos desde teclado
Entrada por teclado
Uso de caracteres para desplegar
Despliegue de un solo carácter
Manejadores de archivo
Control de salida de datos con manejadores de archivos
Control de entrada de datos con manejadores de archivo
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Entrada y salida de datos por teclado y por pantalla (primera parte)
En este fascículo se tratará el manejo de las INT para el despliegue por pantalla y
el manejo de entradas por teclado, los requisitos necesarios para especificar los
dispositivos de entrada o salida y solicitar las operaciones de atención a estos
dispositivos.
Indicadores de logro
Limpiar la pantalla
Observación
Recuerde que :
La INT 10H de la BIOS permite el manejo de video.
La INT 21H del DOS permite el despliegue en pantalla y la entrada por teclado.
Las funciones definidas para cada INT se definen en el registro AX, y los
parámetros de cada función se definen en registros como CX, DX, DI, SI, BP.
Actividad 9.1
Utilice el debug para ejecutar los ejemplos de las funciones 02H y 06H para INT
10H y observe su comportamiento
La función 0AH de la INT 21H es utilizada para aceptar datos desde el teclado.
Esta función requiere la definición de algunos parámetros de acuerdo con el
procesamiento de la INT. Indique el número máximo de caracteres de entrada,
defina un byte para almacenar el número de caracteres introducidos por el
usuario; éste se almacena como un valor binario, y un tercero para almacenar los
caracteres tecleados desde izquierda a derecha.
Actividad 9.2
Manejadores de archivo
Manejador Dispositivo
00 Entrada, por el teclado (CON)
01 Salida, por la Pantalla (CON)
02 Error en la entrada, pantalla (CON)
03 Dispositivo auxiliar (AUX)
04 Impresora (LPT1 o PRT)
Manejadores de archivo para despliegue en pantalla
La función 40H de la INT 21H del DOS utiliza los manejadores de archivo para
realizar despliegues.
La función 3FH de la INT 21H de DOS utiliza manejadores de archivo para solicitar
la entrada de datos desde teclado.
Actividad 9.3
Observación
Recuerde utilizar la opción P del debug para ejecutar una instrucción de llamado a
interrupción o llamado a subrutina. Para ejecutar paso a paso una subrutina utilice
la opción T del debug.
Resumen
Bibliografía recomendada
Nexo
Tabla de Contenido
Contenido
Entrada y salida de datos por teclado y por pantalla (segunda parte)
Adaptadores de video
Modo texto
Byte de atributo
Paginas de pantalla
Interrupción 10H de Bios para manejo de video, modo texto
Modo gráfico
Interrupción 10H del BIOS para gráficos
Procesamiento avanzado de teclado
Interrupción 21H de DOS para entrada desde teclado
Interrupción 16H De Bios para entrada desde teclado
Teclas de función extendida y códigos de rastreo
Interrupción 09H de Bios para entrada desde teclado
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Entrada y salida de datos por teclado y por pantalla (segunda parte)
Indicadores de logros
Adaptadores de video
El controlador de video, genera las señales de rastreo del monitor para el modo
seleccionado, texto o gráfico. El procesador envía instrucciones a los registros del
controlador y lee ahí la información de estado. El video de BIOS, que actúa como
una interfaz con el adaptador de video, contiene rutinas como para establecer el
cursor y desplegar caracteres. El área de despliegue de video en memoria
contiene la información que el monitor va a mostrar. Las interrupciones que
manejan el despliegue en pantalla de forma directa transfieren sus datos a esta
área.
Modo texto
Los modos texto 00H (mono) y 01H (color) permiten usar el formato de 40
columnas. Los modos texto 02H (mono) y 03H (color) proporcionan el formato
convencional de 80 columnas. Los modos 0 y 2 son de “color suprimido”, aunque
en muchos monitores salen también en color (y no en tonos de gris). El modo texto
07 (mono) es el modo estándar monocromático para MDA, EGA y VGA, ofrece
respetables resoluciones en la pantalla.
Byte de atributo
Despliegue monocromático
Despliegue a color
En muchos monitores a color, el fondo puede mostrar uno de ocho colores y los
caracteres pueden mostrar uno de 16 colores. La intermitencia e intensidad sólo
se aplican al primer plano. También puede seleccionar uno de 16 colores para el
borde. Los monitores de color no permiten subrayado; en lugar de eso, al
establecer un bit en 0 selecciona el color azul como primer plano.
Los colores básicos rojo, verde y azul puede combinarlos en el byte de atributo
para formar un total de ocho colores (incluyendo blanco y negro) y puede
establecer alta intensidad, para un total de 16 colores.
Color I R G B Color I R G B
Negro 0 0 0 0 Gris 1 0 0 0
Azul 0 0 0 1 Azul Claro 1 0 0 1
Verde 0 0 1 0 Verde Claro 1 0 1 0
Cian 0 0 1 1 Cian Claro 1 0 1 1
Rojo 0 1 0 0 Rojo Claro 1 1 0 0
Magenta 0 1 0 1 Magenta Clara 1 1 0 1
Cafe 0 1 1 0 Amarillo 1 1 1 0
Blanco 0 1 1 1 Blanco Brillante 1 1 1 1
Si los colores del fondo y del primer plano son iguales, el carácter mostrado es
invisible. El byte de atributo es utilizado de la misma manera como se mostró con
un monitor monocromático.
La INT 10H de BIOS define una serie de servicios para el manejo de video,
dependiendo del valor que se carga en el registro AX, los registros BX, CX, DX,
DI, SI, y BP no se modifican, y se utilizan para pasar parámetros a los servicios.
La función 01H permite ajustar el tamaño vertical del cursor. En CH (bits 0-4) se
define la parte superior del cursor, y en CL (bits 0-4) la parte inferior del cursor.
Puede ajustar el tamaño del cursor entre la parte superior y la parte inferior 0:14
para VGA, 0:13 para monocromático y EGA y 0:7 para CGA. Para un CGA.
Establecer la posición del cursor
La función 03H permite ubicar la posición y el tamaño del cursor en el registro CX;
en CH la línea de rastreo inicial del cursor, en CL la línea de rastreo final del
cursor, en DH la fila y en DL la columna
La función 07H permite recorrer la pantalla desde abajo. Para modo texto, el
recorrido hacia debajo de la pantalla provoca que las filas inferiores desaparezcan
por la parte inferior y aparezcan líneas blancas en la parte superior.
La función 08H puede leer tanto el carácter como su atributo del área de
despliegue de video en los modos texto y grafico. En BH cargue el número de
página; la INT 10H devuelve en AL el carácter, y en AH su atributo.
Al cargar AH con 0FH se puede determinar el modo de video actual; esta función
devuelve AL con el modo actual de video, AH caracteres usados por línea, y BH el
número de página actual.
La función 13H permite desplegar cadenas y manipular los atributos. Los registros
ES:BP deben contener la dirección del segmento:desplazamiento de la cadena
que se despliega.
Actividad 10.1
Modo gráfico
Los adaptadores gráficos tienen dos modos de operación: texto (por Omisión) y
gráfico. Utilice la función 00H de la INT 10H para establecer el modo gráfico o de
texto (AL = 0CH modo grafico, AL = 03H modo texto).
Modo Texto Resolución Colores Segmento Tarjeta
---- ----- ---------- ------- -------- ---------------------
04h 40x25 320x200 4 B800 CGA, EGA, MCGA, VGA
05h 40x25 320x200 4 grises B800 CGA, EGA
05h 40x25 320x200 4 B800 CGA, VGA
06h 80x25 640x200 2 B800 CGA, EGA, MCGA, VGA
0Dh 40x25 320x200 16 A000 EGA, VGA
0Eh 80x25 640x200 16 A000 EGA, VGA
0Fh 80x25 640x350 2 A000 EGA, VGA
10h 80x25 640x350 4 A000 EGA con 64K
10h 80x25 640x350 16 A000 EGA con 256K, VGA
11h 80x30 640x480 2 A000 VGA, MCGA
12h 80x30 640x480 16/256k A000 VGA
13h 40x25 320x200 256/256k A000 VGA, MCGA
En los modos gráficos 04H, 05H, y 06H la dirección del área de despliegue de
video es B800[0]. Estos son los modos originales de CGA, que también son
utilizados por los EGA y VGA por su compatibilidad con posteriores. La dirección
de despliegue de video para los modos gráficos 0DH, 0EH, 0FH y 10H inicia en
A000[0]. Son los modos originales de EGA, que también son usados por VGA,
permiten usar 8, 4 y 2 páginas. La dirección de despliegue de video para los
modos gráficos 11H, 12H, y 13H está en A000[0]. Estos modos están diseñados
específicamente para VGA, no se pueden utilizar con otros adaptadores.
Observación
En modo gráfico, la ROM contiene patrones de puntos sólo para los 128
caracteres (inferiores). La INT 1FH proporciona acceso a un área de memoria de
1K que define los 128 caracteres superiores.
El modo gráfico utiliza píxeles para generar patrones en color. Cada píxel consta
de dos bits, estos dos bits definen cuatro colores, puede seleccionar el píxel 00
para cualquiera de los 16 colores disponibles para el fondo. Y puede seleccionar
los píxeles 01, 10, 11 para cualquiera de las tres paletas de colores:
C1 C0 Paleta 0 Paleta 1
0 0 Fondo Fondo
0 1 Verde Cian
1 0 Rojo Magenta
1 1 Café Blanco
Al igual que en modo texto se pueden utilizar los servicios de la INT 10H para el
manejo completo de la pantalla en modo grafico:
Esta función 0DH es inversa a la función 0CH; lee un punto para determinar el
número de su color. Establezca BH con el número de página, CX con la columna y
DX con la fila. Esta función regresa el color del píxel en el AL.
Actividad 10.2
El área de datos del BIOS en el segmento 40[17]H contiene un byte del estado
actual de shift del teclado; este indica lo siguiente:
La INT 21H de DOS define una serie de servicios para el manejo de entrada del
teclado. Algunos de los servicios de la interrupción que se pueden llamar son:
La función 01H, toma un carácter del buffer del teclado; si no está presente
ninguno espera una entrada del teclado. La operación regresa: AL con un número
distinto de uno si hay un carácter ASCII, y lo repite en la pantalla. AL en cero
significa que el usuario ha presionado una tecla de funciona extendida, y el AH
tiene la función original. La operación maneja las funciones ampliadas de manera
ineficiente intentándolas enviar a pantalla. Para obtener el código de rastreo para
la tecla de función en el AL, tiene que repetir de manera inmediata la INT 21H.
La función 07H, funciona igual que la función 01H, excepto que el carácter no se
repite en la pantalla y la operación no responde a una petición Ctrl Break.
La INT 16 del BIOS es utilizada para atención del teclado, proporciona los
siguientes servicios dependiendo de lo que se cargue en AH:
Leer carácter
La función 00H maneja las teclas del teclado de 83 teclas, pero no acepta
entradas adicionales del teclado de 101 teclas. Esta función verifica el buffer del
teclado; si no hay un carácter la función espera hasta que el usuario ingrese el
carácter. El carácter es almacenado en AL y su código de rastreo en AH. Si la
tecla presionada es una función extendida AL se carga con 00H.
La función 01H, trabaja al igual que la función 00H, pero si un carácter está
presente en el buffer de teclado, la bandera de cero (ZF=0) se pone en cero, en
AL se carga el carácter y AH su código de rastreo. Si no hay carácter en el buffer
la bandera ZF se pone en uno y no espera.
Escritura en el teclado
La función 10H opera lo mismo que la función 00H, adicionalmente recibe también
las teclas de función extendida desde teclado ampliado. Al igual que en la función
00H, cuando se presiona una tecla de función extendida, o en teclado extendido el
carácter en AL es 00H. Para las teclas de control duplicadas, inicio y RePág,
regresa E0H.
La función 11H trabaja igual que la función 01H excepto que reconoce las
funciones extendidas del teclado ampliado.
Una tecla de función extendida solicita una acción en lugar de enviar un carácter.
Cada tecla tiene un código de rastreo, iniciando en 01 para Esc. Por medio de
estos códigos un programa puede determinar el origen de cualquier tecleo
Cuando presiona una tecla, el procesador del teclado genera el código de rastreo
de la tecla y solicita la INT 09H. Esta interrupción apunta a una rutina de manejo
de interrupción en el BIOS de ROM. La rutina emite una petición de entrada desde
el puerto 96 (60H).
La rutina de BIOS lee el código de rastreo y los compara con las entradas en una
tabla de códigos de rastreo para el carácter ASCII asociado. La rutina combina el
código de rastreo con su carácter ASCII asociado y envía los dos bytes al buffer
de teclado.
La INT 09H maneja los bytes de estado del teclado en 40:17H, 40:18 y 40:96 para
Shift, Alt y Ctrl. Sin embargo aunque la presión de estas teclas genera la INT 09H,
la rutina de interrupción establece los bits apropiados en los bytes de estado, pero
no envía ningún carácter al buffer de teclado.
Inicia en el segmento 40[0]H; la dirección 41AH indica posición siguiente a leer por
la INT 16H, la dirección 41CH indica la posición siguiente para la INT 09H para
almacenar un carácter ingresado. La dirección de inicio del buffer de teclado es
41EH, 16 palabras (32 bytes), los caracteres y los códigos de rastreo son
almacenados en esta buffer y extraídos o leídos por medio de la INT 16H.
Cuando se teclea un carácter, la INT 09H avanza a la parte final. Cuando la INT
16H lee un carácter, avanza a la parte inicial. Este proceso es circular con la parte
inicial siguiendo a la parte final. Cuando el buffer esta vacío, la parte final y la parte
inicial están en la misma dirección.
A b c d <ENTER> …
41EH 420H 422H 424H 426H 428H
a b c d <ENT> E f g h i j k l m n o
41EH 420H 422H 424H 426H 428H 42A 42C 42E 430 432 434 436 438 43A 43C
El buffer se llena en la dirección 43CH, la INT 09H almacena los datos siguientes
iniciando en la posición inicial del buffer:
p q r s <ENT> E f g h I j k l m n o
41EH 420H 422H 424H 426H 428H 42A 42C 42E 430 432 434 436 438 43A 43C
La INT 09H no acepta ningún carácter adicional ya que la parte final avanzaría a la
parte inicial y la INT 16H miraría el buffer como vacío.
Actividad 10.3
Resumen
Para el manejo de video, cuando la pantalla está en modo de texto, si está activo
un adaptador de vídeo monocromo, ocupa 4 Kb a partir del segmento 0B000h.
Con un adaptador de color, son 16 Kb a partir del segmento 0B800h. Un método
para averiguar el tipo de adaptador de video es consultar a la BIOS el modo de
video activo. Los modos 0 y 1 son de 40 columnas y el 2 y 3 de 80. Los modos 0 y
2 son de «color suprimido», aunque en muchos monitores salen también en color.
De igual manera cuando se trabaja con el teclado, al pulsar una tecla se genera
una interrupción 9 (IRQ 1) y el código de rastreo que identifica la tecla pulsada
puede leerse en el puerto de E/S 60h; si se suelta la tecla se produce otra
interrupción y se genera el mismo código de rastreo + 128 (bit 7 activo). Por
ejemplo, si se pulsa la 'A' se generará una INT 9 y aparecerá en el puerto del
teclado (60h) el byte 1Eh, al soltar la 'A' se generará otra INT 9 y se podrá leer el
byte 9Eh del puerto del teclado.
La rutina que gestiona INT 9 deposita en un buffer dos bytes con su código ASCII
y el código de rastreo, para cuando el programa principal decida explorar el
teclado, lo hará siempre consultando el buffer. Si el código ASCII depositado es
cero ó 0E0h, se trata de una tecla especial (ALT-x, cursor, etc.) y el segundo byte
indica. El código ASCII 0E0h sólo es generado en los teclados expandidos por las
teclas expandidas, así mismo, el código ASCII 0F0h está reservado para indicar
las combinaciones de ALT-tecla.
Bibliografía recomendada
Nexo
Las opciones del menú y del submenú deben permitir selección a través de
teclas abreviadas.
Lenguaje de Máquina
Semestre 5
Fascículo No. 11
Tabla de Contenido
Contenido
Operaciones avanzadas del microprocesador
Manipulación de cadenas de caracteres
Prefijo de repetición de cadena
Mover una cadena de caracteres
Cargar una cadena de caracteres
Almacenar una cadena de caracteres
Comparar un patrón
Búsqueda de cadenas
Procesamiento de caracteres ASCII y BCD
Procesamiento de datos ASCII
Suma ASCII
Resta ASCII
Procesamiento de datos BCD desempaquetados
Multiplicación ASCII
División ASCII
Ejecución de operaciones lógicas y aritméticas
Suma y resta
Desbordamientos
Extensión de un número en un registro
Aritmética con acarreo
Desbordamiento aritmético
Multiplicación
Multiplicación de palabras múltiples
División
Desbordamientos e Interrupciones
División por medio de corrimientos
Procesamiento de tablas
Direccionamiento directo de tablas
Listas ligadas
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Operaciones avanzadas del microprocesador
Indicadores de logros
Una instrucción de cadena tiene una versión para byte, palabra o palabra doble;
utiliza como operandos los registros ES:DI o DS:SI. Estas instrucciones se
codifican de dos maneras:
Operación Instrucción Operandos Operación con bytes Operación con palabra Operación con palabra doble
Mover MOVS ES:DI, DS:SI MOVSB MOVSW MOVSD
Cargar LODS AX, DS:SI LODSB MOVSB MOVSD
Almacenar STOS ES:DI, ES:DI STOSB STOSW STOSD
Comparar CMPS DS:SI, ES:DI CMPSB CMPSW CMPSD
Rastrear SCAS ES:DI, AX SCASB SCASW SCASD
Observación
Usted puede utilizar la instrucción y los operandos o puede cargar la dirección de
los operandos en los registros DI y SI y codifica las instrucciones MOVSB,
MOVSW, MOVSD sin operandos.
Este prefijo permite algunas variaciones tales como REPE ó REPZ y REPNE ó
REPNZ; la repetición de la instrucción ocurre si ZF es cero y se detiene cuando ZF
sea diferente de cero ó CX sea cero; ó la repetición depende de que ZF sea
diferente de cero y se detiene cuando ZF sea igual acero o CX llegue a cero.
La orden LODS carga AL con un byte, AX con una palabra, EAX con una palabra
doble desde una posición de memoria, la dirección de memoria depende de ES:DI.
La dirección depende del bit de dirección, se incrementa o disminuye el DI en un
byte, en 2 ó en 4 dependiendo de la palabra.
Almacenar una cadena de caracteres
Comparar un patrón
Búsqueda de cadenas
Actividad 11.1
BCD empaquetado almacena un carácter en los cuatro bits inferiores y pone cero
en los bits supriores, BCD empaquetado contiene 2 dígitos BCD, uno en los bits
superiores y otro en los bits inferiores.
Los datos ingresados desde teclado están en formato ASCII. Un número decimal
como 1234 estaría como 31323334H. Para realizar operaciones aritméticas es
necesario ajustar los valores ASCII almacenados.
Suma ASCII
Resta ASCII
División ASCII
Suma y resta
Desbordamientos
Un byte permite un solo bit de signo y siete de datos (desde -128 a +127); una
operación aritmética puede sobrepasar fácilmente la capacidad de un byte.
Actividad 11.2
Con ayuda del Debug analice el programa para suma generalizada, los dos
valores a sumar son: 62BC2301H y 3A551200
Una operación aritmética que causa un acarreo externo del bit de signo, pone uno
en la bandera de acarreo. Si el acarreo ocurre en datos sin signo el resultado no
es válido.
Desbordamiento aritmético
Multiplicación
Hay dos formas de instrucción multiplicación: MUL, para datos sin signo e IMUL
para datos con signo. Las operaciones de multiplicación básicas son byte por byte,
palabra por palabra, y palabras dobles por palabras dobles.
División
Hay dos formas de instrucción división: DIV, para datos sin signo e IDIV para
datos con signo. Las operaciones de división básicas son palabras entre byte,
palabra doble entre palabra, y palabra cuádruple entre palabra doble.
Para dividir una palabra por byte, el dividendo está en AX, y el divisor es un byte
de memoria o en otro registro. El resultado se carga en AX. En AH el residuo y el
cociente en AL.
Para dividir palabra doble por palabra, el dividendo está en el par DX:AX y divisor
es una palabra en memoria o en otro registro. El residuo se almacena en DX y el
cociente en AX.
Para dividir palabra cuádruple por palabra doble, el dividendo está en el par
EDX:EAX y el divisor es una palabra doble en un registro o en memoria. El residuo
está en EDX y el cociente en EAX.
Desbordamientos e interrupciones
Para la división entre una potencia de dos es más eficiente realizar sólo
corrimientos a la derecha del número necesario de bits.
Actividad 11.3
Las tablas facilitan el manejo de datos utilizados por un programa para datos por
defecto o ingresados por teclado al programa; contienen datos como nombres,
descripciones, cantidades y precios. Para facilitar el manejo de estas tablas es
aconsejable definir datos con iguales longitudes en su estructura.
Para ordenar un dato dentro de una tabla, se compara la entrada de la tabla con la
entrada siguiente, si es mayor se intercambian las entradas, de esta manera se
comparan las entradas 1 y 2, la entrada 2 y 3, y así hasta el final de la tabla,
intercambiando las entradas cuando sea necesario. Repita el proceso desde el
inicio de la tabla si no hay intercambio la tabla esta ordenada.
Listas Ligadas.
Una lista ligada contiene datos llamados celdas, estos datos no tiene secuencia
específica sino que cada celda contiene un apuntador (puntero) a la celda
siguiente o la precedente para facilitar la búsqueda hacia delante o hacia atrás.
RESUMEN
Para realizar la suma de varias palabras múltiples, utilice el ADC para tomar en
cuenta los acarreos de un ADD. Para realizar multiplicación y división de datos con
signo y sin signo utilice MUL, IMUL, DIV y IDIV respectivamente.
Para la división DIV el divisor debe ser mayor que el contenido de AH. Si el divisor
esta definido como byte, el dividendo es AX; si el divisor es una palabra, el
dividendo es DX:AX, si el divisor es una palabra doble, el dividendo es EDX:EAX.
Para el trabajo con tablas se aconseja que las entradas a la tabla estén
relacionadas y tengan la misma longitud y formato de datos. Si las entradas a una
tabla cambian con frecuencia almacénela en el disco, actualice la tabla en el disco
y acceda a los datos de la tabla desde el disco para no modificar el programa
base.
BIBLIOGRAFIA RECOMENDADA
NEXO
Apellidos: ______________________________________________
Nombre: _____________________________ Fecha: __________
Ciudad: _____________________________ Semestre: _______
4. Para los siguientes datos, definidos en orden inverso, realice las preguntas de la
a) a la e).
DATA DW 0148H
DW 2316H
DATAY DW 0237H
DW 4502H
DATAZ DW 0
DW 0
DW 0
STC
MOV BX,DATAX
ADC BX,DATAY
Tabla de Contenido
Contenido
Entrada y salida avanzada del PC (primera parte)
Introducción
Almacenamiento de información en discos
Organización del almacenamiento en disco
Pistas y sectores
Cilindros
Controlador de disco
Grupos
Capacidad de disco
Área de sistema y área de datos en disco
Área de sistema
Sectores asignados para el área de sistema
Área de datos
Registro de arranque
Directorio
Tabla de asignación de archivos, FAT
Primer entrada de la FAT
Segunda entrada de la FAT
Apuntadores a entradas de apuntadores en la FAT
Procesamiento de archivos en disco
Escritura y lectura de archivos
Códigos de error de regreso
Uso de manejadores de archivo para manejo de archivos en disco
Crear archivo
Escribir registros
Cerrar archivo
Abrir el archivo
Leer registro
Operaciones del DOS para soporte de discos y archivos
Operaciones básicas del BIOS para disco, INT 13H
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Entrada y salida avanzada del PC (primera parte)
Indicadores de logros
Programa de usuario
Entrada/salida de ficheros
DOS
Entrada y salida de sectores
BIOS
Comandos adaptador de disco
Adaptador de DISCO
Señales Hardware
Unidad de Disco
Cilindros
Controlador de disco
Grupos
Un archivo de 100 bytes almacenado en un disco con cuatro sectores por grupo
utiliza 4 x 512 = 2,048 bytes de almacenamiento, aunque sólo un sector contendría
información. El DOS almacena los grupos para archivo en orden ascendente,
aunque un archivo puede estar fragmentado de manera que resida, por ejemplo,
en los grupos 8, 9, 10, 14, 17 y 18.
Capacidad de disco
Observación
En los discos duros, las capacidades varían considerablemente por dispositivo y
por partición.
Área de sistema
El área de sistema es la primer área del disco, en la (s) pista (s) más externa (s)
iniciando con el lado 0, pista 0, sector 1. La información que el DOS almacena y
mantiene en su área de sistema es utilizada para determinar, por ejemplo, la
ubicación de cada archivo que será accesado. Los tres componentes del área de
sistema son:
1. Registro de arranque.
2. Tabla de asignación de archivos (FAT).
3. Directorio.
En los discos duros, las ubicaciones del registro de arranque y de la FAT, por lo
común, son las mismas que para un disco flexible; el tamaño de la FAT y la
ubicación del directorio varían por dispositivo.
Área de datos
El área de datos en un disco o disco flexible de arranque empieza con los archivos
del sistema IOSYS.SYS y MSDOS.COM (para MS-DOS). Cuando utiliza FORMAT
/S para formatear un disco, el DOS copia sus archivos de sistema a los primeros
sectores del área de datos. Los archivos del usuario siguen de manera inmediata
a los archivos de sistema o, si no existen archivos de sistema, empiezan al inicio
del área de datos.
Un disco flexible de dos lados formateado con nueve sectores por pista contiene la
información siguiente:
Los registros para los archivos de datos empiezan en el lado 1, pista 0, sector 3 al
9. El sistema almacena los registros siguientes en el lado 0, pista 1, después en el
lado 1, pista 1, después lado 0, pista 2, y así sucesivamente. Esta característica
de llenado de datos en pistas opuestas (en el mismo cilindro) antes de proceder
con el siguiente cilindro reduce el movimiento de la cabeza del disco y es el
método usado en ambos tipos de discos, flexibles y duros.
Registro de arranque
El registro de arranque contiene las instrucciones que cargan los archivos del
sistema IOSYS.SYS, MSDOS.COM y COMMAND.COM desde el disco a la
memoria. Todos los discos formateados tienen este registro aun cuando no estén
almacenados en ellos los archivos de sistema. El registro de arranque contiene la
información siguiente, en orden de dirección de desplazamiento:
00H Salto cercano o lejano a la rutina de arranque en el desplazamiento 1EH o 3EH en el registro de
arranque
03H Nombre del fabricante y número de la versión del DOS cuando me creado el arranque
0BH Bytes por sector, por lo común 200H (512)
0DH Sector por grupo (1, 2, 4 u 8)
0EH Sectores reservados
10H Número de copias de la FAT (1 o 2)
11H Número de entradas en el directorio raíz
13H Si el volumen es menor que 32 MB, número total de sectores
15H Byte de descripción de medio (igual al primer byte de la FAT, descrita posteriormente)
16H Número de sectores para la FAT
18H Número de sectores por pista
1AH Número de cabezas (lados o superficies) de lectura/escritura
1CH Número de sectores ocultos
1EH Cargador de la rutina de arranque para las versiones del DOS hasta la 3.3
20H Si el volumen es menor que 32 MB, número total de sectores
24H Número de unidad física (para discos flexibles, A = 0; para disco duro, 80H = unidad C, etc.)
Directorio
El directorio contiene el número de inicio del grupo para cada archivo y una
cadena de entradas del apuntador del FAT; éste indica la ubicación donde
continúa, si existe, el siguiente grupo. Un apuntador de entrada que contiene (F)
FFFH indica el último grupo en el archivo.
Procesamiento de archivos en disco
Crear archivo
Para crear un archivo nuevo o sobreescribir uno ya creado con el mismo nombre,
use primero la función 3CH del DOS (INT 21H). Cargue el CX con el atributo de
archivo requerido y el DX con la dirección de la cadena ASCII (con el camino y el
nombre del nuevo archivo). El DOS crea una entrada de directorio con el atributo
dado, limpia la bandera de acarreo y establece el manejador para el archivo en el
AX. Utilice este manejador de archivo para todas las operaciones subsecuentes
del disco.
Escribir registros
Para escribir registros en disco, utilice la función 40H del DOS. Cargue el EX con
el manejador de archivo almacenado, el CX con el número de bytes a escribir y el
DX con la dirección del área de salida. Una operación válida escribe los registros
en el disco, incrementa el apuntador de archivo y en AX se carga el número de
bytes escritos. Una operación no válida pone en uno la bandera de acarreo y
regresa en AX el código de error 05 (acceso denegado) ó 06 (número de
manejador no válido).
Cerrar archivo
Utilice la función 3DH del DOS para abrir un archivo. Cargue en el DX la dirección
de la cadena ASCIIZ necesaria y establezca AL con el código de acceso:
BITS PETICION
0-2 000 = Solo Lectura
001 = Solo escritura
010 = lectura/escritura.
3 Reservada
4-6 Modo compartido
7 Bandera heredada
Leer registro
Para leer registros, utilice la función 3FH del DOS. Cargue el manejador de
archivo en el BX, el número de bytes a leer en el CX y la dirección del área de
entrada en el DX. Esta operación envía el registro al programa, pone en cero la
bandera de acarreo y establece el AX al número de bytes que en realidad se leyó.
Cero en el AX significa un intento de leer después del fin de archivo; ésta es una
advertencia, no un error. Una lectura no válida pone en uno la bandera de acarreo
y regresa al AX el código de error 05 (acceso denegado) o 06 (manejador no
válido).
Observación
Ya que DOS limita el número de archivos abiertos al mismo tiempo, un programa
que de manera sucesiva lee varios archivos debe cerrarlos tan pronto como sea
posible. El código siguiente lee un registro de 512 bytes.
Actividad 12.1
Utilice las funciones 3CH, 3DH y 3EH de DOS para crear, abrir y cerrar archivo y
40H y 3FH para escribir y leer registros en archivo. Por ejemplo para crear un
archivo utilice el siguiente procedimiento:
Examinemos ahora la programación de las funciones del BIOS para leer, escribir,
formatear y verificar discos. La operación INT 13H del BIOS para disco, trata
información como el tamaño de un sector y maneja el direccionamiento en disco
en términos de los números de pista y sectores reales. Las operaciones del BIOS
para disco implican restablecer la lectura, escritura, verificación y formateo de la
unidad. La mayoría de las operaciones del BIOS para trabajo con disco son de
peligro potencial cuando se utilizan mal.
La mayoría de las funciones de la INT 13H del BIOS ponen en uno o en cero la
bandera de acarreo, si hubo un éxito o fracaso y regresan un código de error en el
registro AH. El BIOS, en su área de datos, mantiene información acerca de cada
dispositivo y su estado. El byte de estado refleja los bits indicadores que se
encuentran en el área de datos del BIOS en 40:41H para el área de datos de
unidades de discos flexibles y en 40:74H para el área de datos de disco duro.
Si una operación regresa un error, una acción común del programa es restablecer
el disco (función 00H) y reintentar la operación tres veces. Si aún persiste un error,
muestra un mensaje y da al usuario una oportunidad para cambiar el disco flexible,
si ésa es la solución del problema.
Código Estado
00H No hubo error
01H Comando incorrecto, no reconocido por el controlador
02H Marca de dirección en disco no se encontró
03H Intento de escribir en un disco protegido
04H Pista/sector no válido
05H Fallo en la operación de restablecer
06H Se retiró el disco flexible desde el último acceso
07H Parámetros de la unidad erróneos
08H Acceso directo a memoria (DMA) rebasado
….
Hasta aquí se han tratado algunas de las operaciones básicas de BIOS y DOS
para manejo de discos; el trabajo con estas funciones se realiza de igual manera
como se ha presentado a través de los fascículos anteriores y en éste; por
ejemplo, para leer datos de un sector mediante DOS utilice el siguiente
procedimiento:
Los datos que definen los parámetros utilizados en este procedimiento se definen
en el segmento de datos para mayor orden:
Resumen
Bibliografía recomendada
Nexo
El programa debe permitir consultas y cálculos con los datos del archivo. El
usuario puede consultar el valor total de un número de piezas determinada.
Cree una tabla en memoria para accesar los datos en memoria desde disco y
realizar los cálculos. Utilice manejadores de archivo para desarrollar el programa.
Tabla de Contenido
1. Señal de autoalimentación.
2. Impresora ocupada.
3. Reconocimiento (desde la impresora al PC).
4. Fin de papel.
5. Error de entrada/salida
6. Inicialización de la impresora.
7. Selección (impresora en línea).
Indicadores de logro
Para el manejo de impresión se utilizan funciones asociadas a la INT 21H del DOS
o por medio de la INT 17H del BIOS. El manejo de impresión debe considerar el
intercambio de información entre la impresora y el procesador, y viceversa;
usualmente las señales que envía el procesador son: saltar a una página nueva,
avanzar hacia abajo una línea o tabular y, a su vez, la impresora le envía al
procesador señales indicándole que está ocupada o sin papel.
FUNCIONES DE LA INT 21H DEL DOS FUNCIONES DE LA INT 17H DEL BIOS
40H Imprime caracteres 00H Imprime un carácter
05H Imprime un carácter 01H Inicializa puerto
02H Obtiene estado del puerto de La impresora
Impresión de caracteres
La función 40H de la INT 21H del DOS, permite utilizar los manejadores de archivo
para realizar impresión de caracteres; para esto cargue estos registros:
AH Función 40H
BX Manejador de archivo 04
CX Número de caracteres que se van a imprimir
DX Dirección del texto
Impresión de un carácter
La función 05H del DOS proporciona facilidades para imprimir. Cargue la función
05H en el registro AH, el carácter que quiere imprimir en el DL y emita la INT 21H
como sigue:
La INT 17H proporciona facilidades para imprimir en el nivel del BIOS. Los puertos
de impresión válidos para la INT 17H son 0 (por omisión), 1 y 2, para LPT1, LPT2
y LPT3, respectivamente.
BIT CAUSA
0 Se acabo el tiempo
3 Error de entrada/salida
4 Seleccionada
5 No hay papel
6 Reconocimiento desde la impresora
7 No está ocupada
Errores en la impresora son el bit 5 (no hay papel) y el bit 3 (error de salida). Si la
impresora no está encendida, la operación regresa B0H, o 10110000 binario,
indicando “No hay papel”.
Impresión de un carácter
La operación regresa el mismo estado del puerto de impresión que la función 01H.
Observación
En cualquier momento, una impresora puede quedarse sin papel o ser apagada
sin advertirlo. Si está escribiendo programas para que los usen otros, incluya una
prueba del estado antes de cada intento de imprimir.
Resumen
Bibliografía recomendada
Nexo
Tabla de Contenido
Entrada y salida avanzada del PC (segunda parte)
Puertos
Control de operaciones del mouse
Características del ratón
Funciones del ratón
Operaciones comunes del ratón
Inicializando el ratón
Desplegar el apuntador del ratón
Ocultar el apuntador del ratón
Obtener el estado del botón y la posición del apuntador
Establecer la posición del apuntador
Código ilustrativo
Obtener la información de la pulsación del ratón
Información de liberación del botón
Fijar límites horizontales para el apuntador
Fijar los límites verticales para el apuntador
Leer contadores de movimiento del ratón
Instalar manejador de interrupciones para eventos del ratón
Fijar el área de exclusión del apuntador
Establecer el umbral de velocidad doble
Establecer la sensibilidad del ratón
Obtener sensibilidad del ratón
Seleccionar la página de despliegue para el apuntador
Obtener la página de despliegue para el apuntador
Generación de sonidos
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Entrada y salida avanzada del PC (segunda parte)
En este fascículo se describe el acceso a los puertos de la PC, el uso del ratón, y
la generación de sonido por medio de la bocina de la PC. Para el trabajo con el
ratón, los puertos y generación de sonidos se utilizarán las instrucciones:
Puertos
Puede usar las instrucciones IN y OUT para manejar E/S directamente a nivel de
puerto:
IN reg-acum, puerto
Aunque la práctica recomendada es utilizar las interrupciones del DOS y del BIOS,
puede con seguridad pasar por alto el BIOS cuando accese los puertos 21H, 40H,
42H, 60H, 61H y 201H.
Por ejemplo, al arranque, una rutina en ROM del BIOS busca el sistema por las
direcciones de los adaptadores de puertos paralelos y seriales. Si la dirección del
puerto serial es encontrada, el BIOS la coloca en su área de datos, empezando en
la localidad de memoria 40:00H; si las direcciones de los puertos paralelos son
encontradas, el BIOS las coloca en su área de datos, empezando en la localidad
40:08H. Cada localidad tiene espacio para entradas de una palabra. La tabla del
BIOS para un sistema con dos puertos seriales y dos puertos paralelos podría
verse así:
Para utilizar la INT 17H del BIOS para imprimir un carácter, inserte el número del
puerto de la impresora en el registro DX:
Todas las operaciones del ratón dentro de un programa son realizadas por las
funciones estándar de la INT 33H de la forma:
Observación
Note que, a diferencia de las operaciones que utilizan el registro AH, las funciones
de la INT 33H son cargadas en el registro AX completo.
La primera instrucción del ratón que un programa emite es la función 00H, la cual
simplemente inicializa el controlador del ratón para el programa. La instrucción que
sigue es la 01H, que hace que el apuntador del ratón aparezca en la pantalla.
Después de eso, tiene opción de una amplia gama de operaciones con el ratón.
Las siguientes son las funciones disponibles del ratón para la INT 33H; por lo
común, relativamente pocas de ellas se usan:
Inicializando el ratón
La función 00H de la INT 33H inicializa el estado de un ratón, esta función deber
ser utilizada sólo una vez. Basta cargar el AX con la función 00H y emitir la INT
33H. La operación no necesita parámetros de entrada, regresa los valores:
La función 01H, permite que el apuntador del ratón sea mostrado. La operación no
necesita parámetros de entrada y no regresa valores.
El controlador del ratón mantiene una bandera del apuntador que determina si se
despliega o no el apuntador. Despliega el apuntador si la bandera es cero y lo
oculta para cualquier otro número.
La función 03H brinda información útil acerca del ratón. No necesita parámetros de
entrada, regresa los valores:
BX = Estado de los botones de acuerdo con la posición del bit, como sigue:
La función 04H fija las coordenadas horizontal y vertical para el apuntador del
ratón en la pantalla.
MOV AX, 04H ; Petición para colocar el apuntador del ratón
MOV CX,horizon-loch ;Posición horizontal
MOV DX,vertl-loch ; Posición vertical
INT 33H ;Llama al controlador del ratón
Actividad 14.1
AX = Estado de los botones de acuerdo con la posición del bit, como sigue:
AX = Estado de los botones de acuerdo con la posición del bit, como sigue:
Bit 0, botón izquierdo, donde 0 = arriba, 1 = abajo
Bit 1, botón derecho, donde 0 = arriba, 1 = abajo
Bit 2, botón central, donde 0 = arriba, 1 = abajo
Bits 3-15 reservados
La función 07H fija los límites horizontales mínimo y máximo para el apuntador:
La función 08H fija los límites verticales mínimo y máximo para el apuntador:
Cargue el CX con una máscara del evento para indicar las acciones para las
cuales el manejador debe responder y el ES:DX con la dirección segmento:
desplazamiento de la rutina para manejar la interrupción:
AX = La máscara del evento como se definió, salvo que los bits están en uno solo
si la condición ha ocurrido
BX = Estado del botón; si está establecido, los bits significan lo siguiente:
0 botón izquierdo abajo
1 botón izquierdo abajo
2 botón central abajo
CX = Coordenada horizontal (x)
DX = Coordenada vertical (y)
SI = Ultimo conteo vertical de mickey
DI = Ultimo conteo horizontal de mickey
DS = Segmento de datos para el controlador del ratón
Para reemplazar el área de exclusión, llame otra vez a la función con parámetros
diferentes o vuelva a emitir la función 00H o 01H.
La función 24H regresa información acerca de la versión y tipo del ratón que está
instalado:
Generación de sonidos
Nexo
Tabla de Contenido
Contenido
Administración de la memoria del DOS
Área de memoria alta
Prefijo de segmento de programa (PSP)
Bloques de memoria
Obtener la dirección de la lista interna del DOS
Ejemplo de rastreo de bloques de memoria
Manejo de bloques de memoria superior
Cargador de programa
Carga y ejecución de un programa .COM
Carga y ejecución de un programa .EXE
Asignación y liberación de memoria
Asignación de memoria
Libere memoria asignada
Modificar el bloque de memoria asignada
Programas residentes
Obtiene la dirección de interrupción
Establece dirección de interrupción
Obtiene la dirección de la bandera ocupada del DOS
Resumen
Bibliografía recomendada
Párrafo nexo
Autoevaluación formativa
Entrada y salida avanzada del PC (tercera parte)
Estas funciones nos permiten conocer, gestionar de una manera más eficiente la
manera de asignación de memoria de un PC cuando se carga un programa con
extensión .COM y .EXE.
El manejo de este tema será teórico y práctico para entender los conceptos a
tratar.
Indicadores de logros
La función 4A01H de la INT 2FH del DOS proporciona una verificación del
espacio disponible en el HMA:
00-01H Una instrucción de la INT 2011 (CD2OH) para facilitar el regreso al DOS.
02-03H La dirección del segmento del último párrafo de la memoria asignada al programa, como
xxxxO. Por ejemplo, 640K se indica como 00A0H, para significar A0000[0].
04-09H Reservado por el DOS.
0A-0DH Dirección de terminación (dirección del segmento para INT 22H).
0E-11H Dirección de salida de Ctrl+ Break (dirección de segmento para la INT 23H).
12-15H Dirección de salida de error crítico (dirección de segmento para la INT 24H).
16-17H Reservado por el DOS.
18-2BH Tabla de manejadores de archivo por omisión.
2C-2DH Dirección de segmento del entorno del programa.
2E-31H Reservado por el DOS.
32-33H Longitud de la tabla de manejadores de archivo.
34-37H. Apuntador lejano a la tabla de manejadores
38-4FH Reservado por el DOS.
50-51H Llama a la función del DOS (INT 21H y RET).
52-5BH Reservado por el DOS.
5C-6BH Área de parámetro 1, formateado como un FCB (#1) estándar no abierto.
6C-7FH Área de parámetro 2, formateado como un FCB (#2) estándar no abierto; traslapado, si el FCB
en 5CH está abierto.
80-FFH Búfer por omisión para un DTA.
Para determinar la dirección del PSP, puede acceder sus datos para procesar
archivos especificados o tomar una acción especial. Un programa .EXE no
siempre puede suponer que su segmento de código sigue inmediatamente al PSP.
La función 51H del DOS envía al registro BX la dirección del segmento del actual
PSP. El código siguiente obtiene la dirección del PSP y la guarda en el registro es:
Para localizar el DTA para un programa .COM, sólo coloque 80H en el registro SI,
DI o BX y accese su contenido:
Bloques de memoria
00-00H Código, en donde 4DH (‘M’) significa que más bloques a continuación y 5AH (‘Z’) significa
cero bloques a continuación (el ultimo bloque). (Esta es una interpretación útil, pero no es
necesariamente la intención original.)
01 -02H Dirección del segmento del PSP del propietario. 0800H significa que el segmento pertenece al
MSDOS .SYS y 0000H significa que está liberado y disponible.
03-04H Longitud del bloque de memoria, medida en párrafos.
05-07H Reservada.
08-0FH Nombre de archivo del propietario, en formato ASCIIZ (desde el DOS 4.0).
Una lista enlazada hacia adelante conecta los bloques de memoria. El primer
bloque de memoria, configurado y apropiado por MSDOS.SYS, contiene: los
bufers de archivo del DOS, los FCB usados por funciones de manejadores de
archivos y controladores de dispositivos cargados por los comandos DEVICE en el
CONFIG.SYS.
Actividad 15.1
4D 08 00 AE 05
4D (“M”) significa que siguen más bloques de memoria; 0800 (0008H) indica que
el bloque de memoria pertenece a MSDOS.SYS, y AEO5 (O5AEH) es la longitud
del bloque de memoria.
4D 06 11 64 01 .
Desde el DOS 5.0, el CONFIG.SYS puede tener una instrucción DOS = UMB
(bloque de memoria superior) para asignar memoria a programas por arriba de la
memoria convencional, entre las fronteras de los 640K y 1024K. La instrucción
hace que el DOS establezca un encabezado de arena ficticio de 16 bytes antes de
la frontera de los 640K y lo marque como suyo; su campo del tamaño contiene un
número suficientemente grande para pasar cualquier búfer de video y rutinas de
ROM.
Cargador de programa
Además de éstos, los pasos de carga y ejecución difieren para programas .COM y
.EXE. Una diferencia principal es que el enlazador inserta un registro de
encabezado especial en un archivo .EXE cuando lo almacena en disco; el
cargador del DOS utiliza este registro para realizar el cargado.
Los servicios del DOS le permiten asignar, liberar y modificar el tamaño de un área
de memoria. Los usos más comunes para estos servicios son con los programas
residentes y programas que cargan a otros programas para su ejecución. Bajo el
DOS, que fue diseñado como un ambiente de un solo usuario, un programa que
necesita cargar otro programa para ejecución tiene que liberar algún espacio de su
memoria.
Asignación de memoria
La función 49H libera memoria asignada; por lo común es usada para liberar un
programa residente. Cargue en el ES la dirección del segmento del bloque que
será regresado:
Programas residentes
La parte no tan fácil implica la activación del programa después de que queda
residente, ya que no es un programa interno del DOS como CLS, COPY y DIR. Un
enfoque común es modificar la tabla de servicios de interrupción de modo que los
programas residentes interrumpan cualquier tecleo, actúen sobre un tecleo
especial o una secuencia de tecleos y pasen por alto otros tecleos. El efecto es
que un programa residente, por lo común, aunque no necesariamente, conste de
las siguientes partes:
Observación
Un programa residente puede utilizar las funciones de la INT 21H para acceder la
tabla de servicios de interrupción, puesto que no hay seguridad de que
computadoras más avanzadas tendrán la tabla de interrupción localizada en las
mismas localidades de memoria.
La función 34H es utilizada de manera interna por el DOS; algunos TSR la usan
cuando solicitan una interrupción del DOS para verificar si otra interrupción está
activa. Ya que el DOS no es reentrante (esto es, no puede volver a entrar el DOS
mientras está activo), el TSR tiene que esperar hasta que el DOS no esté
ocupado, como lo indica la bandera de DOS ocupado, inDOS.
Resumen
IO.SYS es una interfaz de nivel bajo con las rutinas del BIOS en ROM. Al inicio,
IO.SYS determina el estado de todos los dispositivos y equipo asociados con la
computadora y establece la tabla de direcciones para las interrupciones hasta la
20H. También el IO.SYS maneja las E/S entre la memoria y los dispositivos
externos.
MSDOS.SYS es una interfaz de alto nivel para programas que están cargados en
la memoria después del IO.SYS. Sus operaciones incluyen el establecimiento, la
tabla de direcciones para interrupciones desde la 20H hasta la 3FH, la
administración del directorio y de los archivos en disco, el manejo de bloqueo y
desbloqueo de registros en disco y el manejo de las funciones de la INT 21H.
COMMAND.COM maneja los distintos comandos del DOS y ejecuta los archivos
.COM, .EXE y .BAT solicitados. COMMAND.COM es el responsable de cargar los
programas ejecutables desde el disco y enviarlos a la memoria.
El módulo .EXE que el enlazador crea consiste en un registro de encabezado que
contiene la información de control y reubicación y el módulo real cargado. Al
cargar un programa .COM o uno .EXE, el DOS configura bloques de memoria para
el entorno y el segmento del programa. Precediendo a cada bloque de memoria
está un encabezado de arena de 16 bytes iniciando en una frontera de párrafo.
También el DOS crea un PSP en la localidad 00H del segmento del programa y lo
carga en 100H.
Bibliografia recomendada
Nexo
1. Defina el segmento de datos como sigue: apuntando al área de datos de la BIOS, iniciando en la
dirección 40[0]H
2. Prevenga la atención de la INT 09H y genere una rutina de atención a esta INT
MOV AH,35H
MOV AL,09
INT 21H
MOV WORD PRT SAVING9, BX
MOV WORD PRT SAVING9+2, BX
MOV AH,25H
MOV AL,09
MOV DX,OFFSET Nueva rutina de atención a INT
INT 21H
MOV AH,31H
MOV DX,OFFSET rutina parcheo de interrupción
STI
INT 21H
3. En la rutina de atención a la INT 09H verifique que la tecla NUMLOCK está presionada, y si las
teclas presionadas son numéricas genere un sonido.
Tabla de Contenido
Contenido
Comunicaciones serie y paralelo
UART
Modem
Interfaz física RS232.
Interrupción asociada a la comunicación serie
Inicialización del puerto serie
Enviar carácter sobre la línea
Esperar para leer un carácter de entrada
Enviar un carácter al dispositivo
Usando el formato serial
Comunicaciones paralelas
Acceso directo al puerto
Registro de datos (D)
Registro de estado (S)
Registro de control (C)
Bit de puerto bidireccional (compatible PS/2)
Bit de interrupción
Descripción del conector físico
Velocidad
Handshaking con impresora
Interfaz de puerto paralelo para control y adquisición de datos
Adquisición de datos
Control de un motor paso a paso con PC
Resumen
Bibliografía recomendada
Autoevaluación formativa
Comunicaciones serie y paralelo
Interfaz Paralelo
D7 D6 D5 D4 D3 D2 D1 D0 C0 C1
↨ ↨ ↨ ↨ ↨ ↨ ↨ ↨
Interfaz Serie
C0 D7 D6 D5 D4 D3 D2 D1 D0 C1 ↔
UART
Se conectan 8 bits de datos (D0-D7) al 8251A desde el bus de datos del PC. La
entrada chip select (/CS) habilita el CI cuando es requerido por el control de bus
del PC. Este CI tiene dos direcciones internas, una dirección de control y una
dirección de datos. La dirección de control se selecciona cuando la entrada C/D
es alta, si es baja se selecciona la dirección de datos. La señal de reset reinicia el
CI. Cuando /RD es baja el PC lee un byte de control o de datos. /WR habilita el PC
para escribir un byte
Antes utilizar la UART hay que indicarle los parámetros de la comunicación serie,
que son: velocidad, en baudios o bits por segundo (110 a 9600), el número de bits
por carácter (5 o 8), el tipo de paridad (par, impar, o ninguna), El número de bits
finales (stop bits).
Parámetros −− −− →
Dato a transmitir −− −− → THR → TSR −− −− →
Dato recibido ← −− −− RDR ← RSR ← −− −−
Estado ← −− −−
Módem
La interfaz RS 232 realiza la conexión física del UART con el mundo externo. Dos
interfaces RS 232 se pueden conectar directamente a distancias cortas; para
distancias largas es necesario un MODEM en cada extremo de la línea. Los
módems realizan la conversión analógica/digital.
Señal Significado
DTR Data Terminal Ready, El PC esta encendido y preparado
RTS Request to send, el PC le dice al MODEM que quiere enviar datos.
Las señales de control del MODEM desde el MODEM al ordenador:
Señal Significado
DSR Data Set Ready, MODEM encendido y preparado.
CTS MODEM preparado para transmisión de datos.
DCD Data Carrier Detect, el MODEM ha establecido comunicación con el MODEM del otro
extremo de la línea telefónica.
RI Ring Indicador, El teléfono conectado al MODEM está sonando
La función 00H de la INT 14H de BIOS permite fijar los valores de inicialización del
puerto; para esto fije en AL los parámetros de inicialización de acuerdo con la
siguiente tabla:
Bits Contenido
7–5 Velocidad en Baudios: 000 =110, 001 = 150, 010 = 300, 011 = 600, 100 = 1200, 101 =
2400, 110 = 4800, 111 = 9600.
4–3 Paridad: X0 = ninguna, 01 = impar, 11= par
2 Número de bits finales 0 = 1 bit, 1 = 1.5 bits si la longitud del carácter es 5, 1 = 2 bits si la
longitud del carácter es 6, 7 u 8.
1–0 Longitud de cada carácter: 00= 5 bits, 01 = 6 bits, 10= 7 bits, 11 = 8 bits
La función 01H de la INT 14H de BIOS activa las señales DTR y RTS del MODEM
y no transmite un carácter hasta que no reciba las señales correctas para DSR y
CTS. El carácter se enviará a la UART cuando esté vacío el THR. En DX fije el
número de puerto serial, en AL el carácter a enviar. Como salida en AH si el Bit 7
= 1 indica que el carácter fue enviado.
La función 03H de la INT 14H de BIOS retorna el estado del puerto. Fije en DX el
número del puerto, en AX retorna la palabra de estado del MODEM, en AH el
estado de la línea de comunicaciones y en AL el estado del MODEM.
Bits de AH Contenido
7 Tiempo excedido
6 TSR vacío
5 THR vacío
4 Interrupción
3 Error de formato
2 Error de paridad
1 Error de Sobrecarga
0 Dato preparado
Bits de AL Contenido
7 DCD
6 RI
5 DSR
4 CTS
3 Delta DCD
2 Delta RI
1 Delta DSR
0 Delta CTS
La función 03H de la INT 21H de DOS permite leer un carácter de entrada, tiene
como salida en AL el carácter de entrada.
Las UART 8250 tienen registros de configuración que se acceden por medio del
bus de datos y el bus de direcciones. Muchos microcontroladores utilizan una
interface serial de comunicación con este CI.
Las UART CDP6402, AY-5-1015 / D36402R – 9 tienen separados el bus de datos
de transmisión y de recepción; este CI sirve en aplicaciones donde usted no tiene
microprocesador, pudiéndolo utilizar para conectar un conversor análogo/digital
(ACD0804) a la UART, o si quiere conectar un display LCD al puerto serial.
Comunicaciones paralelas
Desde el punto de vista del software, el puerto paralelo son tres registros de 8 bits
cada uno, ocupando tres direcciones de I/O consecutivas en la arquitectura x86.
Desde el punto de vista hardware, el puerto es un conector hembra DB25 con
doce salidas latcheadas (que tienen memoria/buffer intermedio) y cinco entradas,
con 8 líneas de masa. La función normal es transferir datos a una impresora a
través de las 8 líneas de datos, usando las señales restantes como control de
flujo.
Esta tabla contiene hasta tres palabras de 16 bits. Cada palabra es la dirección de
I/O base del puerto paralelo. La primera palabra corresponde a LPT1, la segunda
a LPT2 y la tercera a LPT3. Hay que agregar que, en MS-DOS tenemos el
dispositivo PRN que es un alias a uno de los dispositivos LPT (generalmente es
LPT1, pero se puede cambiar con la orden MODE). Las direcciones estándar para
los puertos paralelos son 03BCh, 0378h y 0278h (chequeadas en este orden).
Acceso directo al puerto
Escribiendo un dato al registro causa que el mismo aparezca en los pines 2 a 9 del
conector del puerto. Leyendo el registro, se lee el último dato escrito (NO lee el
estado de los pines; para ello hay que usar un puerto bidireccional).
MSB . . . . . . LSB
Nro.Bit 7 6 5 4 3 2 1 0 Descripción
x . . . . . . . D7 (pin 9), 1=Alto, 0=Bajo
. x . . . . . . D6 (pin 8), 1=Alto, 0=Bajo
. . x . . . . . D5 (pin 7), 1=Alto, 0=Bajo
. . . x . . . . D4 (pin 6), 1=Alto, 0=Bajo
. . . . x . . . D3 (pin 5), 1=Alto, 0=Bajo
. . . . . x . . D2 (pin 4), 1=Alto, 0=Bajo
. . . . . . x . D1 (pin 3), 1=Alto, 0=Bajo
. . . . . . . x D0 (pin 2), 1=Alto, 0=Bajo
El estándar es que las salidas sean LS TTL (low schottky TTL), aunque las hay
que son de tipo OC (colector abierto). La corriente que pueden entregar (modo
source) es de 2,6 mA máximo y pueden absorber (modo sink) un máximo de 24
mA.
Nro.Bit 7 6 5 4 3 2 1 0 Descripción
x . . . . . . . S7 : 0=Alto, 1=Bajo, Busy (pin 11)
. x . . . . . . S6 : 1=Alto, 0=Bajo, /Ack (pin 10)
. . x . . . . . S5 : 1=Alto, 0=Bajo, No paper (pin 12)
. . . x . . . . S4 : 1=Alto, 0=Bajo, Selected (pin 13)
. . . . x . . . S3 : 1=Alto, 0=Bajo, /Error (pin 15)
. . . . . x x x Sin definir
Observación
Los cuatro bits inferiores son salidas. La lectura devuelve lo último que se escribió
a dichos bits. Son TTL a colector abierto con resistencias de pull-up de 4700
ohms, por lo que un dispositivo externo puede forzar el estado de los pines sin
dañar el driver.
Esto permite utilizar estas cuatro líneas como entradas. Para ello, ponemos en alto
las cuatro salidas (escribiendo 0000100b en IOBase+2) lo que hace que las
salidas "floten". Ahora, un dispositivo externo puede forzar a bajo alguna de las
salidas con lo que, leyendo el puerto, sabemos si esto sucedió o no.
El bit C5, está disponible sólo si se trata de un puerto bidireccional; en los puertos
comunes actúa como los bits C6 y C7. Si C5 = 1, el buffer de los datos de salida
se pone en alta impedancia, "desconectando" dicho buffer de los pines 2 a 9 del
conector del puerto (D0 a D7). Si se escribe al registro de datos, se escribe al
buffer pero no a la salida. Esto permite que al leer el puerto, se lea el estado de las
entradas y no lo que hay en buffer.
Observación
En las computadoras IBM PS/2, para habilitar el puerto paralelo bidireccional,
además de lo antes descrito, se debe poner a 1 el bit 7 del registro del puerto 102h
(opciones de configuración). En computadoras que no tengan puerto paralelo
bidireccional compatible PS/2 hay que modificar uno o más bits de algún puerto
específico correspondiente al chipset de la placa. A veces se habilita por el Setup
o por jumper en la placa del puerto.
Bit de interrupción
Observación
Algunos nombres no corresponden con los de las tablas anteriores. Se hace a
propósito para indicar los posibles nombres que puede tener una misma señal
según su uso.
Velocidad
Un puerto paralelo ISA normal toma un ciclo-ISA para leer o escribir. Como en
muchos sistemas, la velocidad del bus ronda los 1,3 Mhz; podemos decir que la
lectura la podemos hacer cada 1 µs (idealmente, ya que siempre tenemos otras
instrucciones software, etc.; en la práctica pueden ser desde 1.2 1 µs a 2 1 µs).
Algunos puertos soportan un modo "turbo" que elimina los 3 estados de espera de
la CPU, con lo que la velocidad de lectura/escritura del puerto se duplica (2,7
MHz).
El handshaking ("apretón de manos") viene a ser algo así como cuando se habla
de protocolos en el software. Es decir, son un conjunto de reglas que ambos
extremos de un sistema de comunicación tienen que seguir para que la
comunicación sea exitosa.
El puerto paralelo, usado con una impresora, transmite datos y transmite/recibe las
señales de handshaking. En la tabla anterior ya se han descrito las señales
utilizadas. Las principales son /Strobe, /Ack y Busy. La secuencia a seguir para
enviar datos sería:
Observación
En los nuevos puertos, estas señales adquieren otra función, a veces parecida y
otras, totalmente distintas.
Actividad 16.1
Actividad 16.2
Los pines D0 – D7 del conector DB-25 del puerto paralelo, se conectan a un IC1
(74AC541 / 74LS244) que permita proteger el puerto y a la vez impulsar corriente
al los leds D1- D8. las resistencias R1 a R8 son de 330 Ohmios
• Diseñe para este circuito un programa que permita sacar por el puerto
datos que representen secuencias de encendido y apagado de los leds.
Actividad 16.3
• Diseñe para este circuito un programa que permita leer del puerto datos
que se generen mediante los pulsadores S1-S5.
Los motores, tanto de corriente continua como de corriente alterna, son muy
efectivos en muchas labores cotidianas, debido a problemas tales como la inercia
mecánica o su dificultad para controlar su velocidad; cuando se requiere precisión
de giro se utilizan los motores paso a paso. En efecto, en un motor paso a paso no
sólo se puede controlar la cantidad de vueltas del mismo, sino hasta centésimas
de las mismas. A pesar de su extrema precisión, es especialmente útil en áreas
como la robótica o la domótica.
Actividad 16.4
Bibliografía recomendada
Descripción de proyecto:
El proyecto consiste en el desarrollo de una aplicación que controle ocho LEDs por
puerto paralelo y genere varias secuencias de iluminación, las cuales se
encuentran en un archivo de tipo texto.
Objetivos:
Requerimientos:
2 ; Número de secuencias