Sie sind auf Seite 1von 10

El PROCESADOR

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.

Estos registros se dividen en 5 grupos, segn sus funciones:

1. Registros de datos: AX, BX, CX y DX.

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.

2. Registros Indice: SI, DI, BP y SP.

Se utilizan para acceder a memoria cuando se establece el modo de direccionamiento mediante


indexacin o con punteros.
SI y DI indican el ndice fuente y destino respectivamente.
BP y SP indican el puntero base y el puntero de la pila respectivamenete.
Ms adelante hablaremos de la pila (que es un tipo de datos estructurado).

Estos 4 registros son de 16 bits, y no pueden ser utilizados como registros dobles de 8 bits.

3. Registros de Segmento: CS, DS, SS y ES.

Estos registros apuntan al principio de un bloque de 64 ks de memoria o segmento, de ah lo de la


'S' con la que finalizan todos los registros:
CS: registro segmento de cdigo. Establece al rea donde se halla el programa en ejecucin.
DS: registro segmento de datos. Especifica la zona donde el programa lee y escribe los datos por
defecto.
SS: registro segmento de pila. Especifica el rea donde se encuentra la pila del sistema.
SP (Stack Pointer): Es el registro que se reserva el procesador para uso propio en
instrucciones de manipulacin de la pila.
- BP (Base Pointer): Se usa como registro auxiliar.
ES: registro segmento extra. Se utiliza como una extensin del segmento de datos. Es decir, indica
otro rea de datos aparte del especificado por DS.

4. Puntero de instruccin: IP.

Su longitud es de 16 bits como el resto de registros.


Indica la direccin de la siguiente instruccin a ejecutar, y su valor es ajustado durante la ejecucin
de la instruccin en curso.
Esta direccin est en el rea de 64 ks de direcciones especificado por CS.

CS e IP en conjuncin conforman la direccin fsica o real de la siguiente instruccin a ejecutar.

5. Registro FLAGS. O banderas de estado.

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.

Estos bits se clasifican en dos grupos:


Flags de estado (Cf, Af, Of, Zf, Pf y Sf): muestran el estado del procesador.
Flags de control ( Df, If, Tf): determinan como el procesador responder a determinadas situaciones.
El programador manipular estos bits para controlar el modo de ejecucin de algunas instrucciones.

A continuacin se muestra el significado de cada uno de los flags:


Cf: Bit de Carry (acarreo), se activa (se pone a 1) si se produce acarreo en una operacin
aritmtica.
Pf: Bit de paridad, se activa si el resultado de una operacin tiene paridad par, es decir, si el
resultado tiene un n par de unos.
Af: Bit de carry auxiliar, se activa si una operacin aritmtica produce acarreo de peso 16.
Zf: Bit de cero, se activa si una operacin produce 0 como resultado. Suele ser el ms utilizado(ms
consultado) por los programadores.
Se utiliza para comparaciones de datos y para otras muchas cosas como ciertos bucles,etc.
Sf: Bit de signo, se activa si el bit ms significativo de un resultado es 1. Por convencin cuando se
opera con nmeros negativos, se utiliza el bit de mayor peso para indicar el signo: si el bit es cero,
entonces se trata de un nmero positivo, si es 1, se trata de nmeronegativo. Tf: Bit trap o desvo.
Si Tf=1, el procesador ejecuta las instrucciones una a una bajo control del usuario. Se pone a 1
este bit para realizar depuraciones del cdigo que se est ejecutando. De esta forma se
puedeseguir el flujo del programa.
If: Bit de interrupcin, si vale 1, las interrupciones estn permitidas, y si vale 0, no.
Df: Se usa en las instrucciones que manipulan cadenas de bytes.
Segn coloque el programador este bit, a '0' o a '1', las cadenas de bytes sern tratadas en sentido
de direcciones crecientes o decrecientes.
Of: Bit de overflow, indica desbordamiento en una operacin aritmtica.

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:

Se trata de chips de apoyo, de los que se sirve el procesador o el usuario.


Estos chips existen debido a que el procesador no puede controlar todo el ordenador sin ayuda. Al
delegar ciertas funciones de control a otros chips, le queda ms tiempo libre para atender a su
propio trabajo.
Estos chips de apoyo pueden ser responsables de procesos tales como el flujo de informacin a
travs de la circuitera interna (como el controlador de interrupciones y el controlador DMA) y
controlar el flujo de informacin de uno a otro dispositivo(como un monitor o una unidad de disco)
concectado al ordenador.
En resumen, estos chips estn ah para librar de trabajo al procesador.

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.

DIRECCIONAMIENTO DE MEMORIA EN EL 8086.


SEGMENTACION.

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.

Ms adelante estudiaremos la BIOS. Valga por ahora que es un conjunto de utilidades y


procedimientos grabados en la ROM (memoria de slo lectura),los cuales se encargan de acceder
al nivel ms bajo en cuanto a programacin se refiere. Es decir, estas rutinas se encargan de
manipular el hardware por nosotros.
BIOS son las siglas de Basic Input Output System (Sistema bsico de entrada/salida).

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)

Y el registro BX contiene el valor 0037h.

Tenemos pues (en binario):


DS: 1011100000000000 BX: 0000000000110111

Para obtener la direccin fsica de memoria, y teniendo en cuenta todo lo dicho relativo a
segmentos, el microprocesador acturara as:

Hara una suma de la siguiente forma:

DS: 1011100000000000
BX: + 0000000000110111
---------------------------------
10111000000000110111

Obteniendo as la direccin de 20 bits necesaria para cubrir todo el Mbyte.

Si ese nmero (10111000000000110111) que est en binario, lo pasamos a hexadecimal, tenemos


que la direccin fsica correspondiente a la anterior segmentada es: 0B8037h.

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:

Un programa escrito en el lenguaje ensamblador requiere considerablemente menos


memoria y tiempo de ejecucin que un programa escrito en los conocidos lenguajes de alto
nivel, como Pascal y C.

El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy tcnicas


que serian difciles, si no es que imposibles de realizar en un lenguaje de alto nivel.

El conocimiento del lenguaje ensamblador permite una comprensin de la arquitectura de


la maquina que ningn lenguaje de alto nivel puede ofrecer.

Aunque la mayora de los especialistas en Software desarrolla aplicaciones en lenguajes de


alto nivel, que son ms fciles de escribir y de dar mantenimiento, una practica comn es
recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en
el procesamiento.
Los programas residentes y rutinas de servicio de interrupcin casi siempre son desarrollados en el
lenguaje ensamblador
BIN -al-> DEC
Ejemplo:
MSB -->101011<--LSB
= 1* 2^5 + 0* 2^4 + 1* 2^3 + 0* 2^2 + 1* 2^1 + 1*2^0
= 1 * 32 + 0 * 16 + 1 * 8 +0 * 4+ 1 * 2 +1 ; Nota lo subrayado se elimina porque todos los
numeros multiplicados por 0 dan 0
OCT -al-> DEC (es igual que el BIN solo que se
multiplica por 8)
Ejemplo:
431 OCT --> DEC

= 4 * 8^2 + 3 * 8^1 + 1 * 8^0


= 4 * 64 + 3 * 8 + 1 * 1
= 256 + 24 + 1
= 281 (Y listo equibale a un 281 en DEC)

HEX -al-> DEC (Este metodo tambien es parecido a


los anteriores solo que se multiplica por 16)
Ejemplo:

BABA HEX --> DEC


= 11(B) * 16^3 + 10(A) * 16^2 + 11(B) * 16^1 + 10(A) 16^0
= 11 * 4096 + 10 * 256 + 11 * 16 + 10 * 1
= 45056 + 2560 + 176 + 10
= 47802 (Y listo equibale a un 47802 en DEC)

DEC -al-> BIN


Ejemplo;
45 = BIN
45/2 Cosiente 22 Residuo 1 LSB
22/2 Cosiente 11 Residuo 0
11/2 Cosiente 5 Residuo 1
5/2 Cosiente 2 Residuo 1
2/2 Cosiente 1 Residuo 0
1/2 Cosiente 0 Residuo 1 MSB

101101 (Esto equibale en BIN)

DEC -al-> OCT


Es casi igual solo cambia la base
Ejemplo:

201 DEC --> OCT


201 / 8 Cosiente 25 Residuo 1 LSB
25 / 8 Cosiente 3 Residuo 1
3 / 8 Cosiente 0 Residuo 3 MS
DEC -al-> HEX
Ejemplo:

59 DEC --> HEX


59/16 Cosiente 3 Residuo 11
3/16 Cosiente 0 Residuo 3

BIN -al-> OCT


001 111 BIN = 1 7OCT

y OCT -al-> BIN


56 OCT = 101 110 BIN

Das könnte Ihnen auch gefallen