Monografias | Ingeniería de Sistemas: Catedra AssemblerIngeniería de Sistemas: Catedra AssemblerResumen: Componentes Básicos de un Sistema MS -DOS. Arquitectura interna del Intel 80 x 86. Sistemas: Decimal. Binario. Octal. Hexadecimal. Transformaciones. Conversiones. Gráficos respectivos. INVESTIGACIÓN componentes Básicos de un Sistema MS-DOS
Las operaciones de un sistema de
computación incluyendo un IBM PC’s y compatibles están basadas en un concepto
simple. Ellas guardan intrusiones y datos en la memoria y usan el CPU para
repetir intrusiones y datos recibidos desde la memoria y ejecutan las
instrucciones para manipular los datos (Computadoras basadas en la Arquitectura
de Von Newmann), por lo tanto el CPU y la memoria son los dos componentes
básicos de cualquier sistema de computación. La memoria esta definida en dos
variedades random access memory (RAM) la que permite la escritura y la
lectura de cualquier localidad de memoria y la read only memory (ROM),
que la que contiene valores que pueden ser leídos pero no alterados. La ROM es
usada para almacenar pequeños primitivos programas para ejecutar instrucciones
de entrada y salida y control de periféricos. La RAM es usada para el Sistema
Operativo y programas para usuarios. El Sistema Operativo es un componente
fundamental en un sistema. Este programa de computadoras se toma la tarea de
cargar otros programas y ejecutarlos, provee acceso a los archivos del sistema.
La performa la E/S, y hace interfaces interactivas con el usuario. El sistema
operativo es el que provee al sistema su personalidad. MS-DOS, OS/2, UNIX son
ejemplo de algunos Sistema Operativos para PC, similarmente CP/M es un Sistema
Operativos para antiguos microprocesadores de INTEL de 8 Bits como el 8080. El
hardware de toda computadora incluyendo las computadoras que usan el MS-DOS está
interconectados. El CPU, memoria, y periféricos de entrada (teclado, escáner,
lápiz óptico, lector de código de barra, micrófono, mouse etc.) y salida
(monitor, impresora, cornetas, etc.) están todos interconectados por una serie
de cables llamados Buces y cada Buz esta claramente definido. Un Buz es un
hardware que especifica una señal y tiempo estándar que son seguidos y
entendidos por el CPU y su circuito de soporte (incluyendo periféricos aun no
instalados). Los buces a su vez se clasifican en Buz de Datos, Buz de Dirección,
y Buz de Control. El Buz de Dirección selecciona la localidad de memoria entre
la memoria usada y el CPU. El Buz de Control refiere la líneas de señales de
tiempo y la línea de poder a los componentes. Un Sistema Operativo MS-DOS no
necesita ningún tipo de Buz especifico. Esto es porque es posible tener el Buz
en un segundo plano y estar ejecutando su sistema y así mismo lo aplica para
otro tipo de programas compatibles. Por ejemplo los antiguos sistemas IBM PC-AT
con los PC-AT Buces y el nuevo IBM PS/2 basado en la arquitectura de MCA (Micro
Channel Architecture), y puede ser ejecutado en MS-DOS y OS/2. ARQUITECTURA INTERNA DEL INTEL 80x86 Fue el primer microprocesador de 16 bits que INTEL fabrico
a principios del año 1978. Los objetivos de la arquitectura de dicho procesador
fueron los de ampliar la capacidad del INTEL 80x80 de forma simétrica, añadiendo
una potencia de proceso no disponible en los micros de 8 bits. Algunas de estas
características son: aritmética en 16 bits, multiplicación y división con o sin
signo, manipulación de cadena de caracteres y operación sobre bits. También se
han realizado mecanismo de software para la construcción de códigos reentrante y
reubicable. Su estructura interna esta representada por la figura numero 1.
Consta de 2 unidades claramente diferenciadas denominadas EU (Unidad de
Ejecución) y BIU (interfaces del Bus). La EU ejecuta las operaciones requeridas por la instrucciones
sobre una UAL de 16 bits. No tiene conexión con el exterior y solamente se
comunica con la BIU que es la parte que realiza todas las operaciones en el bus
solicitadas por la EU. Un mecanismo, tal vez único dentro de los
microprocesadores aunque muy empleado dentro de los mínimos y grandes
ordenadores, es el denominado de búsqueda anticipada de instrucciones (prefetch).
En el INTEL 8086 existe una estructura FIFO en RAM de 6 octetos de capacidad que
es llenada por la BIU con los contenidos de las intrusiones siguientes a la que
la EU esta ejecutando en ese momento. Los registros del procesador se especifican en la figura
numero 1. y son los siguientes: A.-) Cuatro registros de 16
bits, denominados AX,BX,CX y DX, que pueden ser direccionados de 8 registros de
8 bits, denominados AH,AL,....DL. los siete últimos son equivalentes a los
registros A, H, L, B, C, D y E, del microprocesador Intel 80x86. El registro AX
sirve fundamentalmente como acumulador y como registro de trasferencia en las
intrusiones E/S. El registro BX puede usarse como acumulador y como registro
base para calcular la direcciones de los datos de memoria. El registro CX puede
usarse como acumulador y se utiliza como contador para las intrusiones
interactivas. El registro DX puede usarse como acumulador y se emplea como
puntero de datos en ciertas intrusiones especificas de E/S. B.-) Cuatro registros de puntero
de segmento denominado CS, DS, SS y ES. Dicho puntero definen cuatro segmentos
de 64 K octetos cada uno. Cualquier dirección de memoria se forma, como ya
veremos en el apartado de direccionamiento, sumando al puntero del segmento una
dirección efectiva calculada por diversos procedimientos. El registro CS, (CODE
SEGMENT) se usa junto con el PC para calcular las direcciones de las intrusiones
del programa; el registro SS (STACK SEGMENT) se emplea junto con el SP (STACK
POINTER) para calcular la dirección de las intrusiones que manejan la pila tales
como PUSH, POP, CALL y RETURN; por su parte, el registro DS (DATA SEGMENT) se
usa en instrucciones que manejan datos de memoria y el registro ES (EXTRA
SEGMENT) se utiliza en instrucciones que manejan cadena de caracteres. C.-) Cuatro registros que
contiene direcciones de desplazamiento dentro de los segmentos denominadas SP,
BP, SI, DI. El registro SP puntero de la pila los registros SI (INDEX SEGMENT) y
DI (Índice Destino) contienen desplazamientos de los punteros de segmento DS y
ES en las intrusiones que manejan cadena de caracteres. El registro BP (BASE
POINTER) es el puntero base. D.-) Un registro contador de
programas, PC. E.-) Un registro de estado, S,
de 16 bits con la siguiente asignación: Bit bo(C) es el acarreo, Bit
b2(P) es el de paridad, Bit b4(A) es el de acarreo
auxiliar, Bit b6(Z) el de cero, Bit b7(S) el de signo, Bit
b8 (T) el de Trap, Bit b9(I) que sirve para controlar el
bloqueo de las intrusiones, Bit b10(D) que determinan si se han de
autoincrementar o autodecrementar los punteros SI y DI en las intrusiones que
manejan cadenas de caracteres, Bit b11(O) que especifica el
desbordamiento (Overflow).
El 8086 representa la arquitectura base para todos los microprocesadores de 16 bits de Intel: 8088, 8086, 80188, 80186 y 80286. Aunque han aparecido nuevas características a medida que estos microprocesadores han ido evolucionando; todos los procesadores Intel, usados en la actualidad en los PC’s y compatibles son miembros de la familia 8086. El conjunto de instrucciones, registros y otras características son similares, a excepción de algunos detalles, todo la familia 80x86 en adelante poseen dos características en común: a) Arquitectura Segmentada, Esto significa que la memoria es divida en segmentos con un tamaño máximo de 64k (información importante para el direccionamiento de la memoria en la futura programación segmentada en el lenguaje ensamblador) y b) Compatibilidad de Las intrusiones y registros de las anteriores versiones son soportados por las nuevas versiones, y estas versiones son soportadas por versiones anteriores.
La familia de microprocesadores 80x86 consta de los siguientes microprocesadores:
8088: Es un microprocesador de 16 bits, usado en las primeras PC´S (XT compatibles). Soporte solamente el modo real. Es capaz de direccionar un megabytes de memoria y posee un bus de datos de 8 bits. El 8086 es Similar al 8088, con la excepción de que el bus de datos es de 16 bits. El 0188 es similar al 8088, pero con un conjunto de instrucciones extendidos y ciertas mejoras en la velocidad de ejecución. Se incorporan dentro del microprocesador algunos chips que anteriormente eran externos, consiguiéndose unas mejoras en el rendimiento del mismo. El 80186 es igual al 80188 pero con un bus de datos de 16 bits. El 80286 Incluye un conjunto de instrucciones extendidos del 80186, pero además soporta memoria virtual, modo protegido y multitarea. El 80386 soporta procesamientos de 16 y 32 bits. El 80386 es capas de manejar memoria real y protegida, memoria virtual y multitarea. Es más rápido que el 80286 y contiene un conjunto de instrucciones ampliables. El 80386SX es similar al 80386 por un bus de datos de solo 16 bits. El 80486 incorpora un cache interno de 8k y ciertas mejoras de velocidad con respecto al 80386. Incluye un coprocesador matemático dentro del mismo chip. El 80486SX es Similar a los 80486 con la diferencia que no posee coprocesador matemático y 80486DX2 es Similar al 80486, pero con la diferencia de que internamente, trabaja al doble de la frecuencia externa del reloj.
El 80x86 tiene dos procesadores en el mismo chip. Estos son La Unidad de Ejecución y La Unidad de Interface con los Buces. Cada uno de ellos contiene su propio registro, su propia sección aritmética, sus propias unidades de control y trabajan de manera asincrónica el uno con el otro para proveer la potencia total de computo. La unidad de Interface de bus se encarga de buscar las instrucciones para adelantar su ejecución y proporciona facilidades en el manejo de las direcciones. Luego, la unidad de Interface se responsabiliza del control de la adaptación con los elementos externos del CPU central. Dicha unidad de interface proporciona una dirección de 20 Bits o un dato de 16 para la unidad de memoria o para la unidad de E/S en la estructura externa del computador.
DEFINICIÓN DE LOS SISTEMAS NUMÉRICOS
SISTEMA DECIMAL
Desde hace muchos años, el hombre ha utilizado como sistema para contar el denominado decimal, que derivó del sistema numérico indoarábigo; posiblemente se adoptó este mismo por contar con diez dedos en las manos. El sistema decimal es unos de los denominados sistemas posicionales, utilizando un conjunto de símbolos cuyo significado depende fundamentalmente de su posición relativa al símbolo de coma (.), Denominado coma decimal, que en caso de ausencia se supone colocada implícitamente a al derecha. Utiliza como base el 10, que corresponde al número de símbolos que comprende para la representación de cantidades; estos símbolos (también denominados dígitos) son: 0 1 2 3 4 5 6 7 8 9. Una determinada cantidad, que denominaremos número decimal, se puede expresar de la siguiente forma:
Donde: base = 10, i= posición respecto a la coma, D = Nº. Dígitos a la izquierda de la coma, N = Nº , de dígitos a la Izquierda de la coma, Dígito = cada uno de los que componen el número. Esta forma corresponde al teorema fundamental de la numeración y por tanto corresponde a la representación,Por ejemplo, la representación de las cantidad 1992 es:
SISTEMA BINARIO
Es el sistema que utiliza internamente el hardware de las computadoras actuales, por ello será el sistema al que se le prestará mayor atención y estudio. Se basa en la representación de cantidades utilizando los dígitos 1 y 0. Por tanto su base es 2 (número de dígitos del sistema). Cada dígito de un número en este sistema se denomina bit (contracción de binary digit).
Se puede utilizar con nombre propio determinados conjuntos de dígitos en binario. Cuatro bits se denominan cuaterno (ejemplo: 1001), ocho bits octeto o byte (ejemplo: 10010110), al conjunto de 1024 bytes se le llama Kilobyte o simplemente K, 1024 Kilobytes forman un megabyte y 1024 megabytes se denominan Gigabytes.
SISTEMA OCTAL
Es un sistema de numeración cuya base es 8, es decir, utiliza 8 símbolos para la representación de las cantidades, Estos símbolos son; 0 1 2 3 4 5 7. Este sistema también es de los llamados posicionales y la posición de sus cifras se mide con relación a la coma decimal que en caso de no aparecer se supone implícitamente a la derecha del número. La aritmética en este sistema es similar a la de los sistemas binario y decimal, por lo que no entraremos en su estudio.
SISTEMA HEXADECIMAL
Es un sistema posicional de numeración en el que su base es 16, por tanto, utilizará 16 símbolos para la representación de cantidades, estos símbolos son; 0 1 2 3 4 5 6 7 8 9 A B C D E F. Se la asignan los siguientes valores absolutos a los símbolos A, B, C, D, E y F:
Cabe destacar que este sistema numérico tiene mucha utilidad, en las operaciones internas del computador, ya que por ejemplo cuando se utiliza el comando DEBUG, los valores contenidos en todos los registros de memoria se especifican en hexadecimal. Sí dos valores se suman, restan, multiplican o dividen, el resultado se presenta en hexadecimal. Dado que lo más común es el sistema decimal, es necesario efectuar una conversión de hexadecimal y viceversa para obtener el resultado de cualquier operación en el formato DEBUG.
Transformaciones
10(10)=1010(2)
1000(10)=3710(8)
0.140625*8=1.125 0.140625(10)=0.11(8) 0.125*8=1.0
1000(10)=3E8(16)
0.06640625*16=1.0625 0.0625*16 = 1.0 Luego 0.06640625(10)=0.11(16)
Ej.: pasar el número 2BC a binario
Finalmente él número hexadecimal en binario es igual a: 001010111100
Ej.: Convertir el número octal 1274 en binario.
Por lo tanto el número octal en binario es igual a: 001010111100
TIpos de programas ejecutables
Cuando el sistema operativo transfiere el control a un programa COM, todos los registros de segmento apuntan al PSP. El registro apuntador de pila (SP), contiene el valor en la memoria de OFFFEh si la memoria los permite. En otro caso adopta el mínimo valor posible menos dos bytes (el MS-DOS introduce un cero en la pila antes de transferir el control al programa). Aún cuando la longitud de un programa COM no puede exceder de los 64 , las versiones actuales del MS-DOS reservan toda la memoria disponible. Si un programa COM debe ejecutar otro proceso, es necesario que el mismo libere la memoria no usada de tal manera que pueda ser empleada por otra aplicación. Cuando un programa COM termina, puede retornar al control del sistema operativo por varios medios. El método preferido es el uso de la función 4Ch de la Int 21, la cual permite que el programa devuelva un código de retorno al proceso que invocó. Sin embargo, si el programa está ejecutándose bajo la versión 1.00 del MS.DOS, el control debe ser retornado mediante el uso de la Int 20h. Un programa COM puede ser ensamblado a partir de varios módulos objeto, con la condición de todos ellos empleen los mismos nombres y clases de segmentos y asegurando que él modulo inicial, con el punto de entrada en 0100h sea enlazado primero. Adicionalmente todos los procedimientos y funciones deben tener el atributo NEAR, ya que todo el código ejecutable estará dentro del mismo segmento.
Al enlazar un programa COM el enlazador mostrará el siguiente mensaje; "Warnig: no stack segment". Este mensaje puede ser ignorado, ya que el mismo se debe a que se ha instruido al enlazador para que genere un programa con extensión EXE donde el segmento de pila debe ser indicado de manera explícita, y no así en los COM donde esta es asumida por defecto. En la zona desde 000Ah hasta 0015h dentro del PSP se encuentran las direcciones de las rutinas manejadoras de los eventos Ctrl-C y Error critico. Si el programa de aplicación altera estos valores para sus propios propósitos, el MS-DOS los restaura al finalizar la ejecución del mismo. Estructura del prefijo de programa.
La palabra de datos en desplazamiento 002Ch contiene la direccion del segmento de bloque de variables de ambiente (Environment block), el cual contiene una serie de cadenas ASCIIZ. Este bloque es heredado del proceso que causo la ejecución del programa aplicación. Entre la información que contiene tenemos, el paso usado por el COMAND.COM para encontrar el archivo ejecutable, el lugar del disco donde se encuentra el propio COMAND.COM y el formato del prompt empleado por este. La cola de comandos, la cual está constituida por los caracteres restantes en la línea de comandos, después del nombre del programa, es copiado a partir de la localidad 0081h en el PSP. La longitud de la cola, sin incluir el carácter de retorno al final, está ubicada en la posición 0080h. Los parámetros relacionados con redireccionamiento o piping no aparecen en esta posición de la linea de comandos, ya que estos procesos son transparentes a los programas de aplicación. Para proporcionar compatibilidad con CP/M, el MS-DOS coloca los dos primeros comandos en la cola, dentro de los bloques de control del archivo (FCD) por defecto en las direcciones PSP:005Ch yPSP:006Ch asumiendo que pueden ser nombre de archivos. Sin embargo, si alguno de estos comandos son nombres de archivos que incluyen especificaciones del paso, la información colocada en los FCB no será de utilidad ya que estas estructuras no soportan el manejo de estructuras jerárquicas de archivos y subdirectorios. Los FCB son de muy escaso uso en los programas de aplicación modernos. El área de 128 bytes ubicado entre las direcciones 0080h y 00FFh en el PSP pueden también servir como área de transferencia de disco por defecto (DTA), la cual es establecida por el MS-DOS antes de transferir el control al programa de aplicación. A menos que el programa establezca de manera explícita otra DTA, este será usado como buffer de datos para cualquier intercambio con disco que este efectué. Los programas de aplicación no deben alterar la información contenida en el PSP a partir de la dirección 005Ch.
Imagen de Memoria de un programa EXE típico
Formato de un archivo de carga EXE.
El contenido inicial del segmento de pila y de la apuntador de pila provienen también del encabezado del archivo. Esta información es derivada de la declaración del segmento de pila efectuada mediante la sentencia STACK. El espacio reservado para la pila puede ser inicializado o no dependiendo de la manera como este haya sido declarado. Puede ser conveniente en muchos casos inicializar el segmento de pila con un patrón de caracteres predeterminados que permitan su posterior inspección. Cuando el programa EXE finaliza su ejecución debe retornar el control al sistema operativo mediante la función 4Ch de la Int 21h. Existen otros métodos, pero no ofrecen ninguna otra ventaja y son considerablemente menos convenientes " Generalmente requieren que el registro CS apunte al segmento de PSP".
Un programa EXE puede ser construido a partir de varios módulos independientes. Cada modulo puede tener nombres diferentes para el segmento de código y los procedimientos pueden llevar el atributo NEAR o FAR, dependiendo del tamaño del programa ejecutable. El programador debe asegurarse de que los módulos, a ser enlazados solo tenga una declaración de segmento de pila y que haya siod definido un único punto de entrada (por medio de la directiva END). La salida del enlazador es un archivo con extensión EXE el cual puede ser ejecutado inmediatamente.
ACCESO A LAS INTERRUPCIONES DEL BIOS Y DOS DESDE ROM
El ROM BIOS y DOS contiene rutinas que pueden ser usadas en los programas. Estas rutinas usualmente no son invocadas por procedimientos usuales, pero pueden ser accedido por mecanismos de interrupción. La mayoría de los programadores típicamente organizan los programas por intrusiones CALL. El BIOS y las funciones del DOS están en forma de código objeto, y se encuentran en direcciones de memoria, en el lenguaje ensamblador hay una instrucción denominada INT que genera una interrupción de software, en un microprocesador 80x 86 que provee una solución a determinado código de interrupción. El 80 x 86 usa código de interrupciones como índice en una tabla para localizar la rutina a ejecutar cuando la interrupción ocurre. Esta tabla de funciones son conocidas como Tabla del Vector de Interrupción (IVT) y las funciones son conocidas como Interrupciones Rutinarias de Servicio (ISR’s). El IVT esta localizado en el primer 1,024 Byte de Memoria y contiene 256 entradas. Desde cada dirección ISR es de la forma CS:IP cada entrada en el IVT requiere de 4 Byte de almacenamiento (256 * 4 = 1,024 B). El 80x86 recibe la señal de interrupción primero empuja (PUSH) los Flags, CS y el registro IP que se encuentra en la pila en ese orden, luego el CPU usa el numero de interrupción para indexarlo en el vector de interrupción (IVT) y luego salta a las rutinas de servicio de interrupción (ISR’s) para esa interrupción. El ISR’s termina con IRET (Interrup RETRY) los cual remueve los datos de la pila (POP) el Intrusión Pointer (IP), el Code Segment (CS) y Flags de la Stack (pila) por la cual retorna el control a la interrupción del programa. Ej: 1.- Ejecutando la interrupción 5 ocasiona que el microprocesador grabe el siguiente estado y salta a la función de la tabla IVS en la entrada de la interrupción 5, 2.- El microprocesador ejecuta el código que maneja en esa interrupción (imprimir pantalla), 3.- Cuanto IRET es ejecutado se devuelve el control justo después del comando colocado en el programa objeto. Principales Interrupciones del BIOS y del DOS
Anexo Nº 1
BIBLIOGRAFÍA
Trabajo realizado por: Miguel Pita m_pita@hotmail.com Publicación enviada por Miguel Pita Contactar mailto:m_pita@hotmail.com Código ISPN de la Publicación EpZVVEZuApztIrHSaY Publicado Friday 30 de January de 2004 Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||