Beruflich Dokumente
Kultur Dokumente
Es el chip que ejecuta los programas. El procesador o CPU, lleva a cabo una gran variedad de
clculos, comparaciones numricas y transferencias de datos como respuesta a las peticiones de
los programas que estn siendo ejecutados, y que residen en memoria.
La CPU controla las operaciones bsicas del ordenador enviando y recibiendo seales de control,
direcciones de memoria y datos de un lugar a otro del ordenador a travs de un grupo de 'sendas
electrnicas' llamadas BUS.
Localizadas a lo largo de este bus estn las puertas de entrada y salida E/S en castellano o I/O en
ingls), las cuales conectan a la memoria y a los chips de apoyo al bus. Los datos pasan a travs
de estas puertas de E/S mientras viajan desde y hasta la CPU y otras partes del ordenador.
El procesador 8086 es un procesador de 16 bits. Esto quiere decir entre otras cosas, que el
procesador va a manipular en una sla operacin datos de hasta 16 bits. Es decir, cuando
transfiera datos a la memoria o los traiga desde ella, lo podr hacer de 16 bits en 16 bits. Aqu
juega un papel decisivo el BUS de datos, ya que es por l por donde circulan los datos en las
transferencias. Esto lo veremos unas lneas ms abajo.
El procesador cuenta con una serie de registros usados para realizar las operaciones de clculo, y
como almacenamiento de datos.
Un registro del procesador es algo as como una zona de memoria dentro del procesador donde se
puede almacenar informacin, de forma que el acceso a esta informacin es instantneo, ya que no
hay que utilizar el bus de datos que conecta el procesador con la memoria para obtener dichos
datos.
Se usan para clculo y almacenamiento de propsito general. Son utilizados por los programas
para realizar clculos, as como para transferir datos de una posicin de memoria a otra, ya que
no se puede hacer de forma directa. Es decir, que no podemos transferir un dato de la posicin de
memoria X a la posicin Y sin antes depositar ese dato temporalmente en un registro del
procesador.
Estos registros tienen una longitud de 16 bits, pero podemos descomponerlos cuando nos interese
en un par de registros de 8 bits.
Quedando de la forma siguiente:
AX = AH + AL
Siendo AX el registro de 16 bits, compuesto por la conjuncin (que no la suma) de el registro AH de
8 bits (los 8 bits ms signiicativos o de ms a la izquierda) y el registro AL de 8 bits (los 8 bits
menos significativos o de ms a la derecha).
BX = BH + BL
CX = CH + CL
DX = DH + DL
Para estos tres registros se aplica lo mismo que para el registro AX.
Cada uno de estos registros tiene funciones especiales que es interesante conocer. Por ejemplo el
registro AX es el llamado acumulador, hace que muchas operaciones tengan una forma ms corta,
ya que lo especificanimplcitamente. Es decir, que hay operaciones que actan sobre el registro
AX en particular.
BX se suele utilizar en muchas instrucciones como registro base, sobre todo en transeferencias de
datos entre memoria y procesador.
CX es el registro contador, muchas instrucciones lo utilizan para hacer incrementos o decrementos
automticos, para realizar bucles, etc.
DX es el registro de datos, se suele utilizar para operaciones de 32 bits, para almacenar los 16 bits
(o palabra) ms significativos.
Estos 4 registros son de 16 bits, y no pueden ser utilizados como registros dobles de 8 bits.
Su longitud es de 16 bits. Cada uno de estos bits contiene cierta informacin booleano (verdadero o
falso). Segn el valor de cada uno de estos bits sea 1(verdadero) 0(falso), informar del estado de
alguna situacin en particular.
Dentro del registro de FLAGS hay 7 bits que no se utilizan. Los nombres de los utilizados son: Of,
Df, If, Tf, Sf, Zf, Af, Pf y Cf.
La Memoria:
Los chips de memoria se dedican meramente a almacenar la informacin hasta que se necesita.
El nmero y la capacidad de almacenamiento de estos chips que hay dentro del ordenador
determinan la cantidad de memoria que podremos utilizar para los programas y los datos.
Normalmente la memoria siempre se ha dividido en dos tipos principales, como son la RAM y la
ROM.
Pues bien, en principio, nosotros vamos a trabajar con el rango de memoria 0 a 1048576, es decir,
vamos a trabajar con el primer Mb(megabyte).
Existen tcnicas para tratar la memoria que hay en direcciones superioresa stas, pero eso ya se
ver en otro momento.
Pues bien, en ese Megabyte inicial, tenemos tanto RAM como ROM.
La memoria RAM que es la que usamos para almacenar tanto programas como datos empieza en
las direcciones bajas y llega hasta el inicio de la ROM.
La ROM, evidentemente est situada en las posiciones altas de memoria, y es ah donde se
almacenan las rutinas ms bsicas del ordenador, comolas rutinas de acceso a discos, pantalla,
etc.
Un tema muy importante en el mundo del PC es la denominada barrera de los 640 Kb.
Esto quiere decir que aunque tengamos instalados 8 Megabytes en unuestro ordenador, slo
podremos ejecutar nuestro programa en las primeras 640 Kb.
Para poder acceder a los 7 Megabytes restantes debemos utilizar funciones especiales de manejo
de memoria extendida, expandida, etc.
Chips inteligentes:
Bus de direcciones:
El bus de direcciones del Pc utiliza 20 lneas de seal para transmitir las direcciones de memoria y
de los dispositivos conectados al bus.
Como a travs de cada una de esas 20 lineas pueden viajar dos posibles valores(0 1, es decir
tensin alta o tensin baja), el ordenador puede especificar 2^20 (2 elevado a 20) direcciones. Es
decir puede direccionar 1 Megabyte. Estamos hablando del 8086 con un bus de direcciones de 20
bits.
Modelos superiores como el 80386 o el pentium direccionan muchsimo ms, tanto como les
permite su bus: 32 bits en el caso del 386 y 64 bits en el caso del pentium. Es decir, 2^32 y 2^64
direcciones respectivamente.
Bus de datos:
El bus de datos trabaja con el bus de direcciones para transportar los datos a travs del ordenador.
Este bus de datos es de 16 bits, al igual que el tamao de registro. Aunque no tiene que coincidir,
como sucede con el procesador 8088, el cual tiene un tamao de registro de 16 bits y un bus de
datos de 8 bits. Esto es as por simple economa. Por ahorrar costes.
Claro que tiene su parte mala, y es que es ms lento al realizar transferencias de datos.
La forma en que la CPU construye las direcciones de memoria es muy importante para la
programacin del sistema, debido a que constantemente utilizamos instrucciones de transferencias
de datos, de acceso a funciones de la BIOS, del DOS, etc.
En cuanto al DOS (sistema operativo de disco), decir que aqu nos referiamos no a las utilidades o
comandos que trae consigo, que es lo tpico que se ensea en academias e institutos, sino a la
estructura interna del mismo:interrupcin 21h, 24h, etc. Ya veremos tambin que es una
interrupcin.
Bien, antes de entrar de lleno en el tema, conviene saber un poco del por que del mismo. Es decir,
que llev a que fuera de esta forma y no de otra.
A principio de los aos 80, Intel (fabricante de la familia de procesadores 80x86) se propuso dar un
gran paso adelante con respecto a la competencia.
En aquel tiempo los microprocesadores que imperaban entre los ordenadores domsticos eran de
8 bits, es decir, tenan un ancho de bus de datos de8 bits, el tamao de palabra de memoria era de
8 bits, y los registros del procesador eran de 8 bits. Un claro ejemplo de esto fue el
microprocesador Z80 (de la empresa Zilog), el cual estaba incorporado en mquinas tan famosas
como los spectrum, amstrad, msx, etc.
Como se ha dicho, el ancho del bus de datos era de 8 bits. Esto quiere decir que todas las
transferencias de datos que se hicieran se haran de 8 en 8 bits, es decir, byte a byte.
Pues bien, aunque el microprocesador era de 8 bits, y la mayora de registros tambin lo fuera,
haba alguno mayor (16 bits).
Nos refirimos sobre todo al registro de direcciones que era de 16 bits. De esta forma, un amstrad
cpca464 poda acceder a 64 Kb de memoria. 64 Kb es el mximo que poda direccionar el z80
original.
En ese momento Intel se plante superar esa barrera de las 64 Ks, pero tena un problema. El z80
por ejemplo, haba consguido tener registros de 16 bits cuando el microprocesador es de 8. Pero
pasar de 16 bits de capacidad en registros en aquellos momentos no era posible para los
microprocesadores. Es decir, no haba suficientes avances tecnolgicos como para conseguir
tamaos de registros mayores en un microprocesador.
De tal manera que haba que buscar una frmula diferente... Y ah es cuando surgi el tema de los
segmentos.
A Intel se le ocurri la idea de construir una direccin de 20 bits de ancho y colocarla en el bus de
direcciones para poder dirigirse a la memoria. Pero al ser los registros de 16 bits, slo haba una
solucin posible para utilizar este ancho de 20 bits: Usar 2 registros de 16 bits!!!
El 8086 divide el espacio de direcciones (1 Mbyte) en segmentos, cada uno de los cuales contiene
64 Ks de memoria (la mxima direccionable por un slo registro).
Entonces, para direccionar una posicin de memoria nos valemos de dos registros: Registro de
segmento y de offset.
Ya vimos anteriormente que haba varios registros de segmento: cs (registro de segmento de
cdigo), ds (de datos), etc.
Pues bien, este primer registro (de segmento), indica dnde comienza el trozo de 64 Ks que
buscamos.
Y el segundo registro (el de offset), contiene el desplazamiento dentro de ese segmento.
Bien. Hemos visto que son necesarios 2 registros para direccionar ese Mbyte de memoria, y
tenemos un bus de direcciones de 20 bits.
Esto nos conduce a que el microprocesador debe realizar unas operaciones sobre estos dos
registros para obtener la direccin fsica de 20 bits.
Esto se logra de la siguiente manera:
El 8086 mueve el valor del segmento 4 bits a la izquierda y le suma el valor del desplazamiento
para calcular una direccin de 20 bits.
Grficamente:
Tenemos dos registros de 16 bits.
DS: XXXXXXXXXXXXXXXX BX: XXXXXXXXXXXXXXXX
15 87 0 15 87 0
Byte alto Byte bajo Byte alto Byte bajo
(ms significativo)(menos signific)
El primer registro, es el de segmento (en este caso, segmento DS, de datos). El segundo registro
es el de offset o desplazamiento.
En este caso utilizamos el registro BX para direccionar dentro de el segmento. Podamos haber
utilizado tambin el registro SI, el DI, etc.
A partir de estos dos registros, debemos acceder a una posicin de memoria fsica dentro del
Mbyte de que disponemos para el 8086.
Pongamos que el registro DS tiene el valor 0B800h (en hexadecimal)
Para obtener la direccin fsica de memoria, y teniendo en cuenta todo lo dicho relativo a
segmentos, el microprocesador acturara as:
DS: 1011100000000000
BX: + 0000000000110111
---------------------------------
10111000000000110111
De todo lo anterior, se desprende que los segmentos empiezan siempre en direcciones divisibles
por 16. Ms tcnicamente: cada segmento comienza en una direccin de prrafo. Un prrafo son
16 bytes.
Por supuesto nunca habr un segmento que empiece en una direccin impar, por ejemplo.
Como ejemplo: El primer segmento posible empieza en la direccin fsica 0.
Tambin se puede apreciar que los segmentos se pueden superponer unos a otros, pueden ser
idnticos, o pueden encontrarse en partes totalmente lejanas en la memoria.
Ventajas
La variedad de microcomputadoras tambin ocasiono un renovado inters en el lenguaje
ensamblado, cuyo uso conlleva a diferentes ventajas: