Вы находитесь на странице: 1из 21

EL MICROPROCESADOR Z-80 Un ordenador es una mquina fundamentalmente secuencial.

Esto quiere decir que realiza sus tareas una detrs de otra, siguiendo el orden en el que estn las instrucciones para realizarlas. Sus componentes bsicos sern, por tanto, un lugar donde almacenar las instrucciones y datos (Memoria) y un elemento encargado de ejecutar los procesos indicados por esas instrucciones (Unidad Central de Proceso o CPU). La CPU debe incluir todos los componentes necesarios para leer la memoria, decodificar las instrucciones y ejecutar clculos aritmticos y lgicos. En los ordenadores de pequeo tamao (minis y micros), la CPU est integrada dentro de un solo chip de silicio, a este chip se le conoce por el nombre de microprocesador. Un microprocesador consta, normalmente, de una serie de registros, una Unidad Aritmtica-Lgica (ALU) y los circuitos de control para la comunicacin interna y externa. En la FIGURA 1 se puede ver el diagrama de bloques del microprocesador Z-80.

Figura 1. Diagrama de bloques del Z-80.

Registros Los registros constituyen una especie de pequea memoria interna al microprocesador. El Z-80 tiene registros de 8 y 16 bits, si bien los de 8 bits se pueden agrupar de 2 en 2 para formar uno de 16 bits. Todas las operaciones que realiza el Z-80 se hacen entre nmeros contenidos en los registros, o bien, entre un registro y una posicin de memoria; por eso se dice que el Z-80 es un microprocesador orientado hacia los registros. La posibilidad de agrupar dos registros de 8 bits para formar uno de 16, permite al Z-80 realizar operaciones de 16 bits a pesar de ser un microprocesador de 8 bits. El Z-80 tiene, en total, 18 registros de 8 bits y 4 registros de 16 bits. Algunos son de uso general y otros tienen asignadas funciones especficas. Como se ve, los registros cumplen en Cdigo Mquina una funcin similar a la de las variables en Basic. La configuracin de registros del Z-80 se muestra en la FIGURA 2.

Figura 2. Registros del Z-80. Registros especiales de 16 bits Los cuatro registros especiales de 16 bits son: el Contador de programa (PC), el Puntero de pila (SP), el registro ndice "X" (IX) y el registro ndice "Y" (IY). A continuacin vamos a verlos de uno en uno. CONTADOR DE PROGRAMA (Program Counter "PC"):

Es el registro que contiene la direccin de memoria desde donde hay que leer la instruccin en curso, tras la ejecucin el registro se incrementa para continuar con la siguiente, o se sustituye su valor por otro si se ha de ejecutar un salto o una llamada a subrutina. En el momento de conectar el ordenador, la seal de RESET pone este registro a "cero", por lo que la ejecucin comienza desde la primera direccin de memoria. PUNTERO DE PILA (Stack Pointer "SP"): Una pila es una zona reservada de memoria cuyos datos estn organizados como "ltimo en entrar, primero en salir" (LIFO: Last In First Out), y sirve para almacenar determinados datos, como por ejemplo, la direccin de retorno tras una llamada a subrutina. De una pila slo se puede recuperar cada vez el ltimo dato que se ha introducido. El registro SP es el puntero de la Pila de Mquina. Apunta siempre al ltimo dato introducido, los datos que se introducen en la pila de mquina tienen siempre dos bytes de longitud. Durante la rutina de inicializacin, se carga este registro con un valor (inmediatamente debajo de RAMTOP) y cada vez que se mete un dato en la pila, el puntero (SP) se decrementa dos veces (la pila se expande hacia abajo). La existencia de una pila permite la ejecucin de llamadas a subrutinas, cada vez que se llama a una subrutina, se introduce en la pila el contenido actual del PC, se decrementa dos veces el SP y se carga el PC con la nueva direccin de la subrutina. Para retornar, se carga el PC con el contenido superior de la pila y se incrementa dos veces el SP. Este sistema permite la anidacin de subrutinas hasta el lmite de la memoria disponible para la pila. Cuando se escribe un programa, hay que tener sumo cuidado para que la pila no crezca indefinidamente, ya que destrozara todos los datos almacenados en memoria, incluido el propio programa. Por otro lado, hay que tener cuidado para recuperar de la pila todos los datos almacenados durante una subrutina antes de intentar retornar, ya que de lo contrario habramos "corrompido" la pila y el retorno no sera posible. Nuestros programas en C/M se llaman desde Basic como una subrutina (con la funcin USR) de forma que para retornar a Basic mediante una instruccin RET, deberemos tener la pila en perfectas condiciones. No obstante, el Sistema Operativo del Spectrum permite un retorno a Basic, incluso con la pila "corrompida", mediante el uso de la instruccin RST 8 que se explicar ms adelante. REGISTROS INDICE (Index X e Index Y "IX" e "IY"): Estos registros sirven para manipular tablas, contienen las direcciones de base a las que se sumar un entero en complemento a dos cuando se utilice direccionamiento indexado (esta forma de direccionamiento se ver ms adelante).

El Sistema Operativo del Spectrum utiliza el registro IY como direccin de base para acceder a las variables del sistema, por lo que deberemos tener sumo cuidado si utilizamos este registro en nuestros programas. Registros especiales de 8 bits VECTOR DE INTERRUPCION (Interrupt "I"): El Z-80 utiliza el dato contenido en este registro como octeto de orden alto de la direccin a la que deber saltar cuando reciba una peticin de interrupcin enmascarable en "modo 2" (las interrupciones del Z-80 se estudiarn ms adelante en este mismo captulo). REGISTRO DE REGENERACION (Refresh "R"): Como casi todos los lectores sabrn, el Spectrum utiliza memoria RAM dinmica, este tipo de memoria tiene que ser leida y vuelta a escribir continuamente. El Z-80 utiliza este registro de 7 bits como direccin para regenerar la memoria durante el tiempo de decodificacin de cada instruccin. Registros alternativos El Z-80 tiene dos grupos de 8 registros de 8 bits cada uno, que pueden ser usados de forma alternativa mediante una instruccin de intercambio de contenidos. Cada uno de estos grupos lleva un acumulador, un indicador de estado y 6 registros de uso general. ACUMULADOR (Acumulator "A"): El Acumulador recibe los resultados de todas las operaciones aritmticas y lgicas que realiza en microprocesador que es, de hecho, el registro ms usado del Z-80. Existen dos acumuladores, uno en cada grupo de registros alternativos (ver FIGURA 2) que se denominan respectivamente A y A'. REGISTRO DE ESTADO (Flags "F"): El registro de estado indica la ocurrencia de determinadas condiciones, tales como: paridad, cero, signo, acarreo, desbordamiento, que se producen tras una operacin aritmtica o lgica y que sern de gran utilidad en los saltos condicionales. En la FIGURA 3 se puede ver la disposicin de los distintos indicadores dentro del registro de estado.

Figura 3. Indicadores de estado en el registro "F". Existen dos registros de estado, uno en cada grupo de registros alternativos, se denominan respectivamente F y F'. REGISTROS DE USO GENERAL ("B", "C", "D", "E", "H", "L"): Cada grupo de registros alternativos tiene 6 registros de uso general que se denominan respectivamente B, C, D, E, H, L y B', C', D', E', H', y L'. Pueden agruparse de dos en dos para formar los registros BC, DE, HL y BC', DE' y HL'. Una instruccin de intercambio de contenidos, permite seleccionar entre parejas de registros de uno u otro grupo. Su aplicacin es de uso general, si bien, algunos tienen funciones especficas asignadas en determinadas instrucciones, por ejemplo "HL" acta como acumulador en las operaciones aritmticas de 16 bits, "B" acta como contador en los bucles de iteracin (instruccin DJNZ) y finalmente, en las transferencias de bloques, "HL" indica el origen, "DE" el destino y "BC" el nmero de bytes a transferir. En el Sistema Operativo del Spectrum, el registro "BC" acta como un puente de comunicacin con el Basic, ya que cada vez que ejecutamos la funcin USR, lo que obtenemos como resultado es, precisamente, el contenido del registro "BC" en el momento de retornar, lo que nos permitir pasar datos con facilidad desde Cdigo Mquina a Basic. Unidad Aritmtica-Lgica Otro componente fundamental del microprocesador es la ALU o Unidad AritmticaLgica que es la encargada de realizar todas las operaciones en el interior del microprocesador. Las operaciones que puede realizar son: Desplazamiento Comparacin Puesta a uno de bit Puesta a cero de bit Prueba de bit

AND OR OR exclusivo (EXOR) Incremento Decremento Suma Resta Ajuste decimal El desplazamiento consiste en una rotacin, bit a bit, de un registro o una posicin de memoria, puede incluir el indicador de acarreo del registro F. El efecto de rotar a la izquierda es el de multiplicar el nmero por 2, y el de rotarlo a la derecha es el de dividirlo por 2. La comparacin consiste en cotejar el acumulador con otro nmero y alterar los indicadores del registro F de acuerdo con el resultado de la comparacin, permaneciendo inalterado el contenido del acumulador. Probar un bit consiste en ver si es "uno" o "cero" y anotar el resultado en el indicador de cero del registro F. Incrementar es sumar "1", decrementar es restar "1". La suma y la resta pueden ser con o sin acarreo. El ajuste decimal consiste en transformar el nmero Hexa contenido en el acumulador y comprendido entre "00" y "FF", en un nmero decimal codificado en binario (BCD) comprendido entre "00" y "99". Registro de instrucciones El registro de instrucciones no es accesible por el programador, se carga durante la lectura de una instruccin, con el contenido de la posicin de memoria direccionada por el "PC", y retiene la instruccin hasta que es decodificada por el microprocesador. Buses Para comunicarse con la memoria y los perifricos, el Z-80 utiliza una serie de lneas elctricas denominadas BUSES. Cada una de estas lneas se corresponde con una patilla del chip Z-80. Existen tres buses: Bus de direcciones de 16 bits formado por 16 lneas elctricas denominadas A0A15.

Bus de datos de 8 bits, formado por 8 lneas elctricas denominadas D0-D7. Bus de control de 13 bits formado por 13 lneas elctricas denominadas: M1,MREQ,IORQ,RD,WR,RFSH,HALT,WAIT,INT,NMI,RESET,BUSRQ y BUSAK. Las tres patillas restantes hasta las 40 del chip son: la entrada de la seal de "reloj" (3,500,000 impulsos por segundo), la entrada de alimentacin elctrica (+5 voltios) y la conexin comn a MASA. Se dice que una entrada o salida est a nivel alto ("1") cuando su tensin con respecto a MASA es de +5V. Y se dice que est a nivel bajo ("0") cuando su tensin con respecto a MASA es de 0V. Cuando el nombre de una lnea tiene una raya encima, indica que es activa a nivel bajo, si no, se considera activa a nivel alto. Todas las salidas del Z-80 son Triestado, esto quiere decir que cuando no se estn utilizando permanecen en un estado de alta impedancia que tiene el mismo efecto que si estuvieran desconectadas del circuito. A continuacin veremos una a una todas las seales elctricas del Z-80, representadas en la FIGURA 4.

Figura 4. Configuracin de patillas del Z-80. A0-A15 Constituyen un bus de direcciones que permite acceder a 65536 posiciones de memorias, o a 256 ports de entrada/salida. En las operaciones de entrada/salida, los port se direccionan con los ocho bits inferiores del bus. Durante el tiempo de regeneracin de memoria, los siete bits inferiores contienen una direccin de regeneracin. D0-D7 Constituyen un bus de datos bidireccional que permite al microprocesador tanto enviar datos como recibirlos. Se utiliza para el intercambio de datos con la memoria o con dispositivos de entrada/salida (ports). Salida M1 (Machine 1) Se utiliza para indicar que el ciclo de mquina en curso es el de bsqueda de instruccin. Tambin se activa junto con IORQ para indicar un acuse de recibo a una peticin de interrupcin. Salida MREQ (Memory Request) Se utiliza para indicar que el microprocesador desea acceder a la memoria. Salida IORQ (Input/Output Request) Se utiliza para indicar que el microprocesador desea acceder a un port de entrada/salida. Tambin se utiliza junto con M1 para indicar un acuse de recibo a una peticin de interrupcin. Salida RD (Read) Se utiliza para indicar que se desea leer una posicin de memoria o un port de entrada/salida. Salida WR (Write) Se utiliza para indicar que se desea escribir en una posicin de memoria o en un port de entrada/salida. Salida RFSH (Refresh) Se utiliza para indicar que se est en un ciclo de regeneracin de memoria, y la direccin presente en los siete bits inferiores del bus de direcciones junto con la seal MREQ se deben usar para una lectura de refresco de memoria.

Salida HALT Se utiliza para indicar que el microprocesador ha ejecutado una instruccin "HALT" y est esperando una peticin de interrupcin para atenderla. Durante este tiempo, se ejecuta continuamente la instruccin NOP con el fin de mantener la lgica de regeneracin de memoria. Entrada WAIT Le indica al microprocesador que tiene que esperar, ya que la memoria o el dispositivo de entrada/salida direccionado, no est listo para recibir la transferencia de datos solicitada. Esta seal y la anterior, tienen la finalidad de sincronizar el funcionamiento del microprocesador con el de otros dispositivos. Entrada INT (Interrupt) Peticin de interrupcin enmascarable, la interrupcin slo es atendida si se encuentra activado el flip/flop de aceptacin de interrupcin. Si la interrupcin es aceptada, se enva el acuse de recibo a travs de IORQ y M1 y se salta a la rutina de servicio correspondiente al modo de interrupcin seleccionado. En el Spectrum, la ULA se encarga de efectuar una peticin de interrupcin enmascarable cada 20 milisegundos, justo antes de empezar a barrer la pantalla del televisor. Esta interrupcin se utiliza normalmente para leer el teclado, pero es posible utilizarla en nuestras propias rutinas para sincronizar el funcionamiento de nuestros programas con el barrido de la pantalla, lo que puede ser til en caso de animacin de figuras. Entrada NMI (Non Maskable Interrupt) Peticin de interrupcin no enmascarable, esta interrupcin se acepta siempre (salvo que haya presente una seal en BUSRQ y obliga al microprocesador a saltar a la direccin 0066h independientemente del flip/flop de aceptacin y del modo de interrupcin seleccionado. Entrada RESET Esta entrada obliga al microprocesador a inicializarse, cargando todos los registros con "cero", incluido el "PC", por lo que la ejecucin comienza desde la posicin de memoria "0000". En el Spectrum, esta seal se produce cada vez que se conecta el ordenador, o cada vez que se pulsa el botn de RESET en el Plus.

Entrada BUSRQ (Bus Request) Constituye una seal de peticin de bus, al recibirla, el microprocesador responde activando la lnea BUSAK y desconectndose de los buses de direcciones y datos para permitir el acceso directo a memoria de un dispositivo ms rpido que l. Durante este tiempo, el microprocesador no regenera la memoria, por lo que el dispositivo que ha hecho la peticin debe encargarse de esta tarea. Salida BUSAK (Bus Aknoledge) La utiliza el microprocesador para indicar el acuse de recibo a una peticin de bus. Cuando se genera esta seal, el microprocesador se haya totalmente desconectado de los buses de direcciones y datos, con lo que no interfiere el acceso a memoria del dispositivo que ha pedido el bus. Las interrupciones en el Z-80 Cualquier microprocesador que valga el plstico que lo envuelve, tiene una posibilidad de interrumpir lo que est haciendo para atender inmediatamente a un dispositivo de alta prioridad que lo solicite, retornando a su tarea principal en el punto donde la dej, cuando el servicio a este dispositivo haya finalizado. El Z-80 como buen microprocesador que es, tiene varias posibilidades de interrupcin que permiten el acceso con distinta prioridad. INTERRUPCION NO ENMASCARABLE (NMI) Es la peticin de interrupcin de ms alta prioridad, se acepta siempre, y se responde siempre de la misma forma: saltando a la posicin de memoria 0066h. En el Spectrum esta forma de interrupcin no se utiliza, es ms, se encuentra ingeniosamente anulada para facilitar la proteccin del software comercial; si activramos a travs del slot posterior, la lnea NMI, nos encontraramos con la desagradable sorpresa de que el ordenador ejecuta un salto a la posicin de memoria "cero", reinicializndose y borrando toda la memoria. Esto se debe a que la rutina de servicio a la interrupcin que se encuentra a partir de 0066h salta a cero si el contenido de las posiciones de memoria 5CB0h y 5CB1h es "cero"; podemos evitar el salto a cero, almacenando un nmero distinto de cero en estas posiciones, pero en este caso, se producira un simple retorno y la interrupcin sera ignorada. INTERRUPCION ENMASCARABLE (INT) Se trata de la interrupcin ms usada en el Z-80 ya que permite definir el vector de interrupcin, y lo que es ms importante, decidir por software si se atiende o no la peticin.

Se denomina vector de interrupcin a la direccin de memoria a que se salta para ejecutar la rutina de servicio a la interrupcin. En el Z-80 existe un "miniregistro" de un solo bit que se denomina flip/flop de aceptacin de interrupcin. Si este registro est a "1", la peticin de interrupcion es aceptada, y si est a "0" es ignorada. Cuando el flip/flop de aceptacin est a "0", se dice que la interrupcin est enmascarada. Existen dos instrucciones en el Z-80 que nos permiten enmascarar o habilitar la interrupcin, estas interrupciones son: "DI" (Disable Interrupt) y "EI" (Enable Interrupt), se vern detalladamente cuando se estudien las instrucciones de control de la CPU. Si la interrupcin est habilitada, y el microprocesador decide aceptarla, podr responder de tres modos distintos. Estos tres modos de interrupcin, tambin se seleccionan por software, mediante las instrucciones: "IM0", "IM1" e "IM2" (Interrupt Mode 0, 1 y 2). Estos modos de respuesta se denominan respectivamente: MODO 0, MODO 1 y MODO 2. MODO 0 En este modo de interrupcin, el microprocesador deja libre el bus de datos para permitir que el dispositivo que ha silicitado la interrupcin, inserte el cdigo de operacion correspondiente a una instruccin que ser ejecutada seguidamente por el microprocesador. En el Spectrum, este modo de interrupcin es redundante, ya que si lo seleccionamos, cuando se vaya a ejecutar, no habr ningn dispositivo que inserte ningn cdigo de operacin, por lo que el bus de datos contendr "FF", que es precisamente el cdigo de operacin de "RST 38", instruccin que obliga al microprocesador a saltar a la posicin de memoria 0038h, que es, como veremos ahora, lo que hace en el MODO 1. MODO 1 En este modo de interrupcin, el microprocesador responde a la interrupcin, simplemente, saltando a la posicin de memoria 0038h. En este caso se dice que el vector de interrupcin es fijo. En el Spectrum, se trabaja normalmente en MODO 1, ya que a partir de la posicin de memoria 0038h se encuentra la rutina que lee el teclado. MODO 2 Es el modo de interrupcin ms complejo del Z-80, y el que deberemos utilizar para nuestros fines. En este caso, el microprocesador responde de una forma

bastante compleja que conviene analizar detenidamente: primero coje el contenido del registro "I", lo considera como un octeto superior de una direccin, el octeto inferior deber suministrarlo el dispositivo que ha solicitado la interrupcin (si no lo suministra, se entiende que es FFh). Acto seguido, lee el nmero almacenado en esa direccin y la siguiente, lo carga en el "PC", y contina la ejecucin desde ese punto. Este modo de interrupcin permite un salto indirecto a cualquier posicin de memoria, hay que tener en cuenta que en el Spectrum el octeto de orden bajo de la direccin ser siempre FFh y por tanto, la lectura de la direccin a la que hay que saltar se producir desde una posicin de memoria cuya direccin sea xxFFh, siendo xx el contenido del registro "I", que por motivos evidentes, se denomina Vector de pgina de interrupcin. Teniendo en cuenta que en el Spectrum se produce una peticin de interrupcin enmascarable cada 20 milisegundos, podemos desactivar la interrupcin (con "DI") para que nuestros programas corran ms deprisa, o bien, utilizar la instruccin HALT para sincronizarnos con el barrido de la pantalla. Otra posibilidad es cambiar a MODO 2 y utilizar un vector de interrupcin que salte a una rutina nuestra, con lo que sta se ejecutar 50 veces por segundo. Palabra de datos del Z-80 Como hemos visto anteriormente, el Z-80 es un microprocesador de 8 bits, esto quiere decir que cada vez que se accede a la memoria, lee un octeto completo, que puede ser un cdigo de operacin o un dato. Un octeto puede almacenar 256 nmeros distintos (2 elevado a 8) pero el Z-80 tiene ms de 256 instrucciones diferentes, por lo que algunos cdigos de operacin ocupan ms de un byte. Por otro lado, en un gran nmero de instrucciones, el operando se ensambla como uno o varios bytes que siguen al cdigo de operacin. En la FIGURA 5 se pueden ver los distintos formatos de instruccin del Z-80.

Figura 5. Formatos de instruccin del Z-80. Ciclos o tiempos Para realizar las operaciones secuencialmente, el Z-80 necesita sincronizar todas sus seales internas y externas y disponer, por tanto, de un patrn de tiempo. Es lo que se denomina: Reloj del microprocesador. El reloj del microprocesador est constituido por un oscilador electrnico controlado por un cristal de cuarzo, que entrega tres millones y medio de impulsos por segundo (3.5 MHz). Estos impulsos se introducen en el Z-80 a travs de la patilla 6 denominada "RELOJ", y el microprocesador utiliza un nmero determinado de estos impulsos para cada operacin. La primera versin del Z-80 no aceptaba seales de reloj superiores a 2.5 MHz.

En el Spectrum se ha utilizado una versin ms moderna denominada Z-80A, que admite seales de reloj de hasta 4 MHz, con lo que se consigue una mayor velocidad de ejecucin. En el Spectrum se ha utilizado una seal de reloj de 3.5 MHz en vez de los 4 tolerados, para evitar llevar al microprocesador al lmite de su frecuencia de trabajo, lo que podra dar lugar a errores. CICLOS DE MAQUINA Y CICLOS DE INSTRUCCION Se denomina Ciclo de instruccin al tiempo durante el cual el microprocesador ejecuta una instruccin completa. El ciclo de instruccin se subdivide a su vez, en ciclos de mquina. Un ciclo de mquina es el tiempo durante el cual el microprocesador realiza una operacin elemental. Cada ciclo de mquina emplea varios ciclos (impulsos) de reloj. Se denomina "M1" al ciclo de mquina correspondiente a la bsqueda del cdigo de operacin, durante el cual, la pata M1 del microprocesador se coloca a nivel bajo. El ciclo de mquina M1 ocupa 4 ciclos de reloj; un ciclo de reloj dura aproximadamente 0.29 microsegundos (millonsimas de segundo), por lo que el ciclo M1 dura 1.14 microsegundos. Un ciclo de memoria es una operacin de lectura o escritura en memoria, emplea 3 ciclos de reloj, y dura 0.86 microsegundos. En la FIGURA 6 se puede apreciar el cronograma (diagrama de tiempo) de una instruccin tpica.

Figura 6. Cronograma de un ciclo tpico de instruccin.

TIEMPOS DE EJECUCION Como el lector habr deducido ya, es posible calcular el tiempo de ejecucin de una determinada rutina en C/M, a condicin de conocer el nmero de ciclos de reloj que emplea cada una de sus instrucciones. En lo sucesivo, cada vez que veamos una determinada instruccin, indicaremos el nmero de ciclos de reloj que emplea el microprocesador para ejecutarla, as como el nmero de veces que accede a memoria (ciclos de memoria). Como ejemplo, veamos lo que se tarda en cargar el registro "A" con un nmero. Podemos utilizar la instruccin: LD A,#FF que carga el nmero 255 (FFh) en el acumulador, esta instruccin accede 2 veces a memoria (2 ciclos de memoria), una para buscar el cdigo de operacin (4 ciclos de reloj) y otra para buscar el nmero que ha de cargar en "A" (3 ciclos de reloj); lo que hace un total de 7 ciclos de reloj, es decir, unos 7 x 0.29 = 2 microsegundos. Este ejemplo ilustra la enorme velocidad del cdigo mquina, el microprocesador es capaz de cargar el acumulador medio milln de veces en un segundo. Supongamos que queremos sumar en el acumulador una lista de nmeros, y usaremos el registro HL para movernos a lo largo de esa lista, el bucle podra ser: BUCLE ADC A, (HL) INC HL JR BUCLE

El tiempo de ejecucin por cada pasada, sera de 25 ciclos de relo, es decir 7.14 microsegundos. Con este bucle, nuestro ordenador podra sumar 140000 nmeros por segundo. Por supuesto, este pequeo bucle no es operativo, no existe condicin de salida del bucle, por lo que el ordenador se quedara eternamente atrapado dentro de l, y por otro lado, se producira un rebosamiento en el acumulador, ya que el resultado de las sumas excedera su capacidad, a menos que la mayor parte de los nmeros fueran ceros. La nica finalidad de este ejemplo es mostrar la enorme velocidad de ejecucin del cdigo mquina. Para calcular el tiempo de ejecucin de sus rutinas, sume los nmeros de ciclos de reloj de cada instruccin y multiplique por 0.29 para obtener el resultado aproximado en microsegundos.

Modos de direccionamiento En la mayor parte de las operaciones, el Z-80 utiliza datos almacenados en sus registros o en posiciones de memoria. Las formas posibles de indicarle la situacin de estos datos, constituyen los diversos modos de direccionamiento. DIRECCIONAMIENTO INMEDIATO En este modo de direccionamiento, el byte que sigue al cdigo de operacin en memoria, contiene el operando. CODIGO DE OPERACION uno o dos bytes OPERANDO un byte Un ejemplo podra ser cargar el acumulador con una constante, donde la constante es el byte que sigue al cdigo de operacin. DIRECCIONAMIENTO INMEDIATO EXTENDIDO Es igual que el anterior, salvo que el operando ocupa dos bytes, el primer byte es el octeto de orden bajo, y el segundo, el de orden alto. CODIGO DE OPERACION uno o dos bytes OPERANDO (LSB) octeto de menos peso OPERANDO (MSB) octeto de ms peso Un ejemplo podra ser la carga de un registro doble con una constante que, lgicamente ocupara dos bytes de memoria.

DIRECCIONAMIENTO RAPIDO DE PAGINA CERO El Z-80 tiene unas instrucciones de salto rpido a una direccin de pgina cero. Hay ocho direcciones posibles donde se colocan las rutinas de uso ms frecuente, de esta forma se puede llamar a estas rutinas empleando un solo byte. En el Spectrum, estas direcciones se encuentran utilizadas por la ROM para las rutinas de ms uso, y son las siguientes: RST 00h : Inicializacin RST 08h : Salida de error RST 10h : Imprimir un caracter RST 18h : Leer un caracter RST 20h : Leer el siguiente caracter RST 28h : Entrada al calculador RST 30h : Hacer espacio en memoria RST 38h : Leer el teclado DIRECCIONAMIENTO RELATIVO En este caso, el byte que sigue al cdigo de operacin se emplea como un entero en complemento a dos, que se suma a la direccin actual almacenada en el PC. CODIGO DE OPERACION un byte (salto relativo) OPERANDO entero en complemento a 2 Este modo de direccionamiento permite efectuar saltos relativos, con lo que las rutinas pueden ser reubicables es decir, correr de igual forma en cualquier direccin de memoria. DIRECCIONAMIENTO INDEXADO En esta forma de direccionamiento, el byte de datos sigue al cdigo de operacin contiene un entero de desplazamiento en complemento a dos, que se suma al contenido actual del registro ndice correspondiente, para apuntar a una direccin de memoria. El cdigo de operacin tiene siempre dos bytes, el primer byte es DDh siempre que se utilice el registro IX y FDh siempre que se utilice el IY.

DD o FD ndice usado CODIGO DE OPERACION un byte DESPLAZAMIENTO entero en compl. a dos DIRECCIONAMIENTO DE REGISTROS En muchos de los cdigos de operacin, hay ciertos bits que especifican a qu registro se refiere la instruccin, permaneciendo inalterados el resto de bits. Un ejemplo podra ser la instruccin: LD C,B Que significa: cargar en el registro "C" el contenido del registro "B". DIRECCIONAMIENTO IMPLICITO En este caso, la situacin de los datos est implcita en el cdigo de operacin. Por ejemplo, en las operaciones aritmticas de 8 bits, el registro A&rqauo; (acumulador) es siempre el que recibe los resultados. DIRECCIONAMIENTO INDIRECTO En esta forma de direccionamiento, el contenido de un registro doble se utiliza como direccin a partir de la cual hay que cargar el dato. Un ejemplo podra ser: LD A, (HL) Que significa: carga el registro A con el contenido de la direccin de memoria apuntada por el registro HL. Es este caso el registro HL se utiliza como puntero para apuntar a una direccin de memoria, siempre que un registro se utilice como puntero, su nombre aparecer, el en cdigo simblico, encerrado entre parntesis, significando: donde apunta el contenido de.

Tambin se puede utilizar como puntero, una constante de dos bytes, ensamblada a continuacin del cdigo objeto, por ejemplo: LD A, (5C37) Que significa: carga el registro A con el contenido de la direccin de memoria 5C37h. Cuando hagamos esto en Assembler, normalmente utilizaremos una etiqueta de la siguiente forma: LD A, (ETIQUE) ETIQUE EQU #5C37 De esta forma, solo tendremos que definir la etiqueta una vez, pero podremos usarla todas las veces que queramos sin tener que recordar de memoria los nmeros. Los nombres de variables del Sistema en el Spectrum son, precisamente, etiquetas del cdigo fuente del Sistema Operativo. El uso de las etiquetas se ver en profundidad cuando estudiemos el manejo de ensambladores. En algunos casos, el direccionamiento indirecto se utiliza para especificar operandos de 16 bits (dos bytes), en este caso, el puntero apunta al byte de menos peso, siendo el de ms peso el siguiente. Por ejemplo: LD HL, (5C37) Que significa: carga el registro L con el contenido de la posicin de memoria 5C37h, y el registro H con el contenido de la posicin de memoria siguiente (5C38h). DIRECCIONAMIENTO DE BITS Un gran nmero de instrucciones del Z-80 trabajan directamente sobre bits individuales de registros o posiciones de memoria. En este caso, se utiliza uno de los mtodos de direccionamiento anteriores para indicar el registro o posicin de memoria en concreto, y tres bits del cdigo de operacin para indicar a qu bit de ese registro o posicin de memoria nos referimos. MODOS DE DIRECCIONAMIENTO COMBINADOS Muchas instrucciones incluyen ms de un operando, en estos casos, se pueden combinar ms de un modo de direccionamiento dentro de una misma instruccin, por ejemplo:

LD (IX+7), A Que utiliza direccionamiento indexado para el destino y direccionamiento inmediato para la fuente. Significa: carga en la posicin de memoria apuntada por el contenido del registro IX ms 7, el contenido del registro A (acumulador). Instrucciones del Z-80 El Z-80 puede ejecutar un gran nmero de instrucciones, podemos ordenarlas en los siguientes grupos: CARGA E INTERCAMBIO Permiten desplazar datos entre registros, o entre estos y posiciones de memoria. Tambin se puede intercambiar el contenido de dos registros, o el de dos grupos alternativos. ARITMETICAS Y LOGICAS Permiten realizar operaciones aritmticas o lgicas entre el acumulador y un registro o posicin de memoria. Los resultados se almacenan en el acumulador, y los indicadores del registro F se ponen a 1 o a 0 en funcin del resultado de la operacin. BUSQUEDA Y TRANSFERENCIA DE BLOQUES Se trata de las ms poderosas instrucciones del Z-80, es posible transferir todo un bloque de memoria con una sola instruccin; tambin es posible examinar todo un bloque de memoria para buscar un determinado dato de un byte. ROTACION Y DESPLAZAMIENTO Permiten la rotacin bit a bit del dato almacenado en un registro o una posicin de memoria, las rotaciones pueden incluir el indicador de acarreo del registro F. MANIPULACION DE BITS Permiten tratar de forma independiente cada bit de un registro o una posicin de memoria, es posible poner un bit a 1, ponerlo a 0 o examinar si es 1 o 0. SALTO LLAMADA Y RETORNO Permite alterar la secuencia normar del programa para saltar a otro lugar de la memoria oejecutar una subrutina. Tambin es posible retornar desde una subrutina al punto donde se la llam.

ENTRADA Y SALIDA Permiten leer y escribir datos en los ports de entrada/salida, con lo cual se comunica el ordenador con el mundo exterior. CONTROL CPU Se utilizan para controlar el propio funcionamiento del microprocesador, inhibir o habilitar interrupciones, cambiar el modo de interrupcin, detener el funcionamiento del microprocesador, etc. En los captulos posteriores de este curso, se irn viendo detenidamente, una a una, todas las instrucciones de cada uno de estos grupos y la forma de utilizarlas en nuestros programas Antes, en el captulo siguiente, se vern los conceptos bsicos de la programacin en Assembler, y las formas de almacenar y ejecutar nuestros programas en Cdigo Mquina.

Вам также может понравиться