Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COMPUTADORAS II
Departamento de Informtica
Los ejemplos muestran que cada instruccin requiere que se especifique con todo detalle no slo la
operacin a realizar, sino otros datos sin los cuales no podra llevarse a cabo. Los dos primeros
ejemplos lo ilustran claramente. En ambos casos se trata de la operacin de SUMAR, pero las dos
instrucciones tienen diferencias sustanciales. Por lo tanto, dos computadoras diferentes contarn ambas
con instrucciones de SUMA, pero pueden diferir enormemente en cuanto a los distintos tipos de esta
operacin incluidos en su SET.
El nmero de instrucciones que componen el SET es distinto para distintas mquinas. Sin embargo,
existe un grupo bsico de operaciones que todas incluyen, aunque con caractersticas propias para cada
mquina.
guarda estrecha relacin con las caractersticas fsicas (estructura, organizacin) del procesador.
Esquemticamente, podemos representarlo de la siguiente manera:
4 6 6
Cdigo de Referencia del Referencia del
operacin operando operando
16 bits
Esta instruccin consta de slo un octeto en el campo de operando, empleado para representar la
constante de 8 bits, tal como est definido en la operacin.
Existen, incluso, instrucciones que no contienen campo de operandos, o sea que solamente constan del
cdigo de operacin. La siguiente instruccin, por ejemplo, opera la inversa booleana (NOT) sobre el
contenido del registro acumulador, en un Z80:
00101111 (Fig. 4)
Como esta operacin, dentro del set o repertorio, est definida exclusivamente para el acumulador, no
es necesario consignar el operando (el acumulador) explcitamente. Es, entonces, una instruccin con
operando implcito.
Otros casos en que la instruccin no especifica operando corresponden a ciertas operaciones de control
(operaciones de pausa, detencin, etc).
En sntesis, el formato de las instrucciones y el cdigo de operacin son asignados por el fabricante al
disear la computadora. Distintas CPU tienen, en general, distintos formatos de instrucciones y en la
mayora de los casos, para una misma CPU el conjunto de instrucciones utiliza ms de un formato. La
CPU debe estar habilitada para extraer los datos de los varios campos de instruccin a fin de realizar la
operacin requerida.
Es importante destacar que el cdigo de operacin no slo informa a la Unidad de Control la operacin
que se va a realizar sino que brinda, adems, informacin acerca de:
El tipo de los operandos (numricos o no-numricos, el convenio de codificacin en que estn
representados: binario punto fijo, punto flotante, BCD, ASCII, EBCDIC. etc.).
La ubicacin de los datos: en un registro, en la memoria (ya sea en una ubicacin propia o bin, como
se muestra en el ejemplo de la Fig. 3, dentro de la misma instruccin)
Esta declaracin instruye a la computadora para sumar el valor almacenado en Y al valor almacenado
en X y poner el resultado en X. Cmo podra esto llevarse a cabo con instrucciones de mquina?
Vamos a suponer que las variables X y Y corresponden a las localidades 513 y 514. Si suponemos un
conjunto de instrucciones de mquina simple, esta operacin podra llevarse a cabo con tres
instrucciones:
1. Cargar un registro con el contenido de la localidad 513 de memoria.
2. Sumar el contenido de la localidad 514 de memoria al registro.
3. Almacenar el contenido del registro en la localidad 513 de memoria.
Como se puede ver, la simple instruccin de BASIC puede requerir tres instrucciones de la mquina.
Esto es tpico de la relacin entre un lenguaje de alto nivel y un lenguaje de mquina. Un lenguaje de
alto nivel expresa las operaciones en una forma algebraica concisa, usando variables. Un lenguaje de
mquina expresa las operaciones en una forma bsica e involucra el movimiento de datos hacia o desde
registros.
Con este ejemplo simple como gua, vamos a considerar los tipos de instrucciones que deben estar
incluidos en una computadora prctica. Una computadora debe tener un conjunto de instrucciones que
le permitan al usuario formular cualquier mecanismo de procesamiento de datos. Otra manera de ver
esto es considerar las capacidades de un lenguaje de programacin de alto nivel. Cualquier programa
escrito en un lenguaje de alto nivel se debe convertir a un lenguaje de mquina para poder ser ejecutado.
Por consiguiente, el conjunto de instrucciones de la mquina tiene que ser suficiente para poder
expresar cualquiera de las instrucciones desde un lenguaje de alto nivel. Con esto en mente, podemos
categorizar los tipos de instrucciones como sigue:
Procesamiento de datos: Instrucciones aritmticas y lgicas.
Almacenamiento de datos: Instrucciones de memoria.
Movimiento de datos: Instrucciones de E-S.
Control: Instrucciones de prueba y bifurcacin.
Cada instruccin se muestra en forma esquemtica indicando la operacin que lleva a cabo cada una.
Y AB
T D*E Tres direcciones
T T+C
Y Y/T
Y A
Y YB
T D Dos direcciones
T T*E
T T+C
Y Y/T
AC D
AC AC * E
AC AC + C
Y AC Una direccin
AC A
AC AC B
AC AC / Y
Y AC
Los formatos de instruccin de tres direcciones no son comunes debido a que requieren un formato de
instruccin relativamente largo para almacenar las referencias de tres direcciones. Con las instrucciones
de dos direcciones, nuestro programa de muestra se expande a seis instrucciones.
Ms simple es la instruccin de una direccin. Para que esto funcione, una segunda direccin debe ser
implcita. Esto era comn en las primeras mquinas, donde la direccin implcita era un registro de la
CPU conocido como el acumulador (AC o A). El acumulador contiene uno de los operandos y se utiliza
para almacenar el resultado. En nuestro ejemplo, son necesarias ocho instrucciones para llevar a cabo el
procedimiento.
El nmero de direcciones por instruccin es una decisin bsica de diseo. Pocas direcciones por
instruccin devienen en instrucciones ms primitivas, lo cual requiere una CPU menos compleja. Esto
tambin deriva en instrucciones de longitud ms corta. Por otra parte, los programas contienen ms
instrucciones totales, lo cual resulta, en general, en tiempos de ejecucin ms largos y programas ms
complejos y largos. Tambin, existe un umbral importante entre las instrucciones de una direccin y las
de mltiples direcciones. Con las instrucciones de una direccin, el programador casi siempre tiene
disponible slo un registro de propsito general, el acumulador. Con las instrucciones de mltiples
direcciones, es comn tener mltiples registros de propsito general. Esto permite que algunas
operaciones se lleven a cabo de manera exclusiva en los registros. Ya que las referencias de registro son
ms rpidas que las referencias de memoria, esto acelera la ejecucin. Por razones de flexibilidad y
habilidad para utilizar mltiples registros, la mayora de las mquinas contemporneas emplea una
mezcla de instrucciones de dos y tres direcciones.
Los compromisos de diseo involucrados en escoger el nmero de direcciones por instruccin se
complican por otros factores. Existe el problema de si una direccin hace referencia a una localidad de
memoria o a un registro. Puesto que existen pocos registros, se necesitan pocos bits para una referencia
de registro. Tambin, como veremos en el siguiente captulo, una mquina puede ofrecer una variedad
de modos de direccionamiento y la especificacin de los modos toma uno o ms bits. El resultado es
que la mayora de los diseos de la CPU involucra una variedad de formatos de instruccin.
funciones llevadas a cabo por la CPU y, por consiguiente, tiene un efecto significante en la
implantacin de sta. El conjunto de instrucciones es el medio del programador para controlar la CPU.
Por lo tanto, los requerimientos del programador deben ser considerados en el diseo del conjunto de
instrucciones.
Puede sorprenderle saber que algunos de los temas ms fundamentales relacionados con el diseo del
conjunto de instrucciones permanecen en disputa. En realidad, en aos recientes, el nivel de desacuerdo
concerniente a estos fundamentos ha crecido. Los ms importantes de tales temas de diseo
fundamentales incluyen:
Repertorio de operaciones: Cuntas y cules operaciones proporcionar, y cmo deberan ser las
operaciones complejas.
Tipos de datos: Los varios tipos de datos sobre los cuales las operaciones se realizan.
Formato de las instrucciones: Longitud de la instruccin (en bits), nmero de direcciones,
tamao de varios campos, etc.
Registros: Nmero de registros de la CPU que se pueden referenciar mediante instrucciones, y
su uso.
Direccionamiento: El modo o modos por el cual la direccin de un operando se especifica.
Direcciones
Las direcciones son, de hecho, una forma de datos. En muchos casos, algn clculo se debe ejecutar
sobre la referencia de operando en una instruccin para determinar la direccin de la memoria principal
o virtual. En este contexto, las direcciones se pueden considerar como enteros sin signo.
Otros tipos comunes de datos son los nmeros, caracteres y datos lgicos, y cada uno de stos se
analiza, de manera breve, en esta seccin. Ms all de eso, algunas mquinas definen tipos de datos o
estructuras de datos especializados. Por ejemplo, existen operadores de mquina que operan en forma
directa sobre una lista o un conjunto de caracteres.
Nmeros
Todos los lenguajes de mquina incluyen tipos de datos numricos. Incluso en el procesamiento de
datos no numricos, hay una necesidad de los nmeros para que acten como contadores, anchuras de
campo, y cosas por el estilo. Una distincin importante entre los nmeros utilizados en la matemtica
ordinaria y los nmeros almacenados en una computadora es que estos ltimos estn limitados. Esto es
cierto en dos sentidos. Primero, existe un lmite para la magnitud de los nmeros representables en una
mquina y, segundo, en el caso de los nmeros de punto flotante, hay un lmite para su precisin.
Siendo as, el programador tiene que vrselas con la comprensin de las consecuencias del redondeo,
desbordamiento positivo (overflow) y desbordamiento negativo (underflow).
En las computadoras, son tres los tipos de datos numricos comunes (ya conocidos por el alumno de
esta asignatura):
Enteros o de punto fijo.
Punto flotante.
Decimales (codificados en binario: BCD, ASCII, EBCDIC, empaquetados (packed) o
desempaquetados (unpacked))
Caracteres
Una forma comn de datos es el texto o cadena de caracteres. Mientras que los datos textuales son los
ms convenientes para la comprensin humana, no pueden en forma de caracteres, almacenarse o
transmitirse con facilidad mediante sistemas de procesamiento de datos y de comunicaciones. Tales
sistemas estn diseados para los datos binarios. Por lo tanto, se ha ideado un nmero de cdigos
mediante el cual los caracteres se representan por una secuencia de bits. Quiz el primer ejemplo ms
Datos lgicos
Por lo general, cada palabra u otra unidad direccionable (byte, media palabra, etc.) se trata como una
unidad de datos simple. Algunas veces es til, sin embargo, considerar una unidad de n bits como
consistiendo de n elementos de datos de 1 bit, cada elemento debe tener el valor de 0 o 1. Cuando los
datos se ven de esta manera, se consideran como datos lgicos.
Existen dos ventajas del esquema orientado a bits. Primero, algunas veces podemos desear almacenar
un arreglo de elementos de datos binarios o Booleanos, en los cuales cada elemento puede tomar slo
los valores 1 (cierto) y 0 (falso). Con los datos lgicos, la memoria se puede utilizar de manera ms
eficiente para este almacenamiento. Segundo, hay ocasiones en que deseamos manipular los bits de un
elemento de datos. Por ejemplo, si las operaciones de punto flotante se implementan en software,
necesitamos estar habilitados para recorrer los bits significativos en algunas operaciones. Otro ejemplo:
para convertir de ASCII en decimal empaquetado, necesitamos extraer los 4 bits de ms a la derecha de
cada byte.
Observe que, en los ejemplos anteriores, los mismos datos se tratan algunas veces como lgicos y otras
ocasiones como numricos o texto. El tipo de una unidad de datos est determinado por la operacin
que se est llevando a cabo sobre l. Mientras ste no es el caso en los lenguajes de alto nivel (por
ejemplo, Pascal), es casi siempre el caso en el lenguaje de mquina.
Los operandos tambin se pueden representar de manera simblica. Por ejemplo, la instruccin:
ADD R, Y
puede significar la suma del valor contenido en la localidad de datos Y al contenido del registro R,
y as en forma sucesiva. Un programa simple aceptara esta entrada simblica, convertira los cdigos
de operacin y las referencias de operandos en una forma binaria, y construira instrucciones de
mquina binarias.
Ahora, volvamos a centrar nuestro inters en un examen detallado de las operaciones de transferencia
de control ms comunes que podernos encontrar en los conjuntos de instrucciones:
Bifurcacin.
Brinco.
Llamada a la subrutina.
Instrucciones de bifurcacin
Una instruccin de bifurcacin, tambin llamada instruccin de transferencia, tiene como uno de sus
operandos la direccin de la siguiente instruccin a ser ejecutada. Con mayor frecuencia, la instruccin
es una instruccin de bifurcacin condicional. Esto es, la bifurcacin se efecta (el contador del
programa se actualiza con la direccin especificada en el operando) slo si una cierta condicin se
cumple. De otra manera, la siguiente instruccin en secuencia se ejecuta (por lo general, el contador del
programa se incrementa).
Existen dos maneras comunes de generar la condicin a ser verificada en una instruccin de bifurcacin
condicional. Primero, la mayora de las mquinas proporcionan un cdigo de condicin de 1 bit o
mltiples bits que se establece como el resultado de algunas operaciones. Este cdigo puede ser visto
como un registro corto visible al usuario. Por ejemplo, una operacin aritmtica (SUMA, RESTA, etc.)
podra establecer un cdigo de condicin de 2 bits con uno de los siguientes cuatro valores: 0, positivo,
negativo, desbordamiento. En tal mquina podran existir cuatro instrucciones de bifurcacin
condicional diferentes:
BRP X Bifurcar a la localidad X si el resultado es positivo.
BRN X Bifurcar a la localidad X si el resultado es negativo.
BRZ X Bifurcar a la localidad X si el resultado es cero.
BRO X Bifurcar a la localidad X si ocurre desbordamiento (overflow).
En todos estos casos, el resultado referido se deriva de la operacin ms reciente que puso el cdigo de
condicin.
Otra propuesta que se puede utilizar con un formato de instruccin de tres direcciones es llevar a cabo
una comparacin y especificar una bifurcacin en la misma instruccin. Por ejemplo,
BRE Rl, R2, X (Bifurcar a X si el contenido de Rl = contenido de R2).
Una bifurcacin puede ser ya sea hacia adelante (una instruccin con una direccin mayor), o hacia
atrs (una direccin ms baja). Una bifurcacin incondicional y una condicional se pueden utilizar para
crear un lazo para repeticin de instrucciones.
Cdigos de condicin
Hemos mencionado que los cdigos de condicin son bits en registros especiales que pueden ser
puestos por ciertas operaciones y utilizados en instrucciones de bifurcacin condicional. Tales
condiciones estn puestas por operaciones aritmticas y de comparacin. La operacin de comparacin
en la mayora de los lenguajes resta dos operandos, como lo hace una operacin de resta. La diferencia
es que la operacin de comparacin slo pone los cdigos de condicin mientras que una operacin de
resta comn tambin almacena el resultado de la diferencia en el operando destino.
Como un ejemplo, en la tabla 8.8 se listan los cdigos de condicin utilizados en las mquinas
80386/80486.
El programa inicia en la localidad 101 (hexadecimal). La memoria reservada para las cuatro variables
inicia en la localidad 201. El programa consiste de cuatro instrucciones:
1. Cargar el contenido de la localidad 201 en el AC (acumulador).
2. Sumar el contenido de la localidad 202 al del AC.
3. Sumar el contenido de la localidad 203 al del AC.
4. Almacenar el contenido del AC en la localidad 204.
Se escribira el programa como una serie de lneas. Cada lnea contiene la direccin de una localidad de
la memoria y el cdigo hexadecimal del valor binario almacenado en esa localidad. Entonces,
necesitamos un programa (traductor) que acepte esta entrada, convierta cada lnea a un nmero binario
y la almacene en la localidad especificada.
Esta es slo una ligera mejora. Para hacer mucho ms, podemos hacer uso del nombre simblico o
mnemnico de cada instruccin. Vamos a emplear eso en vez del cdigo de operacin actual. Esto
resulta en el programa simblico mostrado en la figura siguiente
Cada lnea de entrada an representa una localidad de la memoria. Cada lnea consiste de tres campos,
separados por espacios. El primer campo contiene la direccin de una localidad. Para una instruccin, el
segundo campo contiene el smbolo de tres letras para el cdigo de operacin. Si es una instruccin de
referencia a la memoria, entonces un tercer campo contiene la direccin. Para almacenar los datos
arbitrarios en una localidad, inventamos una pseudoinstruccin con el smbolo DAT. Esto es tan slo
una indicacin de que el tercer campo en la lnea contiene un nmero hexadecimal para ser almacenado
en la localidad especificada en el primer campo.
Para este tipo de entrada necesitamos un programa un poco ms complejo. El programa acepta cada
lnea de entrada, genera un nmero binario basado en el segundo y tercer (si existe) campo, y lo
almacena en la localidad especificada por el primer campo.
El uso de un programa simblico hace la vida mucho ms fcil pero es an torpe. En particular,
debemos dar una direccin absoluta para cada palabra. Esto significa que el programa y los datos
pueden ser cargados nicamente en un lugar en la memoria, y debemos conocer ese lugar en cualquier
momento.
En cualquiera de estas tres variantes de la programacin en lenguaje de mquina, lo peor es que la
revisin de un programa (cosa que ocurra con mucha frecuencia, como actualmente), lo cual en general
implica agregar o borrar una o ms lneas, cambiar las direcciones de todas las palabras subsecuentes.
Todos estos detalles suponan muchos errores y demasiado tiempo dedicado a verificar, calcular, llevar
tablas y otros trabajos de tipo administrativo.
La consideracin de que la computadora estaba en mejores condiciones para realizar este tipo de trabajo
administrativo, llev al desarrollo de lenguajes ensambladores.
En lenguaje ensamblador, cada cdigo de operacin se escribe empleando un nemnico y el
programador puede asignar a las direcciones del almacenamiento principal nombres simblicos, tanto
para instrucciones como para datos, como FECHA, IMPORTE, TABLA, LEER, COMIENZA, CALC-
1, CALC-2 etc., comnmente denominados ETIQUETAS.
El programa del apartado anterior escrito en un lenguaje ensamblador podra ser como muestra la figura
siguiente:
Este es un sistema mucho mejor y de uso generalizado. Cada lnea an consiste de tres campos. El
primero es todava para la direccin, pero se utiliza una etiqueta en vez de una direccin numrica
absoluta. Algunas lneas no tienen direccin, lo cual implica que la direccin de esa lnea es una ms
que la direccin de la lnea anterior. Para las instrucciones con referencia a la memoria, el tercer campo
tambin presenta una direccin simblica.
En el assembler (lenguaje ensamblador) de la IBM S/370, por ejemplo, la instruccin de la (Fig 1) de la
seccion anterior se escribe:
AR 12,11 (AR: de Add Register)
y la de Fig. 3:
ADD A,25
Sin embargo, como ya se dijo, la computadora no puede interpretar otro lenguaje que el propio de
mquina.
Por lo tanto, se requiere que los programas escritos
en ensamblador sean traducidos al lenguaje de
mquina.
Esta tarea la realiza un programa del Software de
Base del sistema de computacin llamado
PROGRAMA ENSAMBLADOR a
COMPAGINADOR.
El mismo es tomado, cuando se requiere, de algn
lugar del almacenamiento permanente del Sistema y
se lo carga en Memoria Principal, donde se ejecuta.
Adems de traducir las instrucciones del programa
al cdigo absoluto, el COMPAGINADOR calcula
las posiciones de almacenamiento para todas las
instrucciones y asigna direcciones numricas a los
smbolos o ETIQUETAS empleados por el
programador.
La salida del COMPAGINADOR recibe el nombre
de PROGRAMA OBJETO, producido a partir del
Instrucciones de mquina
Una instruccin de mquina es una representacin simblica de una instruccin del lenguaje de
mquina (cdigo absoluto) del set de instrucciones del computador al cual pertenece el lenguaje.
Se llama "instruccin de mquina" por que el programa ensamblador la traduce en el cdigo en lenguaje
de mquina de la instruccin correspondiente del computador.
Instrucciones de ensamble
Son las que requiere el programa ensamblador para efectuar ciertas operaciones durante el proceso de
ensamble de un mdulo fuente, por ejemplo: definicin de datos constantes, definicin de fin de un
mdulo fuente, reserva de reas de memoria. Excepto para las instrucciones que definen constantes, el
ensamblador no traduce las instrucciones de ensamble en cdigo objeto.
Macro-instrucciones y macro-definiciones
Una macro-instruccin es una orden, para el programa ensamblador de "procesar" una secuencia
predefinida de cdigos, llamada macro-definicin.
De acuerdo a esta definicin, el ensamblador inserta un grupo de cdigos o instrucciones de mquina,
identificados como una macro-definicin a travs de un par de instrucciones de ensamble, en el punto
del programa fuente en el cual se halla una macro-instruccin.
Las macro-definiciones son identificables a travs de un nombre, que se usa como argumento en las
macro-instrucciones que la acceden.
El proceso de insercin de macro-definiciones se muestra grfica mente a continuacin:
Se puede acceder a una secuencia determinada de instrucciones la macro-definicin, por el uso de una
macro-instruccin o macro-llamada.
El programa ensamblador reemplaza la macro-llamada por las instrucciones de la macro-definicin.,
insertndola en el punto de llamada. El proceso de insercin de una macro-definicin en un programa
fuente se denomina macro-generacin o macro-expansin.
Puede considerarse el proceso de ensamble de un mdulo fuente, separado en dos tiempos:
Tambin puede seleccionarse una secuencia determinada de instrucciones pertenecientes a una macro-
definicin:
Es un procesador que apareci en el mercado en 1976. Es similar al Intel 8080 pero notablemente
mejorado. El Z80 fue tambin uno de los microprocesadores ms populares y ms empleados sobre todo
a nivel de microcomputadores personales y domsticos.
Registro Acumulador (A): registro de 8 bits asociado a la UAL, es el registro de trabajo de sta e
interviene en las operaciones ya sea para almacenar un operando a ser usado en una prxima
instruccin, como para recibir un resultado. Cuenta con un registro imagen (A, tambin de 8 bits)
Registro de estado o flags (F): Es un registro de 8 bits que al igual que A tiene una imagen, F. Su
funcin es la de brindar informacin respecto del resultado de la ejecucin de una instruccin, que
puede ser consultada por el programador por medio de las instrucciones correspondientes.
Dicha informacin es representada a travs de seis de los ocho bits con que cuenta, indicando cada uno
de ellos una condicin distinta, de acuerdo a su valor (0-1).
Registros de uso general: Son utilizados a voluntad por el propio programador. Identificados como B,
C, D, E, H y L. Se accede a cada uno de ellos segn la indicacin de la instruccin usada.
Se observa que los de la izquierda se encuentran duplicados en la derecha (B' C' D' E', H' y L'), es decir,
el P dispone de dos juegos complejos de registros equivalentes. El programador puede trabajar con
uno u otro grupo de registros, pasando de uno a otro lugar con las correspondientes instrucciones de
cambio. Pueden ser utilizados corno registros de 8 16 bits segn lo indique la instruccin aplicada. En
el ltimo caso, se asocian de la siguiente manera: B-C, D-E, H-L y B'-C', D'-E' y H'- L'.
Registros de uso especfico: El P Z80 dispone de cuatro registros de uso especfico de 16 bits
denominados PC, SP, IY, IX y otros dos tambin especficos de ocho bits llamados I y R. A
continuacin reseamos las funciones de cada uno de ellos.
PC (Program Counter): es el registro del contador de programa, es de 16 bits y en l se almacena
la direccin de memoria de la prxima instruccin a ejecutar. Se incrementa en uno
automticamente despus de leer la instruccin correspondiente (ver la Parte II, detalle de la
ejecucin de una instruccin particular). Cuando el programa presenta una instruccin de salto,
la direccin de ste se transfiere al PC, ejecutndose el salto y continundose el programa a partir
de esta nueva direccin. Es el cometido tpico de todo registro PC.
SP (Stack Pointer): es tambin un registro de 16 bits cuya funcin es la de hacer de puntero para
indicar en qu direccin de la RAM est ubicado el stack (pila). El stack es tratado como una
memoria tipo LIFO (Last Input First Output que quiere decir que el ltimo dato guardado es el
primero en recuperarse). Cuando ha llamados a subrutinas, el P utiliza la pila para preservar las
direcciones de retorno. Adems, el set dispone de dos instrucciones, llamadas PUSH y POP que
se le permiten al programador utilizar la pila para manejar cualquier dato de su programa.
IX IY: son dos registros ndices independientes entre s y de 16 bits cada uno. Son usados por el
P como ndice para efectuar operaciones con direccionamiento indexado.
Este modo de direccionamiento simplifica la confeccin de un programa en especial cuando se
accede a tablas de datos.
Registro I: denominado Interrupt Page Address Register es un registro de ocho bits y puede ser
usado donde una llamada indirecta a una posicin de memoria sea necesaria como consecuencia
de una interrupcin.
Registro R: Denominado Memory Refresh Register Es tambin de ocho bits y puede ser usado
para acceder a memorias dinmicas. El contenido de este registro es automticamente
incrementado despus de cada instruccin de bsqueda.
Estos ocho bits pueden salir al exterior de P por la parte baja del bus de direcciones para
refrescar continuamente la memoria RAM dinmica a la que se desea acceder.
Las interrupciones
El microprocesador Z80 tiene dos entradas de interrupcin: la entrada de interrupcin no enmascarable
NMI y la entrada de interrupcin enmascarable INT.
La interrupcin NMI, cuando se haya producido, no puede ser desactivada por programa y ser
aceptada siempre que un perifrico la solicite. Esta interrupcin ser, generalmente, reservada para las
funciones ms importantes que necesariamente tengan que ser atendidas en el momento de producirse,
tal como un fallo de alimentacin, etc.
La interrupcin enmascarable INT puede ser permitida o no, segn las necesidades, por el programa.
Esto permite al programador no preocuparse de las interrupciones en zonas de su programa que no
requieran de interrupciones. Por supuesto que algn perifrico conectado al terminal INT podr pedir
interrupcin en cualquier momento; pero sta no ser atendido si previamente el programa ha bloqueado
la posibilidad de acceso. La peticin de interrupcin podr ser atendida siempre que por programa sea
permitida de nuevo.
En el interior de] propio P existe un biestable denominado IFF que puede ser alterado por programa
usando la instruccin EI (Enable Interrupt) para ponerlo a uno, permitiendo las interrupciones, y la
instruccin DI (Disable Interrupt) para ponerle a cero, bloqueando as la entrada de interrupciones.
Direccionamiento extendido
Este modo de direccionamiento es el ms sencillo, ya que el operando es la direccin real de la casilla
de memoria afectada. Se designa con la palabra extendido para indicar que este modo de
direccionamiento permite acceder a la totalidad del espacio de memoria. El operando es, por lo tanto,
una palabra de 16 bits.
La instruccin cargar en el acumulador el contenido de la casilla de memoria de direccin 0C745H se
escribe:
LD A, (0C745H)
Direccionamiento indexado
Este modo de direccionamiento tambin se llama relativo a una base.el operando es un octeto con
signo (-128 a 127). El microprocesador calcula la direccin real mediante la suma del operando
(llamado desplazamiento) ms el contenido de uno de los registros ndice (IX o IY).
La instruccin cargar en el acumulador el contenido de la casilla de memoria del elemento 8 de la tabla
apuntada por el registro IX se escribe:
LD A, (IX+8)
Estos 3 modos de direccionamiento vistos constituyen el nico sistema que posee el Z80 para acceder a
los datos de la memoria central.
Direccionamiento implcito
Algunas instrucciones del Z80 slo pueden ejecutarse a travs del acumulador. En ese caso, no hay
necesidad de precisar implcitamente que el operando es el acumulador.
La instruccin rotacin a la izquierda del acumulador a travs del acarreo se escribe:
RLCA (sin operando)
Direccionamiento inmediato
No se trata de un modo de direccionamiento aunque se le considere como tal por deformacin del
lenguaje. En efecto, el operando no es ni una direccin, ni un desplazamiento, ni un nombre de registro,
sino el dato numrico a tratar por la instruccin. En un modo de direccionamiento autntico, el
operando indica dnde se encuentra el dato.
La instruccin cargar en el acumulador el valor 133 se escribe:
LD A,133D
Direccionamiento relativo al PC
En este caso el operando es un desplazamiento (octeto consigo). Este modo de direccionamiento slo es
utilizado por el PC y permite efectuar bifurcaciones modificando su valor. El procesador realiza la
operacin PC = PC +/- desplazamiento. La bifurcacin relativa al PC resulta interesante porque es
independiente del lugar de la memoria central en el que se cargue el programa.
La instruccin volver30 octetos hacia atrs se escribe:
JR -30D
Implantacin de la pila
La pila es una estructura til proporcionada como parte de una implantacin de la CPU. Un uso de la
pila es manejar las llamadas y retornos de subrutinas. Las pilas tambin pueden ser tiles para el
programador con propsitos generales.
La implantacin de una pila depende en parte de sus usos potenciales. Si es deseable hacer que las
operaciones de la pila estn disponibles para el programador, entonces el conjunto de instrucciones
incluir operaciones orientadas al pila, incluyendo PUSH (colocar), POP (extraer) y las operaciones que
emplean uno o dos elementos del tope de la pila como operandos. Ya que todas estas operaciones se
refieren a una localidad nica, llamada tope de la pila, la direccin del operando u operandos est
implcita y no necesita estar incluida en la instruccin. Estas son instrucciones de cero direcciones.
Si el mecanismo de la pila es utilizado slo por la CPU para propsitos tales como el manejo de
subrutinas, entonces no sern explcitas las instrucciones orientadas a la pila en el conjunto de
instrucciones. En cualquier caso, la implantacin de una pila requiere que exista algn conjunto de
localidades usadas para almacenar los elementos de la pila. Un bloque contiguo de localidades se
reserva en la memoria principal (o en la memoria virtual) para la pila. La mayor parte del tiempo, el
bloque se llena de manera parcial con elementos de la pila y el resto est disponible para el crecimiento
de sta. Tres direcciones son necesarias para una operacin apropiada, y stas con frecuencia se
almacenan en registros de la CPU:
Apuntador de la pila: Contiene la direccin del tope de la pila. Si un elemento se coloca o
extrae de la pila, el apuntador se incrementa o decrementa para contener la direccin del nuevo
tope de la pila.
Base de la pila: Contiene la direccin de la localidad inferior en el bloque reservado. Si se hace
un intento de ejecutar una instruccin POP cuando la pila est vaca, se reporta un error.
Limite de la pila: Contiene la direccin del otro extremo del bloque reservado. Si se hace un
intento de ejecutar una instruccin PUSH cuando el bloque est utilizado en su totalidad por la
pila, se reporta un error.
El Z80 incluye el manejo de pila, tanto para el uso de subrutinas como para otros usos de programacin,
para lo cual incluye en el set las correspondientes instrucciones PUSH y POP.
Funcionamiento de la pila
La gestin de esta pila por el registro SP (Snack Pointer) es muy sencilla. Al comenzar, cuando la pila
est vaca, SP contiene la direccin de una casilla de memoria. Para cada escritura en la pila, el registro
SP es decrementado en 1, escribindose a continuacin, el dato en la celda de memoria cuya direccin
viene indicada por el contenido del registro SP. De esta manera, los datos de la pila se colocan en
direcciones contiguas decrecientes. Para cada lectura se hace el camino inverso. Es decir, se lee la
casilla de memoria apuntada por SP y despus se incrementa en 1 este registro.
Estas operaciones aparecen resumidas en el esquema siguiente:
Observe que la lectura no afecta a los valores guardados en la pila. Slo queda modificado el SP.
La pila se utiliza para la llamada a las rutinas. La manipulacin de la memoria pila se consigue a travs
de las instrucciones de lenguaje de mquina CALL nn y RET. Cuando el procesador encuentra un
CALL nn bifurca a la direccin nn y contina hasta que encuentra una direccin RET. En ese momento
hay que volver a la instruccin siguiente a la del llamado (nn+1). Esto significa que el procesador ha
conservado en algn sitio esta direccin. Este sitio es la pila. El funcionamiento de la pila permite
anidar las rutinas de forma casi ilimitada. En efecto, la ltima direccin de retorno apilada corresponde
al primer RET encontrado (esquema LIFO).
La direccin de la instruccin siguiente al CALL est en el PC. Cada CALL pone en la pila el PC y a
continuacin lo carga con la direccin de comienzo de la rutina. Para cada RET el PC saca la direccin
de la pila. Observe que son necesarias dos operaciones con la pila para colocar los 16 bits del PC
despus de un CALL.
(SP-1) = PCH y (SP-2)= PCL SP = SP-2
despus de un RET:
PCL = (SP) y PCH = (SP+1) SP = SP+2