Lenguajes de interfaz: Programación de Dispositivos.
Erick LoGaarTrabajo14 de Diciembre de 2015
8.185 Palabras (33 Páginas)272 Visitas
INSTITUTO TECNOLÓGICO DE
VILLAHERMOSA
INGENIERÍA EN SISTEMAS COMPUTACIONALES
ASIGNATURA:
Lenguajes de Interfaz.
PROFESOR:
Fidelio Castillo Romero
ACTIVIDAD:
Unidad 4
Actividad # 3
Programación de Dispositivos.
ALUMNO:
Barahona Martínez Adriana.
Mayo Gómez Angel Arturo.
Isidro Jiménez Ever.
Ysidro Isidro Darwin.
HORARIO:
15:00 – 16:00 am.
FECHA:
09 DE DICIEMBRE DE 2015.
PROGRAMACIÓN DE MS-DOS DE 16 BITS
MS-DOS y la IBM-PC
PC-DOS de IBM fue el primer sistema operativo que implementó el modo de direccionamiento real en la Computadora Personal IBM, usando el procesador Intel 8088. Más tarde, evolucionó para convertirse en Microsoft MS-DOS. De ahí que tenga sentido utilizar MS-DOS como el entorno para explicar la programación en modo de direccionamiento real. A este modo también se le conoce como modo de 16 bits, ya que las direcciones se construyen a partir de valores de 16 bits.
Las interrupciones se diseñaron en un principio para ejecutarse bajo MS-DOS en modo de direccionamiento real. Es posible llamar a las interrupciones en modo protegido; Los programas en modo de direccionamiento real tienen las siguientes características:
• Sólo pueden direccionar 1 megabyte de memoria.
• Sólo puede ejecutarse un programa a la vez (una sola tarea) en una sola sesión.
• No es posible la protección de los límites de memoria, por lo que cualquier programa de aplicación puede sobrescribir la memoria que utiliza el sistema operativo.
• Los desplazamientos son de 16 bits.
Hay que recalcar que Digital Research CP/M, el sistema operativo de 8 bits más popular antes de PC-DOS, sólo era capaz de direccionar 64K de RAM. Desde este punto de vista, los 640K de PC-DOS parecían un regalo del cielo.
Debido a las evidentes limitaciones de memoria y velocidad de los primeros microprocesadores Intel, la IBM-PC era una computadora de un solo usuario. No había protección integrada contra la corrupción de memoria que podían provocar los programas de aplicaciones. Con el tiempo aparecieron sistemas operativos más robustos para la PC, con lo cual se convirtió en una alternativa viable para los sistemas de minicomputadoras, en especial cuando se conectaban varias PCs en red.
Organización de la memoria
En el modo de direccionamiento real, tanto el sistema operativo como los programas de aplicaciones utilizan los 640K inferiores de memoria. Después de éstos sigue la memoria de video y la memoria reservada para los controladores de hardware. Por último, las ubicaciones F0000 a FFFFF están reservadas para la ROM del sistema.
Dentro del área de memoria del sistema operativo, los 1024 bytes inferiores de memoria (direcciones 00000 a 003FF) contienen una tabla de direcciones de 32 bits, llamada tabla de vectores de interrupción. Estas direcciones, llamadas vectores de interrupción, las utiliza la CPU al procesar las interrupciones de hardware y de software. Encima de la tabla de vectores se encuentra el área de datos del BIOS y de MS-DOS. Los procedimientos del BIOS se cargan desde un archivo oculto del sistema en un disco de sistema (arranque) de MS-DOS. El núcleo de MS-DOS es una colección de procedimientos (llamados servicios) que también se cargan desde un archivo en el disco del sistema.
BIOS de ROM El BIOS de ROM, que se encuentra en las ubicaciones de memoria F0000 a FFFFF, es una parte importante del sistema operativo de la computadora. El BIOS se almacena en un chip de memoria estática en la tarjeta del sistema.
Redirección de entrada-salida
Al ejecutar programas desde el símbolo del sistema, podemos redirigir la entrada estándar de manera que se lea de un archivo o puerto de hardware, en vez de hacerlo del teclado. La salida estándar puede redirigirse a un archivo, impresora u otro dispositivo de E/S.
Por ejemplo, el sistema operativo tiene un programa llamado sort.exe que ordena un archivo de entrada. El siguiente comando ordena un archivo llamado miarchivo.txt y muestra la salida:
sort < miarchivo.txt
El siguiente comando ordena miarchivo.txt y envía la salida a archsalida.txt:
sort < miarchivo.txt > archsalida.txt
El siguiente comando ordena el directorio actual del disco y muestra la salida en la pantalla:
dir | sort
El siguiente comando envía la salida del programa sort a la impresora predeterminada (sin conexión en red) (se identifi ca por PRN):
dir | sort > prn
Interrupciones de software
Una interrupción de software es una llamada a un procedimiento del sistema operativo. Se utilizan para las siguientes tareas:
• Mostrar caracteres y cadenas.
• Leer caracteres y cadenas del teclado.
• Mostrar texto a color.
• Abrir y cerrar archivos.
• Leer datos de archivos.
• Escribir datos en archivos.
• Establecer y obtener la hora y fecha del sistema.
Instrucción INT
La instrucción INT llamada a un procedimiento de interrupción; llama a una subrutina del sistema que también se conoce como manejador de interrupciones. Antes de que se ejecute la instrucción INT, deben insertarse uno o más parámetros en los registros. La sintaxis es:
INT número
En donde número es un entero en el rango de 0 a FF hexadecimal.
Vectorización de interrupciones
La CPU procesa la instrucción INT mediante el uso de la tabla de vectores de interrupción. Pasos que realiza la CPU cuando un programa invoca a la instrucción INT:
• Paso 1: el operando de la instrucción INT se multiplica por 4 para localizar la entrada en la tabla con el vector de interrupción correspondiente.
• Paso 2: la CPU mete las banderas y una dirección de retorno de segmento/desplazamiento de 32 bits en la pila, deshabilita las interrupciones de hardware, y ejecuta una llamada lejana a la dirección almacenada en la ubicación (10h * 4) en la tabla de vectores de interrupción (F000:F065).
• Paso 3: el manejador de interrupciones en F000:F065 se ejecuta hasta llegar a una instrucción IRET.
• Paso 4: la instrucción IRET (retorno de interrupción) saca las banderas y la dirección de retorno de la pila, lo cual provoca que el procesador continúe la ejecución justo después de la instrucción INT 10h, en el programa que hizo la llamada.
Interrupciones comunes Las interrupciones de software llaman a rutinas de servicio de interrupciones (ISRs), que se encuentran en el BIOS o en DOS. Algunas interrupciones de uso frecuente son:
• INT 10h. Procedimientos que muestran rutinas que controlan la posición del cursor, escriben texto a color, desplazan la pantalla y muestran gráficos de video.
• INT 16h. Procedimientos que leen el teclado y comprueban su estado.
• INT 17h. Procedimientos que inicializan, imprimen y devuelven el estado de la impresora.
• INT 1Ah. Procedimiento que obtiene el número de pulsaciones del reloj desde que se encendió el equipo, o establece el contador a un nuevo valor.
• INT 1Ch. Un procedimiento vacío que se ejecuta 18.2 veces por segundo.
• INT 21h. Procedimientos que proporcionan entrada-salida, manejo de archivos y administración de memoria. También se conocen como llamadas a funciones de MS-DOS.
Codificación para los programas de 16 bits
Los programas diseñados para MS-DOS deben ser aplicaciones de 16 bits que se ejecuten en modo de direccionamiento real.
He aquí un resumen de las características de Codificación en los programas de 16 bits:
• La directiva .MODEL especifica el modelo de memoria que utilizará el programa. Recomendamos el modelo pequeño (Small), el cual mantiene el código en un segmento y la pila más los datos en otro: .MODEL spmall
• La directiva .STACK asigna una pequeña cantidad de espacio en la pila local para nuestro programa. Por lo general, muy pocas veces se necesitan más de 256 bytes de espacio en la pila. La siguiente instrucción es bastante generosa, con 512 bytes:
.STACK 200h
• De manera opcional, podemos habilitar el uso de los registros de 32 bits. Esto puede hacerse con la directiva .386:
.386
• Se requieren dos instrucciones al principio de main si el programa hace referencia a variables. Estas instrucciones inicializan el registro DS con la ubicación inicial del segmento de datos, identifi cado por la constante predefi nida @data de MASM:
mov ax,@data mov ds,ax
• Todo programa debe incluir una instrucción para terminar el programa y regresar al sistema operativo. Una forma de hacerlo es usando la directiva .EXIT:
.EXIT
De manera alternativa, podemos llamar a la función 4Ch de INT 21h:
mov ah,4ch ; termina el proceso
int 21h ; interrupción de MS-DOS
• Podemos asignar valores a los registros de segmento mediante la instrucción MOV, pero sólo cuando se asigne la dirección de un segmento del programa.
• Al ensamblar programas de 16 bits hay que utilizar el archivo make16.bat (procesamiento por lotes). Este archivo crea un vínculo con Irvine16.lib y ejecuta el vinculador anterior de 16 bits de Microsoft (versión 5.6).
• Los programas en modo de direccionamiento real sólo pueden acceder a los puertos de hardware, los vectores de interrupción
...