Está en la página 1de 16

Índice

Capítulo 1. Introducción al microprocesador y la computadora. ......................... 2


Antecedentes Históricos.................................................................................... 2
La era mecánica .............................................................................................. 2
La era eléctrica ............................................................................................... 3
Avances en la programación ........................................................................... 3
La era del microprocesador ............................................................................ 4
El microprocesador moderno.......................................................................... 4
El futuro de los microprocesadores................................................................. 6
El Sistema de Computadora Personal basado en microprocesadores. ............... 6

La memoria y el sistema de E/S ....................................................................... 6


Registros de propósito especial ...................................................................... 9
Arquitectura interna del microprocesador. ....................................................... 8
El modelo de programación ............................................................................ 8
Registros de segmento ................................................................................. 10
Introducción al direccionamiento de memoria en modo protegido ................. 11
Selectores y descriptores .............................................................................. 12
Modos de direccionamiento de datos ............................................................. 15
Capítulo 1. Introducción al microprocesador y la computadora.
Antecedentes Históricos.
La era mecánica

Está claro destacar que la idea de crear un sistema computacional abarca desde hace mucho tiempo
atrás desde la inversión de los primeros dispositivos eléctricos-electrónicos de la era moderna.
Tomando en cuenta la idea de los babilonios de inventar el ábaco (utilizado en la actualidad) por
la necesidad de realizar cálculos matemáticos hasta ser reinventado por Blaise Pascal, que inventó
una calculadora a base de engranes y ruedas, la cual es la base de todas las calculadoras mecánicas).
Como dato curioso, el lenguaje de programación PASCAL es llamado así en honor a Blaise Pascal,
por ser el pionero en las matemáticas y la calculadora mecánica.
Las primeras máquinas mecánicas llegaron a principios de 1800, esto antes del descubrimiento de
la electricidad. En 1937, se dio a conocer otros de los pioneros de la maquinaria computacional
mecánica fueron Charles Babbage y Ada Byron. Ellos crearon una máquina que permitiera generar
tablas de navegación para la Armada Real Británica, a la cual llamaron Maquina Analítica. Dicha
maquina operaba a base de vapor que almacenaba 1000 números decimales de veinte dígitos y un
programa que podía modificar las funciones de esta para realizar diversos cálculos. Esta obtenía
información en base a tarjetas perforadas, pero dicha idea de Baggage empezó a perder sentido
cuando los maquinistas de aquella época no eran capaces de recrear las piezas mecánicas
necesarias.
La era eléctrica

Los principios de 1800 fueron testigos de la creación del motor eléctrico, construido por Michael
Faraday, el cual fue la base para la construcción de una gran cantidad de máquinas de sumar
controladas por los mismos motores. Dichas calculadoras no fueron comunes como los equipos de
oficina hasta la llegada de la primera calculadora electrónica portátil en la década de 1970, esta
misma fue introducida por Bomar Corporation y fue llamada Cerebro Bomar. En 1889 Hernan
Hollerith creo una tarjeta perforada capaz de almacenar dados, así como un equipo mecánico que
contaba, ordenaba y cotejaba información y las almacenaba en dichas tarjetas perforadas. Hollerith
formo la empresa Tabulatin Machine Company, la cual se encargó del desarrollo de equipos que
utilizaran dicha tecnología, esta empresa actualmente se le conoce como IBM. Estos equipos
dominaron el campo hasta la llegada del primer calculador electrónico en 1941, construida por
Konrad Zuse, ingeniero de la empresa Henschel Aircraft Company. Dicha calculadora fue
nombrada Z2. Con base en su creación surgieron nuevas ediciones de calculadoras, como lo fueron
la Z3, que fue esencial en la segunda guerra mundial. Después el primer sistema computacional
eléctrico se puso en operación en 1943 para quebrantar códigos militares secretos de la antigua
Alemania. Dicho sistema fue inventado por Alan Turing, a la cual la llamo Colossus. Hubo
problemas con Colossus, como la incapacidad de resolver problemas generados por la maquina
Enigma, esto debido a que era un sistema computacional de programa fijo, por lo cual era una
computadora de propósito especial.
Después de esto se desarrolló el primer sistema computacional programable de propósito general
en 1946 por la Universidad de Pensilvania, y llamada ENIAC. Este sistema era capaz de realizar
100,000 operaciones por segundo aprox. Luego vino el desarrollo del transistor en 1947 por parte
de Laboratorios Bell, seguido de la invención del circuito integrado por Texas Instruments, que
conllevo a la creación del primer procesador por parte de Intel.
Avances en la programación

Con la aparición de programas y los lenguajes de programación en base a la aparición de las


maquinas programables, como el primer lenguaje de tipo controlador de computadoras fue el
lenguaje máquina, que se componía de unos y ceros, y que eran capaces de revelar instrucciones
para dichas computadoras. El primer sistema que permitió esto fue creado por John von Neumann
(que se basó en la idea de Babbage).
Luego de esto llego el Lenguaje Ensamblador que vino a simplificar la tarea de brindar a la
computadora código binario para realizar ciertas instrucciones, ya que permite utilizar ciertos
códigos nemónicos basados en código binario. En 1957, apareció el primer lenguaje de
programación de alto nivel llamado FLOW-MATIC, seguido del lenguaje FORTRAN, que
permitía el uso de fórmulas matemáticas, algo parecido al lenguaje posterior llamado ALGOL.
Todos los lenguajes anteriormente mencionados no fueron lo suficientemente exitosos como lo
fue la llegada de COBOL, que se enfocaba a los negocios. Así como RPG, que permita entrada,
salida y cálculos de datos. Cabe destacar que han aparecido muchos lenguajes adicionales, cada
uno teniendo un papel importante en cada tipo de tarea.
La era del microprocesador

El primer microprocesador fue el Intel 4004, de 4 bits y contenía 45 instrucciones en base a la


tecnología MOSFET. Este microprocesador fue muy utilizado en sistemas de videojuegos y
sistemas de control. Después vino la mejora de este con el desarrollo del Intel 4040, así como la
salida de otros microprocesadores de 4 bits, que aún existen en software de bajo nivel como el que
manejan los microondas o sistemas de control, o también en las calculadoras que procesan códigos
BCD (decimal codificado en binario) de 4 bits.
Los ingenieros de aquella época fueron desarrollando usos más sofisticados para los
microprocesadores que estuvieron siendo desarrollados como el 8008, que conllevo al 8080. El
procesador 8080 era capaz de redireccionar memoria rápidamente, ejecutar instrucciones
adicionales, además de hacerlo por 10 veces más rápido que su predecesor. Pero esa no fue la
limitación de Intel, ya que su sucesor 8085 fue capaz de superarlo enormemente reduciendo su
tiempo de operación por operación, así como contar con habilidades extra, como tener un reloj
interno, un controlador de sistema interno y una frecuencia de reloj más alta.
El microprocesador moderno
Intel saco el microprocesador 8086 en 1978, pero en 1979 saco el 8088. Ambos eran
microprocesadores de 16 bits que podían ejecutar 2.5 millones de instrucciones p/seg. Además,
redireccionaban memoria a mayor capacidad. Estos impulsaron el desarrollo de diversas
aplicaciones sofisticadas, sobre todo las matemáticas, ya que estos microprocesadores se les llama
CISC (computadora de conjuntos de instrucciones complejas) debido al número y la complejidad
de instrucciones que pueden manejar.
La popularidad de Intel fue reconocida cuando IBM decidió utilizar el procesador 8080 en sus
computadoras personales, pero debido a las limitaciones que este tenía tuvieron que reinventarlo
y crear el microprocesador 80286.
Microprocesador 80286: Es un procesador de 16 bits muy parecido al 8008, pero que direccionaba
memoria a 16 Mb/s y contaba con instrucciones adicionales que administraban 15 Mb de memoria
adicional. También tenía un incremento en cuanto a velocidad de reloj, así como ambos en la
ejecución interna de las instrucciones, que permitió un aumento considerable en la velocidad de
ejecución.
Microprocesador de 32 bits: Debido a la necesidad de mayor velocidad por ciertas aplicaciones,
llego a el mercado en 1986 el microprocesador 80386, el primer procesador de 32 bits. Era capaz
de direccionar hasta 4 Gb de memoria. Este procesador tuvo varios derivados como el 80386SX,
el 80386Sl/803386SLC, entre otros. No fue hasta 1995, que Intel saco el 80386EX, llamado PC
Integrada que tenía todos los componentes de la PC clase AT en un solo circuito integrado.
Además, contiene 24 líneas de E/S de datos, un bus de direcciones de 26 bits, un bus de datos de
16 bits, controlador DRAM y una lógica de chip programable.
Normalmente, las aplicaciones requieres una velocidad alta de procesador, así como una gran
cantidad de memoria. Dichas aplicaciones incluyen sistemas con uso de interfaces graficas de
usuario que requieren una gran capacidad de procesamiento para mostrar imagen por medio de
una pantalla. Hay un sistema especial que requiere cierto tipo de procesadores para su interfaz
gráfica, su nombre es Windows.
Este procesador incluía una unidad de administración de memoria que permitía la asignación y
administración de recursos por parte de este.
Microprocesador 80486: Muy similar al 80386, permitía que la mitad de sus instrucciones fueran
ejecutadas en un solo ciclo de reloj, lo cual significaría la mejora del promedio de velocidad para
una mezcla de instrucciones a la velocidad del 80386. Dicho procesador tenía varias divisiones
como el 80486DX2 cuya velocidad aumentaba el doble y sus transferencias de memoria se
ejecutaban a 33 MHz. Cabe destacar que después salieron diversos microprocesadores en base a
este, tanto de Intel como de otras corporaciones como AMD, Motorola, entre otros.
Microprocesador Pentium: Dicho fue introducido en 1993, sus primeras dos versiones utilizaban
una frecuencia de reloj de 60 y 66 MHz respectivamente. También se encontraba el Pentium con
una doble velocidad de reloj, la cual operaba a 120 MHz y 133 MHz, pero el microprocesador
Pentium trabajaba a una velocidad de 133 MHz. Pentium permitía la transferencia de datos de
memoria entre programas gracias a sus memorias caché. Estos son unos de los procesadores más
importantes de todos los tiempos ya que gracias a ellos se permitió la introducción de diversas
instrucciones y características esenciales para los sistemas de estas épocas, como lo son las
extensiones multimedia, el software y video en realidad virtual, entre otras características.
Tomando en cuenta lo anterior, lo más destacado por parte de Pentium fue el hecho de que sus
procesadores sean de enteros duales, debido a que permite la ejecución de dos instrucciones de
manera simultánea. Esto fue llamado la tecnología superescalar. Además, cuenta con una
tecnología que permite la predicción de saltos que agiliza la ejecución de programas. Gracias a
estas características, es posible la sustitución de equipos RISC.
Procesador Pentium Pro: Antes conocido como P6, este procesador se caracteriza por tener 21
millones de transistores, tres unidades de enteros y una de punto flotante que permite un aumento
en el rendimiento. Este tuvo grandes cambios en cuanto a sus predecesores, ya que cuenta con 3
motores de ejecución, por lo tanto, aumenta su superescalamiento en cuanto a ejecución de tareas,
además que es capaz de ejecutar código de 32 bits con alta eficiencia. Dicho microprocesador fue
lanzado para el mercado de los servidores.
Microprocesador Pentium II y Xeon: Este tuvo un cambio en cuanto a los microprocesadores
anteriores, ya que fue colocado en un tablero de circuitos llamado módulo de Pentium II. Dicho
microprocesador tuvo severos cambios desde la velocidad de los buses del sistema, como en
frecuencias de reloj.
En 1998 se anunció una versión nueva con el nombre de Xeon, diseñado para aplicaciones de
Workstation de alta tecnología, así como para servidores. Las diferencias con su predecesor van
desde las variaciones entre memorias caché y que Xeon funciona con un juego de chips 440GX,
lo que significa un cambio radical el mismo. Por su parte, Intel desarrolló una versión profesional,
así como una para hogar/oficina del Pentium II.
Microprocesador Pentium III: A diferencia del Pentium II, este tiene un núcleo más rápido, pero
sigue siendo un P6. Además de que maneja diversas versiones como lo son la Slot 1 y la Socket
370. La Slot 1 fue montado en un cartucho de plástico mientras que la Socket 370 (también
conocida como flip-chip) maneja cierto parecido con la Pentium II. Dichas versiones son muy
similares entre sí, tanto en velocidad de reloj, como en caché.
Microprocesador Pentium 4: Este fue en su momento el más reciente microprocesador diseñado
por Intel, allá por los 2000. Dicho procesador manejaba velocidades de hasta 3.2 GHz, además que
utilizaba Memorias DDR en vez de SDRAM. Mejoró su velocidad gracias al incremento de su
integración interna, además de la maximización del tamaño de sus cachés. Otro de los cambios fue
la sustitución de interconexiones de aluminio a de cobre, ya que este último es mejor conductor y
permite una mayor frecuencia de reloj para los procesadores.
El futuro de los microprocesadores

Es demasiado evidente que no se pueden hacer predicciones sobre el futuro incierto de los
microprocesadores, ya que estarán evolucionando por una incontable cantidad de años. Debemos
tomar en cuenta que ya ha habido una gran cantidad de cambios desde aquellos años, desde la
implementación de nuevas tecnologías como lo fue Hyper-Threading, que permitió el
multiprocesamiento de forma paralela.

El Sistema de Computadora Personal basado en microprocesadores.


La memoria y el sistema de E/S

Tomando en cuenta que las estructuras de memoria de la mayoría de los procesadores existentes
se basaron en Intel podemos decir que dichos microprocesadores interactúan con otros bloques del
sistema que permite una interacción con el computador. Dichos bloques se identifican como
Sistema de memoria y Sistema de E/S.
El sistema de memoria se divide en 3 partes: El área de programas transitorios (TPA), el área del
sistema y el sistema de memoria extendida (XMS), la existencia de este último bloque depende
del tipo de microprocesador. Aquellos equipos que contienen memoria extendida son conocidos
como equipos de arquitectura estándar de la industria (ISA) o ISA extendida (EISA). La
implementación del Pentium y de los equipos ATX fue la adición de un bus llamado PCI
(interconexión de complementos periféricos). En otros equipos se destaca la existencia del bus
local VESA, que se encarga de conectar el disco y el video con el microprocesador a nivel local.
De los buses manejados por los sistemas clase ATX, se distinguen tres en base de importancia: El
USB, diseñado para conectar periféricos como teclados, ratones, módems, entre otros. El AGP,
diseñado para las tarjetas de video y el microprocesador a velocidades aumentadas. Y, por último,
el SATA, para las unidades de disco duro que se encarga de la transferencia de datos entre PC-
Disco Duro.
La TPA: Definido como el área de programas transistorios que se encarga del guardado de sistema
operativo DOS y otros programas que controlan el sistema. Dicho sistema utiliza direcciones de
memoria en hexadecimal para enumerar cada byte del sistema de memoria. Los vectores de
interrupción pueden accedes a ciertas características de la DOS, como lo son la BIOS y las
aplicaciones. El BIOS es una colección de programas almacenados en la memoria ROM o Flash,
y que se encarga de contener datos utilizados por los programas para acceder a los dispositivos de
E/S, así como las características internas del sistema.
El área del sistema: Esta área contiene programas en la ROM y áreas de lectura/escritura en la
RAM de manera que puedan almacenar datos en ella. Al igual que la TPA, también maneja las
direcciones de memoria de manera hexadecimal.
La primera área contiene la RAM de visualización de video, así como los programas de control de
video en la ROM, cuyo tamaño y cantidad de memoria utilizada depende el tipo de adaptador de
visualización de gráficos que se esté utilizando. La segunda área se utiliza para el sistema de
memoria expandida y su uso depende del sistema y la configuración de este. Por último, la ROM
de la BIOS se encuentra al principio del área misma, y se encarga de la operación de los
dispositivos básicos de E/S conectados al sistema.
Sistemas Windows: Estos sistemas manejan un mapa de memoria dividido en 2 áreas, uno para el
TPA y otro para el sistema. La diferencia entre este mapa y el del DOS se demuestran en los
tamaños y la ubicación de estas áreas. La TPA se compone de los primeros 2 GB de sistema de
memoria y el área del sistema se compone por los últimos GB. La BIOS se encuentra en el área
del sistema, así como el programa Windows y sus controladores. Windows se encarga de asignar
memoria física a la aplicación, y si no hay la suficiente, utiliza el disco duro como memoria física.
Espacio de E/S: Este espacio en un sistema computacional contiene direcciones de puerto de E/S,
los cuales son parecidos a las direcciones de memoria, pero direccionan a puertos de E/S. Los
dispositivos de E/S permiten que el microprocesador pueda interactuar con el exterior. Esta área
contiene dos secciones principales, como: Por debajo de la posición 0400H se considera para los
dispositivos del sistema, mientras que el espacio restante es para dispositivos externos y/o
expansiones. Varios dispositivos que controlan las operaciones del sistema no se direccionan
directamente, sino, la BIOS los direcciona.
El Microprocesador: Este es la parte central de los sistemas computacionales, ya que es el elemento
que los controla, ya sea la memoria y la E/S, a través de conexiones llamadas buses. Estos buses
seleccionan dispositivos E/S o de memoria y transfieren datos entre ellos y el microprocesador.
Este realiza 3 tareas esenciales: 1. Transfiere datos entre los sistemas de memoria o E/S y sí mismo.
2. Realiza operaciones aritmética-lógicas (suma, resta, división, AND, OR, por ejemplo). 3.
Mantiene el flujo de los programas mediante decisiones simples (Zero, Sign, Parity, Overflow,
etc.). Su poder está en su capacidad de multiejecución de instrucciones por segundo que provienen
del conjunto de programas que se manejan por el sistema. Otra de sus características importantes
es que es capaz de realizar decisiones simples en base a hechos numéricos.
Buses: Estos son un grupo de cables que interconectan componentes en un sistema computador, y
que se encargan de la transferencia de información sobre direcciones, datos y control sobre el
microprocesador y sus sistemas de memoria y E/S.
Existen 3 buses: De dirección, De datos y De control. El Bus de dirección se encarga de solicitar
a la memoria una posición de memoria y/o solicita una posición de E/S a un dispositivo selecto.
El bus de datos se encarga de transferir datos variantes de tamaño. Estos se caracterizan por su
anchura, ya que es la causa de la velocidad en aplicación que lo utilizan. Por último, el bus de
control se encarga de las operaciones de lectura/escritura ya sea en memoria o en los dispositivos
de E/S, divididos en 3 conexiones, las cuales son: MRDC (control de lectura de memoria), MWTC
(control de escritura de memoria), IORC (control de lectura de E/S) y la IOWC (control de
escritura de E/S).

2.1. Arquitectura interna del microprocesador.


El modelo de programación

Desde el procesador 8086 al Pentium 4, se es posible visualizar su modelo de programación por


parte de todos los programas, ya que sus registros son utilizados al mismo tiempo que se ejecuta
la programación de aplicaciones y se especifican mediante instrucciones. Por otro lado, otros
registros se consideran invisibles para los mismos programas, estos están en los procesadores
superiores al 80286, ya que se utilizan para controlar y operar el sistema en modo protegido,
además de otras características.
Dicho modelo de programación contiene registros desde 8 hasta 32 bits. Algunos de estos son de
propósito general, mientras que otros tienen propósitos especiales.
Los registros multipropósito se denominan como:
EAX (Acumulador): Registro de 32 bits como EAX, registro de 16 bits como AX o como uno de
dos registros como AH y AL. Se utiliza para instrucciones como multiplicación, división e
instrucciones de ajuste
EBX (Índice Base): Puede direccionarse como EBX, BX, BH o BL. El registro BX es capaz de
guardar direcciones de desplazamiento de posiciones.
ECX (Conteo): Es un registro de propósito general que puede guardar el número total de
instrucciones. También es capaz de guardar direcciones de desplazamiento de datos en memoria.
Las instrucciones que lo utilizan son aquellas de cadena repetida, de desplazamiento, de rotación
y de ciclos.
EDX (Datos): Registro de propósito general que se encarga de guardar resultados de
multiplicaciones o parte del dividendo antes de una división. Es capaz de direccionar datos de
memoria.
EBP (Apuntador de la base): Registro que apunta a una dirección de memoria para transferencias
de datos de memoria. Puede redireccionarse como BP o EBP.
EDI (Índice de destino): Este se encarga del direccionamiento de datos de destino de cadena cuyo
destino son las instrucciones de cadenas. Funciona también como un registro de propósito general
de 32 bits como EDI o de 16 bits como DI.
ESI (Índice de origen): Puede ser utilizado como ESI o SI. Dicho índice direcciona datos de cadena
de origen para la creación de cadenas y sus instrucciones. También funciona como registro de
propósito general, siendo utilizado como SI en 16 bits o ESI en 32 bits.
Registros de propósito especial

EIP (Apuntador de instrucciones): Este se encarga de direccionar instrucciones en una sección de


memoria llamada segmento de código. Es IP cuando es de 16 bits y opera en modo real, así como
es EIP cuando es de 32 bits y opera en modo protegido. Dicho registro apunta a las instrucciones
de programa y es posible modificarlas mediante saltos o instrucciones de llamada.
ESP (Apuntador de la pila): Direcciona un área de memoria llamada pila, la cual almacena datos
por medio de este apuntador. Se hace referencia como SP si es de 16 bits y como ESP si es de 32
bits.
EFLAGS (Banderas): Este refiere a la condición actual del microprocesador y controla la forma
en la que opera. Estas son compatibles para los microprocesadores superiores o iguales al 8086.
El 8086 contiene un registro FLAG (16 bits) y del 80386 a superiores contienen un registro EFLAG
de 32 bits.
C (Acarreo): Se encarga de guardar el valor de acarreo después de cualquier suma, o de la
sustracción después de la resta. Indica condiciones de error indicador por programas o
procedimientos.
P (Paridad): Aplica un valor de 0 si la paridad es impar y un 1 para paridad par. Esta es el conteo
de unos en un nuero expresado como par o impar. Tiene poca aplicación en la programación
moderna, más que nada fue implementado para microprocesadores Intel para la comprobación de
datos en entornos de comunicación, la cual en la actualidad quien está de encargado es el equipo
de comunicación de datos.
A (Acarreo auxiliar): Guarda el acarreo después de la suma o la sustracción después de la resta,
pero solo entre la posición 3 y 4 del resultado. Es comprobado por la instrucción DAA y DAS con
el bien de ajustar el valor de AL después de las sumas o restas.
Z (cero): Indica que el resultado de una operación aritmética o lógica es un cero, por lo tanto, si Z
es 1, el resultado es cero; pero si Z es 0, entonces el resultado no será 0.
S (Signo): Se encarga del guardado del signo aritmético de un resultado perteneciente a una
operación aritmética-lógica. Su valor es S es 1 cuando el signo está activo (es negativo) y S es 0,
si está desactivado (es positivo=.
T (Trampa): Esta habilita la retención de una característica de depuración que contiene el chip. Si
está habilitada, el procesador interrumpe el flujo del programa, pero si está desactivada se
deshabilita dicha característica. Visual C++ utiliza esto para depurar software con fallas.
I (Interrupción): Este se encarga de controlar la operación de la terminal de entrada INTR, la cual
es habilitada cuando el valor es de 1, pero si es de 0, se deshabilita dicha terminal.
O (Desbordamiento): Este ocurre cuando se hace una operación de suma o resta de números con
signos. Indica que su resultado excedió la capacidad de la máquina. Por lo tanto, se encarga de
representar el desbordamiento de valores que la maquina es capaz de manejar.
IOPL (Nivel de privilegio de E/S): Se utiliza en operación en modo protegido cuya función en esta
es definir el nivel de privilegio que tiene los dispositivos de entrada y salida del equipo. Entre
mayor sea el nivel de privilegio, más rápido podrá ejecutarse y con impedimentos nulos. Por otro
lado, entre menor sea, se producen interrupciones que podrían causar la suspensión de la ejecución.
NT (Tarea anidada): Indica que la tarea en ejecución está anidada dentro de otra tarea en operación.
Es anidada mediante software.
RF (Continuación): Se utiliza con la depuración para controlar la continuación de la ejecución
después de una instrucción pertinente.
VM (Modo virtual): Selecciona la operación virtualmente en un sistema en modo protegido.
Permite la coexistencia de varias particiones de memoria DOS de 1 MB en el sistema de memoria.
Ósea, permite al sistema ejecutar varios programas de DOS.
AC (Comprobación de alineación): Se activa si es que se direcciona una palabra o doble palabra
dentro de un límite que no sea palabra o doble palabra.
VIF (Interrupción virtual): Se encarga de la propagación de información sobre una interrupción en
modo virtual. Utilizado en entornos multitarea para proporcionar banderas de interrupción al SO.
ID(Identificación): Indica que los procesadores del Pentium al Pentium 4 que son capaces de
soportar la instrucción CPUID. Proporciona información al sistema sobre el microprocesador.
Registros de segmento

CS (código): Es una sección en memoria que se encarga de guardar código utilizado por el
microprocesador. Define la dirección inicial de la sección de memoria que el código guarda. En
modo real, define el inicio de una sección de 64 Kb de memoria, pero en modo protegido, selección
un descriptos que describe la dirección inicial y la longitud de una sección de memoria.
DS (Datos): Es una sección de memoria que contiene una gran cantidad de datos utilizador por un
programa, a la cual se accede mediante una dirección de desplazamiento o el contenido de otros
registros que contienen la dirección de desplazamiento.
ES (Extra): Es un segmento de datos adicional utilizado por algunas de las instrucciones de cadena
para guardar datos de destino.
SS (Pila): Define el área de memoria utilizada para la utilización de una pila. Su punto de entrada
se determina por medio de los registros de segmento de pila y su apuntador.
FS y GS: Estos son registros de segmento conocidos como suplementarios, que se utilizan para el
acceso a dos segmentos de memoria adicionales, los cuales Windows utiliza para operaciones
internas, aunque no hay una definición declarada bien.

Introducción al direccionamiento de memoria en modo protegido


A como podemos entender este modo de direccionamiento permite el acceso a los datos y
programas localizados por encima del primer 1 Mbyte de memoria. Para direccionar esta sección
extendida del sistema de memoria en el modo protegido se necesitan cambiar algunos segmentos
del sistema que se utilizan en el modo real. Esto cuando se direccionan datos y programas se sigue
utilizando la dirección de desplazamiento para acceder a la información que hay dentro del
segmento de memoria. Entre otras cosas la dirección de segmento según lo visto ya no está presente
en modo protegido, por otro lado, un registro de segmento contiene un selector que escoge un
descriptor de una tabla de descriptores, este presenta la posición, longitud y derechos de acceso
del segmento de memoria. Como el registro de segmento y la dirección de desplazamiento siguen
accediendo a la memoria, las instrucciones en modo protegido son idénticas a las del modo real.
Aunque los programas escritos para modo real funcionarían para modo protegido sin cambios ni
nada. La diferencia entre estos modos es la manera en que el microprocesador interpreta el registro
de segmento para acceder al segmento de memoria. Otra de las diferencias es que la dirección de
desplazamiento puede ser de 32 a lugar que 16 en modo protegido. Esto permite que el micro
acceda a los datos dentro de un segmento que puede tener hasta 4 Bytes de longitud.
Selectores y descriptores

Los selectores se encuentran en el registro de segmento y este selecciona un descriptor de una o


dos tablas de descriptores. Estos presentan la posición, longitud y derechos de acceso del segmento
de memoria. El registro selecciona de forma indirecta un segmento. Por ejemplo, en el modo real
el segmento empieza en 00080H. en el modo protegido este puede direccionar cualquier posición
de memoria en todo el sistema.
Existen dos tablas de descriptores que se utilizan con los registros de segmento. Una de ellas
contiene descriptores globales y la otra contiene locales. Los globales contienen definiciones de
segmentos que se aplican a todos los programas, mientras que los locales son por lo general únicos
para una aplicación. Ka los globales los podemos llamar descriptores de sistema y a los locales
descriptores de aplicaciones. Cada tabla contiene 8192 descriptores, por lo que hay 16,384
descriptores disponibles para una aplicación en un momento dado. Como un segmento de memoria
puede tener hasta 4 Gbytes de longitud, esto significa que una aplicación podrá tener acceso a 5G
x 16384 bytes de memoria de 64Tbytes.
Un indicador de la posición inicial del segmento de memoria es la porción de dirección base. Para
el microprocesador la dirección base es de 24 bits, por lo que los segmentos empiezan en cualquier
posición de sus 16 Mbyte de memoria. Cuando se operan los límites de los párrafos en los
microprocesadores se eliminan, por lo que los segmentos pueden comenzar en cualquier dirección.
Algunos procesadores pueden utilizar una dirección base de 32 bits que permite que los segmentos
inicien en cualquier posición dentro de sus 4 Gbytes de memoria, como lo son los
microprocesadores 80386 y superiores.
El límite de segmento contiene la última dirección de desplazamiento de un segmento. Algunos
ejemplos es que si los segmentos empiezan de la posición de memoria F00000H y termina en la
posición F000FFH y el límite es 00FH, el microprocesador 80286, la dirección base es F000000H
y el límite es 00FH. Para los 80386 es 00F00000H y el límite es 000FFH. Aquí podemos ver que
los 80286 tiene un límite de 16 bits y los 80386 al Pentium 4 tienen un límite de 20 bits.
Existe otra característica en el descriptor de los microprocesadores del 80386 al Pentium 4 que no
se encuentran en el descriptor del 80286: el bit G, o bit granularidad. Esto permite una longitud
del segmento es de 64 kbytes en el 80286 que la dirección de desplazamiento siempre es de 4
kbytes por lo que es debido a la arquitectura interna de 16 bits es que la dirección de
desplazamiento siempre es de 16 bits. Los microprocesadores 80386 y superiores utilizan una
arquitectura de 32 bits que permite una dirección de desplazamiento (en la operación en modo
protegido) de 32 bits. Esta dirección de desplazamiento de 32 bits permite longitudes de segmento
de 4 Gbytes y la dirección de desplazamiento de 16 bits permite longitudes de segmentos de 64
kbytes. Así dejando por alto que los sistemas operativos funcionan en un entorno de 16 o de 32
bits. Por ejemplo, DOS utiliza un entorno de 16 bits, mientras que la mayoría de las aplicaciones
Windows utilizan un entorno de 32 bits llamado WIN32.
El controlador de acceso al segmento en modo protegido es llamado byte de derecho de acceso.
Este describe la manera que funciona el segmento en el sistema. Este permite pleno control sobre
el segmento. si el segmento es de datos, se especifica la dirección de crecimiento, si el segmento
crece más allá de su límite, se interrumpe el programa del sistema operativo del microprocesador,
indicando una falla de protección general. En este incluso se puede especificar si se puede escribir
en un segmento de datos o si está protegido contra escritura. Al igual que se controla este se puede
controlar el segmento de código y puede inhibir la lectura para proteger el software.
Mediante el registro de segmento los descriptores son seleccionados, este contiene un campo
selector de 13 bits, un bit selector de tabla y otro de campo, de un nivel privilegiado solicitado.
Uno de los 8192 descriptores es seleccionado de la tabla por un selector de 13 bits. De estas tablas
pueden ser seleccionadas 2, la tabla de descriptores globales o la tabla de descriptores locales por
el bit TI. Se le es solicitado al segmento de memoria un nivel de privilegio por el nivel de privilegio
solicitado (RPL). De los niveles de privilegio tenemos el más alto que es 00 y el menor que es 11.
Se otorgará acceso al segmento de memoria solamente cuando el nivel de privilegio solicitado
concuerda o tiene mayor prioridad que el nivel de privilegio establecido por el byte de derechos
de acceso. Un ejemplo para su mayor entendimiento y con fines educativos es que si el privilegio
solicitado es de 10 y el byte de derechos de acceso es de 11, se otorgara el acceso ya que 10 es
mayor en prioridad que el privilegio 11.
Estos privilegios son utilizados en entornos multiusuario, quiere decir que son utilizados por 1 o
más. Algunos de los privilegios o los privilegios utilizados más bien en Windows son el privilegio
00 esta es utilizado para el núcleo y los programas controladores, el nivel de privilegio 11 es para
las aplicaciones. Windows no utilizad los niveles 01 o 1. El sistema tiene una podríamos llamarla
autoprotección que, si se violan estos niveles de privilegio, el sistema inicia una violación de
aplicación o de nivel de privilegio.
Un segmento en el sistema de memoria es seleccionado en la tabla de descriptores globales. Las
tablas de descriptores globales y locales se encuentran en el sistema de memoria. Los
microprocesadores contienen registros invisibles para los programas, así estos pueden acceder a
tablas y especificar su dirección. El software no direcciona directamente estos registros invisibles
para los programas, por eso se les da ese nombre.
Los programas que se utilizan en el modo protegido contienen una porción invisible para cada uno
de los registros. La memoria que almacena cualquier información se llama cache, esta es invisible
para los programas. Esta no debe confundirse con los otros tipos de cache ya sean de nivel 1 o 2,
que se encuentran en el microprocesador. Cada vez que se modifica el número de segmento la
porción de registro del segmento invisible para los programas se carga con la dirección base, con
el límite y los derechos de acceso. En la porción de registro de segmento, el microprocesador
accede a una tabla de descripciones y carga el descriptor, este invisible para los programas. Se
mantiene hi y se utiliza para acceder al segmento de memoria hasta que el número de segmento
cambie de nuevo. De aquí que se utilice el termino cache, el microprocesador accede varias veces
a un segmento de memoria sin hacer referencia a la tabla de descriptores.
Algunos contenedores de la dirección de la tabla de descripciones y su límite son el DTR y el
IDTR. Cada tabla tiene su limite el cual es 16 bits, ya que la máxima longitud de tabla es 64 kbytes.
Se carga la dirección de la tabla de descriptores globales y su límite en el GTDR.
Para poder utilizar o antes de utilizar el modo protegido se debe inicializar la tabla de descriptores
de interrupciones y el IDTR. De la tabla de descriptores globales se selecciona la posición de la
tabla de descriptores locales se selecciona. De manera que direcciona la tabla de descripciones
locales se establece uno de los descriptores. Para acceder a la tabla de descriptores locales, se carga
con un selector, de igual forma que un registro de segmento se carga con un selector. Este sector
accede a la tabla de descriptores globales y carga la dirección, el límite y los derechos de acceso
de la tabla de descriptores locales en la posición de la cache del LDTR.
Una tarea es definida mediante un acceso que se guarda en el TR por sus siglas registro de tareas.
Esta viene siendo por lo general un procedimiento o un programa de aplicación. El acceso puede
controlarse a través de los niveles de privilegio gracias al descriptor para el procedimiento o el
programa de aplicación que se almacena en la tabla de descriptores globales. El TR permite
cambiar de contexto o de tarea en aproximadamente 16 us. En un tiempo considerablemente corto,
la conmutación de tareas permite al microprocesador permite conmutar entre varias tareas. A si
mismo también permite a los sistemas de multitarea conmutar de una tarea a otra de forma simple
y ordenada.
Modos de direccionamiento de datos
Tenemos diferentes modos de direccionamiento como lo son el direccionamiento de registro en el
cual este transfiere una copia de un byte o una palabra del registro de origen, o el contenido de una
posición de memoria al registro de destino o posición de memoria. En algunos procesadores se
pueden transferir dobles palabras desde el registro o posición de memoria de origen hasta el
registro o posición de memoria de destino. Modo más común para direccionar datos y el más fácil
de aplicar una vez que se aprenden los nombres de los registros.
Direccionamiento inmediato, este modo transfiere el origen al registro o posición de memoria de
destino. En algunos procesadores y supresores puede transferirse una doble palabra de datos
inmediatos hacia un registro o una posición de memoria. El termino inmediato implica que los
datos siguen inmediatamente del código de operación en memoria. Estos datos son datos
constantes, mientras que los datos variables son los que se transfieren de un registro a una posición
de memoria. Este opera en base a un byte o palabra de datos. El direccionamiento opera de igual
forma en datos tipo palabra en microprocesadores. Una copia de los datos inmediatos hacia un
registro o una posición de memoria son transferidos inmediatamente mov.
Direccionamiento directo, mueve un byte o palabra entre una posición de memoria y un registro,
este conjunto no permite una transferencia de memoria a memoria, excepto de instrucciones movs.
En algunos procesadores y superiores también puede direccionarse una posición de memoria del
tamaño de una doble palabra. Este modo puede ser usadas las mayorías de las instrucciones. Se
aplica a una instrucción entre una posición de memoria, el por desplazamiento que se aplica a casi
cualquier instrucción en el conjunto de instrucciones.
Direccionamiento de registro indirecto, este transfiere un byte o palabra entre un registro y
posición de memoria direccionados por registro índice o base. BP, BX, DI y SI son los registros
de índice y base. En algunos procesadores y superiores se transfiere entre un registro y una posición
de memoria ya sea una palabra o una doble palabra, y un byte. Permite que se direccionen datos
en cualquier posicionamiento de memoria, a través de una dirección de desplazamiento que se
guarde en cualquiera de los siguientes registros. Estos microprocesadores permiten el
direccionamiento indirecto de registros con cualquier registro extendido. El segmento de datos se
utiliza de manera predeterminada con el direccionamiento indirecto de registros o con cualquier
otro modo de direccionamiento es que utilice a bx. El segmento de piula de manesa predeterminada
direcciona memoria. El tamaño se especifica mediante la directiva especial del ensamblador.
Dirección de base más índice, se transfiere un byte o una palabra entre un registro y la posición de
memoria direccionada por un registro base. En algunos procesadores para generar una dirección
de memoria pueden combinarse dos registros cualesquiera. un importante uso de este modo es para
direccionar elementos en un arreglo de memoria.
Direccionamiento de registro relativo, se mueve un byte entre un registro y posición de memoria
direccionada por un registro índice o base más un desplazamiento. Algunos microprocesadores
para direccionar la memoria utilizan cualquier registro de 32 bits. Este es similar al de base y al
desplazamiento. El desplazamiento es un número que se suma al registro dentro de los corchetes,
como en la instrucción, o puede ser un desplazamiento que se sustrae del registro. También puede
ser una dirección de desplazamiento que se anexa al frente de los corchetes. Ambas formas de
desplazamiento también pueden aparecer de manera simultánea.
Direccionamiento de base relativa más índice, se transfiere un byte o una palabra entre un registro
o una palabra por un registro base y un registro índice más un desplazamiento. En algunos
microprocesadores y superiores carga EAX en base a la posición de memoria del segmento de
datos a la que se accede mediante la suma de array, ebx y ecx. Este es el modo menos utilizado
solo suma desplazamiento además de usar un registro base y registro índice para formar la
dirección de memoria. este modo a menudo direcciona un arreglo bidimensional de datos en la
memoria. La suma de dos registros de 32 bits más un desplazamiento de 32 bits con los
microprocesadores.
Direccionamiento de índice escalado, este solo está disponible en los microprocesadores. El uso
de una escala permite el acceso a los datos de un arreglo de memoria de tipo palabra, doble palabra
o palabra cuádruple. También explícitamente en la instrucción. Esta es un ejemplo en el que el
factor de escala es uno. Esta puede escribirse de manera alterna. Este es el último modo de
direccionamiento de datos. Este es único para los procesadores para acceder a la memoria. El
segundo registro de índice se multiplica por un facto de escala. La escala también se aplica a las
instrucciones que utilizan un solo registro indirecto para acceder a la memoria.
Estructura de datos, se utiliza para especificar como se almacena la información en un arreglo de
memoria, lo cual es bastante útil con aplicaciones que utilizan arreglos. Para pensar en una
estructura es como si fuera una plantilla para los datos. El inicio de estas se identifica con la
directiva STRUC del lenguaje ensamblador y el final con la instrucción ENDS. Esto define campos
de información.

También podría gustarte