                     INTRODUCCION AL ASM: ARQUITECTURA
                     =================================

   En el interior de un ordenador, el microprocesador (abreviadamente uP) es
un chip ms interconectado a los chips de memoria, etc... La diferencia es que
es un chip que, adems de ser capaz de responder a las seales que le llegan
del exterior, es capaz de generar seales para otros chips y recoger la
respuesta de stos.

   Supondremos en principio que tenemos un ordenador con un uP y un nico
chip de memoria. Supondremos que el chip de memoria es de 64 kilobytes.
La memoria es igual que una serie de celdillas, en la que cada celdilla puede
contener un nmero entre 0 y 255d (0 y 0FFh), es decir, que est compuesta
de ocho bits. Las celdillas se numeran comenzando en la 0 y acabando en la
65535d (o 0FFFFh), y a este nmero o ndice se le denomina 'direccin' de la
posicin de memoria o celdilla. Por tanto, con un nmero entre 0 y 65535d se
identifica una posicin de memoria en concreto. Una memoria soporta dos
operaciones distintas: LECTURA y ESCRITURA. Veremos cmo se realizan estas
dos operaciones a nivel de circuito.

   De los pines o patillas del chip de memoria, los que ms nos interesan son
los siguientes: CE o Chip Enable, RD/WR o Read/Write, las 16 patillas A0-A15,
y las ocho D0-D7. Estas patillas pueden estar a dos niveles, 0V o +5V. Para las
patillas de control se adopta una convencin: si se dice que una patilla est
'activa a nivel alto' indica que cuando se quiere activar la funcin de una
patilla hay que ponerla a +5; y cuando se dice que es 'activa a nivel bajo'
indica que hay que ponerla a 0, y el nombre de la patilla se suele escribir
con una rayita por encima. Aqu, tomaremos la convencin (para simplificar),
de que todas las patillas son activas a nivel alto. La patilla RD/WR indica
si la operacin es lectura o escritura, y asumiremos que a nivel alto significa
lectura.

   Cuando el circuito externo a la memoria quiere leer el dato de una deter-
minada posicin de memoria, tiene que hacer varias cosas:

      -Poner CE a nivel alto (activa el chip)
      -Poner RD/WR a nivel alto (indica lectura)
      -Poner en las lineas A0-A15 el nmero en binario de la direccin de mem.
       de la que se quiere leer el dato. Para saber la seal que hay que
       meter a partir de la direccin, tomamos un ejemplo:

       Posicin 23345d (decimal) -> 5B31h (hex.)->
           0101101100110001b (binario)
       Los bits o dgitos de un nmero se numeran empezando por la derecha con
       el 0, 1,... hasta el 15 que es el de la izquierda en este caso.
       Por tanto, para leer de esta posicin la lnea A0 debera estar a 5V
       (representa un 1), las A1,A2 y A3 a 0v (representa un 0),...
      -Esperar algunos ciclos de reloj (depende de la velocidad del chip) y
       recoger el dato de las lneas D0-D7, que son los 8 dgitos binarios o
       bits del nmero almacenado.

   Cuando el circuito externo lo que quiere es escribir, debe hacer lo mismo
excepto que deber poner RD/WR a nivel bajo y en lugar de leer el dato de D0-D7
deber poner l mismo los bits del dato a escribir, a menudo algunos ciclos
despus de poner CE activo y RD/WR a nivel bajo para dar tiempo al chip a
reaccionar.

   El propio uP tiene las lneas A0-A15 entre sus pines, que van conectadas a
las A0-A15 de la memoria, y tiene tambin D0-D7 conectadas a las de la memoria.
Tambin tiene una patilla RD/WR, que pone al valor correspondiente cuando
quiere acceder a la memoria. Y tambin tiene una patilla, que en el Z80 (el uP
que llevaban los Spectrum, los Amstrad CPC y los MSX) se llama MREQ (Memory
Request), que pone a nivel alto cuando quiere acceder a memoria (lectura o
escritura). Esta patilla, como habris imaginado, va conectada al CE de la
memoria. A las lneas que interconectan el uP con otros dispositivos se les
denomina genricamente 'bus', clasificndose en tres grupos funcionales: el
'bus de direcciones', formado por las lneas A0-A15, el 'bus de datos', formado
por las D0-D7, y el 'bus de control' que incluye todas las dems lneas. El
nmero de lneas para el bus de direcciones se denomina 'anchura del bus de
direcciones', y anlogamente para el bus de datos. El modelo idealizado que
hemos visto tendra una anchura del bus de direcciones de 16 bits, y una
anchura del bus de datos de 8 bits. Este modelo es muy similar a la
arquitectura real de un Spectrum, por ejemplo.

   Un uP determinado se disea de manera que pueda reconocer ciertos nmeros
como instrucciones que le indican hacer algo determinado. Estas instrucciones
que el uP es capaz de reconocer forman el 'conjunto de instrucciones' del uP,
y los nmeros que le corresponden a cada una son los 'codigos de operacin' de
las instrucciones. Algunas instrucciones sencillas son slo un byte, otras
estn formadas por 2 o ms bytes. Una ristra de estas instrucciones del uP
forman un programa, y a este 'lenguaje', formado nicamente por nmeros y que
entiende el uP directamente, se le llama cdigo mquina. Al principio, los
ordenadores se programaban introduciendo directamente los cdigos de operacin
en la memoria, pero evidentemente adems de tedioso resultaba de lo ms
proclive a errores. Adems, revisar un listado de nmeros presenta una gran
dificultad para el programador. Por tanto, se define para cada uno de las
instrucciones del uP una palabra representativa de su funcin, a la que se
llama 'mnemnico', a la que eventualmente habr que aadir los operandos para
poder generar el cdigo de operacin ('opcode') completo, ya que el cdigo de
operacin lleva informacin tanto de la instruccin a ejecutar como de los
operandos que sta manejar. El programa que traduce un texto con instruc-
ciones en este nuevo lenguaje se denomina 'assembler' o 'ensamblador', y este
lenguaje de programacin se denomina 'assembly language' o 'lenguaje ensam-
blador'. Algunos ensambladores conocidos para la familia 80x86 son el MASM o
Macro ASseMbler de Microsoft y el TASM o Turbo ASseMbler de Borland. El
programa DEBUG que viene con el MS-DOS o el SID que viene con el DR-DOS tambin
son capaces de traducir instrucciones ASM en sus correspondientes cdigos de
operacin, pero a un nivel mucho ms primitivo que el MASM o el TASM.

   Ahora que ya sabemos cmo el uP puede acceder a la memoria, y cmo son los
programas que ejecuta ste veamos cul es la tarea del micro y que es lo que
hace constantemente.

   Para que el uP ejecute un programa, se deben situar los cdigos de operacin
del programa a partir de una direccin determinada. A esta direccin a partir
de la que est el programa la denominamos 'direccin de comienzo' por razones
evidentes. El uP internamente tiene algo de memoria, muy poca, estructurada
en lo que se denomina 'registros'. Cada registro est formado por una serie de
bits, 16 para ser precisos en el 8086, de forma que puede contener un nmero
entero en un rango determinado (con 16 bits podremos almacenar nmeros entre 0
y 65535d o 0FFFFh). Los registros dependen de cada uP en concreto, pero veremos
dos que existen en todo uP: el llamado 'Instruction Pointer' o 'IP' en el 8086,
y el registro de instruccin. Para comprender el funcionamiento de ambos,
veremos un modelo idealizado de un ordenador con un uP, un chip de memoria de
64K, un bus de direcciones de 16 bits, uno de datos de 8 bits y un conjunto de
instrucciones en el que todas tienen un cdigo de operacin de un slo byte.

   El uP tiene una patilla llamada CK habitualmente ('clock' o reloj), por el
que recibe una seal cuadrada producida por un cristal de cuarzo y algo ms de
circuitera (seal cuadrada es una seal que peridica y alternativamente toma
dos valores, en el caso de los PCs 0V y +5V. La velocidad de un ordenador en
megahercios o megaciclos por segundo no es ms que la frecuencia de la seal
de reloj). El uP realiza varias tareas, al ritmo del reloj que se le conecta.
Estas tareas requieren uno o varios ciclos de reloj, pero son siempre las
mismas y se repiten constantemente:

	-Primero, el uP genera una lectura de memoria para leer el byte
	 contenido en la direccin de memoria indicada por IP. El valor
	 recibido se almacena en el registro de instruccin. Es decir, se
	 activan MREQ y RD/WR se pone a RD, poniendo el valor contenido en
	 IP en las lneas A0-A15. El valor que se lee de D0-D7 se introduce
	 en el registro de instruccin.
	-El uP incrementa el registro IP en uno, para luego leer la siguiente
	 instruccin de la serie.
	-El uP decodifica la instruccin del registro de instr., es decir, ve
	 qu significa, y la ejecuta. Esta ejecucin puede implicar ms accesos
	 a memoria para lectura/escritura, puede cambiar el IP directamente
	 para saltar a otra direccin (a modo del GOTO del basic), etc...
	-Vuelve al primer paso, es decir, lee la siguiente instruccin.

   Y as, el uP ejecuta su trabajo 'ad infinitum'. Esta secuencia se repite
incansablemente, a no ser que el micro reciba una seal que lo interrumpa, un
reset, o algn otro suceso poco habitual (las interrupciones son relativamente
poco habituales).

   Antes de ver el funcionamiento del 8086 en concreto, que es el uP que la
arquitectura IBM PC define como estndar mnimo, revisaremos cmo se comunica
el uP con los perifricos, ya que hasta ahora slo hemos visto la comunicacin
con la memoria.

   En un ordenador, adems de la memoria existen otros dispositivos que
requieren que el uP interacte con ellos. Estos dispositivos pueden ser el
mdem, la tarjeta grfica, el teclado,... entre muchos otros. Estos dispositi-
vos se comunican con el micro envindole datos y recibiendo datos de ste.
Algunos son slo de lectura (el uP slo puede recibir datos de ellos), otros
slo de escritura (el uP puede enviarles datos, pero ellos no envan nada a
ste), y muchos otros son tanto de lectura como de escritura.

   Una de las maneras posibles sera hacer que el uP tuviese una patilla para
cada dispositivo, al igual que la MREQ, de forma que cuando quisiera acceder
a uno en concreto pusiese su patilla correspondiente a nivel activo y escri-
biese o leyese el dato de o en el bus de datos. Pero ya que los dispositivos
son muchos y los uP se disean de forma general para distintos circuitos, lo
que se hace es asignar a cada dispositivo un nmero o direccin, de forma
parecida a la que cada direccin de memoria identifica una celdilla, y poner
una patilla en el uP (llamada IORQ - Input Output ReQuest - en el Z80, en el
8086 tendr un nombre parecido) que se pone a nivel activo cuando se quiere
acceder a cualquier dispositivo. Cada perifrico (llamando perifrico a todo
lo que no sea la memoria o el uP) debe responder slo cuando IORQ est activa
y lea en el bus de direcciones el nmero que le corresponde. Cada uno de estos
valores que se sitan en el bus de direcciones se llama 'puerto de entrada/
salida'. Los puertos que le corresponden a cada dispositivo es una de las
cosas que identifican un estndar, en nuestro caso el estndar PC. Algunos
dispositivos, como la tarjeta grfica, necesitan intercambiar muchos datos con
el uP y por tanto requieren varios puertos. Por cierto, cada tarjeta grfica
tiene sus puertos estndar, por ejemplo los puertos de una Hrcules monocromo
no coinciden en absoluto con los de una VGA color, y por tanto se pueden
montar ambas en el mismo ordenador.

   En el siguiente captulo saldremos de este ordenador idealizado para entrar
de lleno en la arquitectura segmentada de los compatibles PC, y veremos los
registros del 8086.

   Salut!!!