Copy Link
Add to Bookmark
Report
SET 032 0x0F
-[ 0x0F ]--------------------------------------------------------------------
-[ Microprocesador Z80 ]-----------------------------------------------------
-[ by elotro ]-------------------------------------------------------SET-32--
...
..:nnnMMMMMMMMMMMMMMMMnxnnMMMMMn:.
`!?MMMMMMMMMMMMMMMMMMMMMMM*!!"!<<<<<<<<<
!!!!!?!!MMMM**"""<<<<<<<<<<<<<<<<<<<<<<
!!!!!!!!!!<<<< !<<<
!!!!!!!!!!<<<< MICROPROCESADOR !<<<
!!!!!!!!!!!<<< Z80 !<<<
'!!!!!!!!!!<<< !<<<
!!!!!!!!!!<<< por elotro !<<<
!!!!!!!!!!<<< elotro.ar@gmail.com '<<<
!!!!!!!!!!<<< '<<<
!!!!!!!!<<< .x+*<<<
..xnMMMMMMMX!!!!!<<< .:+!"!<<<<<<<<<<<
!?MMMMMMMMMMMMMMH!!!:<<<"!<<<<<<<<<<<<<:xnMMMh.
!!!MMMMMMMMMMMMMMX!!!<<<<<<<<<:xnHMMMMMMMMMMMMMM%
'!!!!?MMMMMMMMMMMMMMXxnHMMMMMMMMMMMMMMM*!"<<<<<<<
!!!!!!MMMMMMMMMMMMMMMMMMMMMMM*""<<<<<<<<<<<<<<<<
!!!!!!!!MMMMMMMMMMMM*!!<<<<<<<<<<<<<<<<<<<<<<<<<
`!!!!!!!!M*"!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.:n.
!!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:xnMMMMMMMMMM.
!!!!!!<<<<<<<<<<<<<<<<<<<<:nHMMMMMMMMMMMMMMMMMMMM.
~!!!!<<<<<<<<<<<<:xnMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.
!!!<<<<:nHMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMx
!<<<!MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM*"<<<~
~!?MMMMMMMMMMMMMMMMMMMMMMMMMMM*!!<<<~
!!MMMMMMMMMMMMMMMMMMMM*"<<<~
!MMMMMMMMMMM*"<<<~~
`!MM*!!<<<~
Si tienes algun problema al entender los diagramas en ASCII, pedirlos en GIF
o el formato que prefieras al mail que sale arriba.
**** **** **** **** **** **** **** ***
* RECOMENDADO VER CON EDIT DE Ms-DOS *
**** **** **** **** **** **** **** ***
INDICE DE CONTENIDOS - Parte I
1 - Introduccion al Z80
1.1 Caracteristicas principales
1.2 Bloques internos del procesador
1.3 Terminales del encapsulado
2 - Registros internos
2.1.1 Registros de uso general
2.2 Diagrama de los registros
2.3 Registros de uso especifico
2.3.1 El registro de estado
4 - Sistema minimo de componentes
5 - Interrupciones en el Z80
5.1 Uso de las interrupciones
6 - Tabla de instrucciones
6.1 Tipos de direccionamientos
7 - Agradecimientos
8 - Bibliografia
INDICE DE CONTENIDOS - Parte II
1 - Tabla de instrucciones LOAD de carga de bits
2 - Tabla de instrucciones de intercambio, transferencia y
busqueda
3 - Tabla de instrucciones aritmeticas y logicas de 8 bits
4 - Tabla de instrucciones de control de CPU
5 - Tabla de instrucciones aritmeticas de 16 bits
6 - Tabla de instrucciones de tratamiento de subrutinas
7 - Tabla de instrucciones de salto
8 - Tabla de instrucciones de entrada/salida
* * * PARTE I * * *
1. Introduccion al Z80
===================
El Z80 es uno de los uP mas importantes dentro de la rama de los 8 bits.
Fabricado por la casa Zilog, fue empleado en muchos ordenadores personales
(y no descarto que alguno ande procesando en algun remoto lugar).
Se encuentra comercializado desde 1976 (30 anios no?) y al igual que el
uP 8085 (intel), el Z80 es tambien similar al 8080 (intel tambien) pero con
mejoras notables.
Como detalle de su fabricacion, diremos que sobre una pastilla monolitica
(chip) estan integrados cerca de 8mil transistores, cerca de 4.500 mas que el
8080, todos ellos asociados para conformar la estructura del uP.
1.1 Caracteristicas principales
===========================
Fue diseniado por la firma Zilog, aunque tambien lo fabricaron otras casas
tales como SGS, MOSTEK, NEC y SHARP.
* Construido en tecnologia MOS canal N con puerta de silicio.
* Es uP de 8 bits en el bus de datos y de 16 en el bus de direcciones para
alcanzar los 64 Kb de espacio de memoria.
* Era un uP rapido (en su tiempo, ahora nos causa risa ver estos numeros,
pero era realmente impresionante su ausencia de bugs, si es que mis datos
son correctos) admitiendo una senial de clock de 2.5 MHz, aunque la version
Z80-A alcanza los 4 MHz.
* El n§ de instrucciones alcanza a las 158, que si te tienen en cuenta los
modos de direccionamiento alcanza a 696.
* Los modos de direccionamiento son: Implicito, immediato, relativo,
directo e indexado.
* Su alimentacion es unica y de solo 5 voltios. (en contra de otros que
requieren alimentacion simetrica, es decir; voltaje positivo, negativo y
masa )
* Admite 2 tipos de interrupciones: INT (enmascarable) y NMI
(no enmascarable)
En cuanto a sus particularidades, el uP Z80 dispone de:
* Entradas y salidas para direccionar haste 256 puertos para perifericos.
* Contador de 7 bits y los circuitos logicos correspondientes para obtener
las funciones de 'refresh' al conectarsele memorias dinamicas (DRAM)
* Dispone de instrucciones adecuadas para la manipulacion a nivel de bit
de registros y memoria.
* Instrucciones de copia y comparacion a nivel de bloque.
1.2 Diagrama de bloques internos del uP Z80
=======================================
En esto que trata de ser un diagrama en ascii, vemos los bloques del Z80.
___
/_ _\ Bus de datos
|_| (8 bits)
.---------.
| Control |
| Bus |
|_________|
___
/ \
| |
.-----------. .-----. __________| |___________ .-----.
| | <=====| (3) | <__________(4)___________>| ALU |
| | |_____| | | |_____|
/|---|\ | | | |
< |(1)| >| (2) | \___/
\|---|/ | | .---------.
| | | (5) |
| | |_________|
| | __
| | =====> Control /__\
|___________| CPU ||
| | | _||_
|+5V GND CLK | \__/
|------------| .-------.
|Alimentacion| | (6) |
|____________| |_______|
__
/__\
||
Bus de direcciones _||_
(8 bits) \__/
Referencias:
""""""""""""
(1) : Bus de las seniales de control
(2) : Decodificador de instrucciones y control de la cpu
(3) : Registro de Instruccion
(4) : Bus de datos interno
(5) : Registros Cpu
(6) : Control del Bus
CLK : Se¤al de clock
1.3 Terminales del encapsulado
==========================
El uP Z80 se encuentra encapsulado en el formato DIP (Dual in line, doble
en linea) de 40 terminales, como la mayoria de los uP de 8 bits.
Las funciones de sus terminales son:
* A0-A15 : Bus de direcciones compuesto de 16 bits para alcanzar 64 Kb de
memoria.
* D0-D7 : Bus de datos, compuesto de 8 bits
* WR : (Memory Write). Cuando este terminal esta a cero el uP indica al
exterior la operacion de escritura.
* RD : (Memory Read). Cuando se hace cero indica la operacion de lectura.
* MREQ : (Memory Request). Cuando se pone en estado bajo, indica al exterior
que la direccion del bus de direcciones es valida para leer o escribir.
* M1 : (Machine Cycle One) por este terminal el uP indica al exterior el
primer tiempo de ejecucion de una instruccion (Ciclo de busqueda)
* HALT : Cuando es cero, indica en que momento se detiene, como
consecuencia de la instruccion HALT de un programa.
* WAIT : Es por donde los perifericos y memorias lentas detienen al uP,
para sincronizarse con el, esto ocurre cuando se lleva a cero.
* RESET : Llevando a cero esta entrada se produce el borrado del contador
del programa, de modo que al retirarse el uP arranca en la direccion 0000.
* RFSH : Es una salida de refresco, cuando se hace cero indica que los 7
bits de menor peso del bus de direcciones contienen la direccion de
refresco para las memorias dinamicas que se pueden conectar al uP.
* IORQ : (Input/Output Request) Cuando esta en estado bajo indica que el
uP no se dirige a la memoria principal, sino a los dispositivos de
entrada/salida.
* INT : (Interrupt Request) Entrada por donde los perifericos hacen la
peticion de interrupcion al uP. Se produce cuando se lleva a cero logico.
* NMI : Entrada de interrupcion no enmascarada. Se activa por flanco,
concretamente con el flanco de bajada de la interrupcion que se aplique
por este terminal. La interrupcion ingresada por este terminal tiene
prioridad total sobre la anterior (INT). Cuando se activa la NMI, el uP
termina la ejecucion de la instruccion en curso e independientemente del
contenido del registro de estado, bifurca a la direccion 0066 en
hexadecimal. Esta direccion es la primera linea en que ha de esta ubicada
la subrutina de tratamiento de la interrupcion.
* BUSRQ : (Bus Request) Entrada por donde se lleva a alta impedancia las
salidas del bus de datos, de direcciones y las salidas de control. El uP
lleva sus buses a alta impedancia despues de ejecutar la instruccion en
curso.
* BUSACK : (Bus Acknowledge) Salida por donde se indica al exterior que el
uP esta desconectado como consecuencia de la instruccion anterior (BUSRQ).
Esto ocurre cuando la salida se hace cero logico.
* CLK : Entrada del reloj, que para este uP es de una sola fase.
* Entradas de alimentacion: Es unica y de 5 voltios que habra de ser
aplicada entre los pines 11 y 29.
_____________________________________
/ | | \
A11 <--- | 1 | | 40 | ---> A10
A12 <--- | 2 \ _____/ 39 | ---> A9
A13 <--- | 3 38 | ---> A8
A14 <--- | 4 37 | ---> A7
A15 <--- | 5 36 | ---> A6
CLK <--- | 6 35 | ---> A5
D4 <--> | 7 34 | ---> A4
D3 <--> | 8 33 | ---> A3
D5 <--> | 9 MMMM MMMM MMMM 32 | ---> A2
D6 <--> | 10 ;; M M M M 31 | ---> A1
+5V o--- | 11 ;; ::: MMMM M M 30 | ---> A0
D2 <--> | 12 ;; M M M M 29 | ---o GND
D7 <--> | 13 MMMM MMMM MMMM 28 | ---> RFSH
D0 <--> | 14 27 | ---> M1
D1 <--> | 15 26 | <--- RESET
INT ---> | 16 25 | <--- BUS RQ
NMI ---> | 17 24 | <--- WAIT
HALT <--- | 18 23 | ---> BUS ACK
MREQ <--- | 19 22 | ---> WR
IORQ <--- | 20 21 | ---> RD
\_____________________________________/
2. Los registros internos del Z 80
===============================
Este uP cuenta con 22 registros disponibles para el usuario. Si se observa
la figura en ascii, se podra apreciar que los de la izquierda estan duplicados
con los de la derecha, es decir que el uP dispone de dos juegos completos de
registros equivalentes.
El programador puede trabajar con uno u otro grupo de registros, pasando de
uno a otro con las correspondientes instrucciones de cambio. Sin embargo, los
registros de uso general que son tres, pueden ser utilizados como registros
de 8 o 16 bits segun lo indique la instruccion aplicada.
2.1.1 Registros de uso general
========================
Son utilizados a voluntad por el propio programador, son los registros
acumuladores denominados A y A'.
Por programa se indica a cual de los dos se desea acceder. Los registros
B, C, D, E, H y L son registros de uso general, a los cuales se accede
mediante la instruccion determinada.
Tambien se dispone de B', C', D', E', H' y L' para el otro banco de
registros. Como ya he dicho, estos registros pueden trabajar en forma de ocho
bits o diesiceis.
Cuando se desea trabajar de esta manera los registros se asocian asi:
B-C, D-E, H-L y B'-C', D'-E' y H'-L'.
2.2 Diagrama de los registros
=========================
RESET WAIT GND +5V
| | | |
v v v v
.-----------------------------------------------------
| .---.-.-PSW.---.-.-. .-.-.-.-PSW.---.-.-. |
MREQ | |S|Z| |AC| |P/O|N|C| |S|Z| |AC| |P/O|N|C| | IORQ
<-------- | |_|_|_|__|_|___|_|_| |_|_|_|__|_|___|_|_| | ------->
| | | | | | | |
DO-D7 | | | | | | À Acarreo | INT
<-------> | | | | | À-- Sustraccion | <-------
| | | | À----- Paridad o rebosamiento |
A0-A15 | | | À----------- 1/2 Acarreo | NMI
--------> | | À--------------- Cero | <-------
| À------------------Signo |
RD | .-----------. .-----------. | BUR RQ
<-------- | | 8 A' | | 8 A' | | <-------
| | 8 H'| 8 L'| | 8 H | 8 L | |
WR | | 8 B'| 8 C'| | 8 B | 8 C | | BUS ACK
<-------- | | 8 D'| 8 E'| | 8 D | 8 E | | ------->
| |_____|_____| |_____|_____| |
CLK | |16 PC| |16 IX| | RFSH
--------> | |16 SP| |16 IY| | ------->
| |_____| |_____| |
M1 | | 8 I | | 8 R | | HALT
<-------- | |_____| |_____| | ------->
\_____________________________________________________/
2.3 Registros de uso especifico en el Z80
=====================================
El Z80 dispone de 4 registros de uso especifico de 16 bits, denominados PC,
SP, IY, IX, y otros dos especificos de ocho bits llamados I y R.
Sus funciones son:
* PC : (Program Counter) Es el registro del contador de programa, es de 16
bits y en el queda anotada la direccion de memoria de la instruccion en
curso. Cuando acaba la ejecucion de esta, PC se incrementa en uno
automaticamente. Cuando el programa presenta una instruccion de salto,
indica la direccion de este para el PC, ejecutandose el salto y
continuandose el programa a partir de esta nueva direccion. Es el cometido
tipico de toda PC.
* SP : (Stack Pointer) Es un registro de 16 bits cuya funcion es la de hacer
de puntero para indicar en que direccion de la RAM esta ubicado el stack d
subrutinas. Este stack esta tratado como una memoria LIFO (Last Input First
Output), que quiere decir que el ultimo dato guardado es el primero en
recuperarse. El uP dispone de dos instrucciones, llamadas PUSH y POP que se
encargan de introducir y sacar datos de este stack.
* IX,IY : Son dos registros indice independientes entre si y de 16 bits cada
uno de ellos. Son usados por el uP como indice para ejecutar operaciones
con direccionamiento indexado.
Este modo de direccionamiento simplifica la confeccion de un programa en
especial cuando se accede a tablas de datos.
- Registro I : Denominado Interrupt Page Adress Register. Es un registro de
ocho bits y puede ser usado donde una llamada indirecta a una posicion de
memoria sea necesaria como consecuencia de una interrupcion.
- Registro R : Denominado Memory Refresh Register. Tambien es de ocho bits
y puede ser usado para acceder a memorias dinamicas. El contenido de este
registro es automaticamente incrementado despues de cada instruccion de
busqueda.
Estos ocho bits pueden salir al exterior por la parte baja del bus de
direcciones para refrescar continuamente la memoria RAM dinamica a donde se
desea acceder.
2.3.1 El registro de estado
=====================
En este uP el registro de estado es de 8 bits, de los cuales solo seis
tienen significado propio.
* Bit 0=C (Carry). Indica cuando existe acarreo en la parte mas alta del
registro acumulador. Es usado en operaciones de adicion y de sustraccion,
asi como en instrucciones de rotacion.
* Bit 6=Z (Zero) Este bit es puesto a uno si la operacion ejecutada tiene
como resultado cero o si ha sido cargado un cero en el acumulador, de lo
contrario sera siempre cero.
* Bit 7=S (Signe) Este bit indica el signo del dato contenido en el
acumulador, se pondra a uno cuando el dato sea negativo, y a cero cuando
sea positivo (un dato es negativo cuando su bit siente es un uno)
* Bit 2=P/O (Parity/Overflow) Indica dos funciones distintas: la paridad
de un resultado entregado en el acumulador cuando ha sido ejecutada una
instruccion logica (Paridad Par=1, Impar=0) y el overflow o desbordamiento
cuando ha ejecutado una operacion aritmetica.
* Bit 4 (H) es el bit que indica el acarreo de medio byte cuando se opera en
BCD. Es decir el acarreo de los cuatro bits de menor peso del byte.
* Bit 1 (N) este bit indica que tipo de instruccion se ha ejecutado: suma
o resta, operando en BCD.
4. Sistema minimo de componentes para el uP Z80
============================================
El sistema minimo de componentes que se han de asociar al microprocesador
para que este funcione, se ve representado en la figura en ASCII.
El uP necesita, como es sabido, de un clock o reloj que se genera
exteriormente al uP, que se le introduce por un solo terminal, el denominado
CLK.
Los buses de datos y direcciones son aplicados en paralelo a todo el
sistema. Este primer bloque ha de estar compuesto por memorias ROM en las que
resida el software especifico de la aplicacion del sistema y cuya direccion
ha de ser de 0000 en adelante. El segundo bloque lo constituye la memoria RAM
necesaria para los diversos usos de lectura y escritura de datos que requiera
el programa.
En el ejemplo del esquema es de tan solo 256 bytes (como?!?!?)
El tercer bloque esta formado por un conjunto de registros dispuestos en
forma de puerto para el acceso a perifericos.
Lo mas interesante y especifico es el bus de control integrado por los
terminales llamados MREQ, RD, WR, IORQ y M1, cuyas funciones ya fueron
presentadas.
MREQ es una senial de permiso de acceso a memoria, por tanto ira conectada a
aquellos bloques cuya funcion sea la de memoria, como lo son la ROM y la RAM.
La senial IORQ permite el acceso a perifericos, por tanto ira conectada a
aquellos circuitos que permitan el acceso a estos, como lo son los PIO
(Periferial Input/Outout)
Estas dos seniales discriminan un cometido de otro: las seniales RD y WR son
las que indican si la operacion es de lectura o escritura, por lo tanto
accederan a la memoria, solo que a la ROM unicamente le hace falta RD, ya que
solo es posible leerla.
Por ultimo, la senial M1, que es una senial de sincronismo, ira conectada a
aquellos circuitos que requieran una estrecha relacion con la propia
ejecucion de la instruccion (recuerda que M1 aparece durante la primera parte
de la ejecucion de una instruccion), como se ve en el sistema propuesto, la
PIO necesita de la M1.
.-----------. Bus de datos
o | D0-D7 |--------------------------------------------------------->
| | | /^\ /^\ /^\
| | | | | |
.|.| * Z80 * | | \_/ \_/
|R|| | .-------------. .-------------. Clk .----------.
|_|| | | ROM | | RAM |---->| PIO | <-> A
|-´ RESET | | 1Kb | | 256*8 | Ú---|CE | <-> B
(C)| | |CE1 A0/A9 CE2|.--|OD | o---|IORQ | Dos puer
| | | |_o____^____o_||.-|R/W | | .-|M1 | tas de 8
-Á-| | | | A10| ||.|CE1 A0/A7 CE2| | | |C/OI B/A| bits
| | | | | ||||______^______| | | |_^______^_|
|(BD)A0/A15 |-----(----o----o--(((-------o-----o--(-(---o------o----->
| | (L) ||| | | A1 A10
| MREQ |-----o-(----------((o----------------(-(----------------o \ C
| RD |-------o----------o(-----------------(-(----------------o | O
| WR |-------------------o-----------------(-(----------------o | N
| IORQ |-------------------------------------o-(----------------o | T
| M1 |---------------------------------------o----------------o | R
| | / O
|_____^_____| L
|
.-----------.
| OSCILADOR |
|___________|
(L) = OR
5. Las interrupciones en el Z80
============================
El microprocesador Z80 tiene dos entradas de interrupcion: la entrada de
interrupcion no enmascarable NMI y la entrada de interrupcion enmascarable
INT.
Cuando se haya producido una NMI, no puede ser desactivada por programa y
sera aceptada siempre que un periferico la solicite. Esta interrupcion sera,
generalmente, reservada para las funciones mas importantes que necesariamente
tengan que ser atendidas en el momento de producirse, tal como un fallo de
alimentacion.
La interrupccion INT puede ser permitida o no, segun las necesidades, por
el programa. Esto permite al programador no preocuparse de las interrupciones
en zonas de su programa que no las requieran. Por supuesto que algun
periferico conectado a INT podra pedir interrupcion en cualquier momento,
pero esta no sera atendida si el programa ha bloqueado la posibilidad de
acceso. La peticion de la interrupcion podra ser atendida siempre que por
programa sea permitida de nuevo.
En el interior del uP existe un biestable denominado IFF que puede ser
alterado por programa usando la instruccion EI (Enable Interrupt) para
ponerlo a 1, permitiendo las interrupciones, y la instruccion DI (Disable
Interrupt), para ponerlo a 0, bloqueando asi la entrada de interrupciones.
5.1 Uso de las interrupciones
=========================
Lo dicho sobre el biestable IFF es solo a nivel de concepto, ya que en
realidad no es un biestable, sino que hay dos en el interior del uP.
Estos son denominados IFFa o IFF1 , que es el que permite o no las
interrupciones; y IFFb o IFF2, que puede ser considerado como una posicion de
almacenamiento temporal del estado de IFFa.
Cuando se produce un reset del uP para iniciar su funcionamiento, estos dos
biestables son tambien puestos a cero y por lo tanto, las interrupciones
seran bloqueadas.
Cuando se ejecuta una instruccion EI, ambos biestables son puestos a uno,
dando paso a las posibles interrupciones. Cuando llega una interrupcion, esta
es atendida poniendo a cero ambos biestables. En este caso los dos funcionan
simultaneamente y requieren ser puestos a uno por programa, tras cada
tratamiento de una nueva interrupcion.
La funcion de IFFb es guardar el contenido de IFFa antes de que sea borrado.
Este juego de biestables permite saber en todo momento que interrupciones se
han ejecutado y si queda alguna pendiente de tratamiento.
6. Tabla de instrucciones del uP Z80
=================================
En la tabla de instrucciones de este uP, los nombres dados en ingles son
representativos y hacen referencia a la operacion que es capaz de cada
instruccion. Las instrucciones son muy similares al assembler que estamos
acostumbrados a tratar.
El detalle de cada instruccion es:
* LD: Load o carga consistente en transferir el dato de un registro a otro
o de una posicion de memoria a un registro.
* PUSH: Transfiere el dato de un registro al stack.
* POP: Es el contrario de PUSH.
* EX: Intercambia datos sin alterarlos de un registro a otro.
* CP: Operacion de comparar.
* ADD: Operacion de suma.
* SUB: Operacion de resta.
* AND: Operacion logica "Y"
* OR: Operacion logica "O"
* XOR: Operacion logica "Or exclusive" ( o exclusivo )
* INC: Incrementar.
* DEC: Decrementar.
* DAA: Operacion en BCD.
* CPL: Operacion de complementacion o inversion.
* NEG: Operacion de complemento a dos.
* CCF: Operacion de complemento del bit carry (acarreo de bit)
* SCF: Pone a uno el bit carry.
* NOP: No operation (no operacion)
* HALT: Detiene el uP.
* DI, EI, IM0, IM1, IM2: Tratamiento de interrupciones.
* RL, RR: Rotacion hacia izquierda o derecha.
* BIT: Operacion de test o comprobacion.
* SET: Operacion de puesta a uno (Saqueadores edicion tecnica???)
* RES: Operacion de puesta a cero.
* JP: Salto.
* JR: Salto relativo.
* DJNZ: Salta si no es cero.
* CALL: Llamada a sub.
* RET: Retorno desde sub.
* IN: Entrada desde periferico
* OUT: Salida hacia periferico
______________________________________________________________________
| Codigo | Nemotecnico | Codigo | Nemotecnico |
|-----------------|-----------------|-----------------|----------------|
| 00 | NOP | 56 | LD D,(HL) |
| 01 yyy | LD BC,data16 | 5 lsss | LD E,reg |
| 02 | LD (BC),A | 5E | LD E,(HL) |
| 03 | INC BC | 6 0sss | LD H,reg |
| 04 | INC B | 66 | LD H,(HL) |
| 05 | DEC B | 6 lsss | LD L,reg |
| 06 yy | LD B,data | 6E | LD L,(HL) |
| 07 | RLCA | 7 0sss | LD (HL),reg |
| 08 | EX AF,AF | 76 | HALT |
| 09 | ADD HL,DC | 7 lsss | LD A,reg |
| 0A | LD A,(BC) | 7E | LD A,(HL) |
| 0B | DEC BC | 8 0rrr | ADD A,reg |
| 0C | INC C | 86 | ADD A,(HL) |
| 0D | DEC C | 8 lrrr | ADC A,reg |
| 0E yy | LD C,data | 8E | ADC A,(HL) |
| 0F | RRCA | 9 0rrr | SUB reg |
| 10 disp2 | DJNZ disp | 96 | SUB (HL) |
| 11 yyyy | LD DE,data16 | 9 lrrr | SBC A,reg |
| 12 | LD (DE),A | 9E | SBC A,(HL) |
| 13 | INC DE | A 0rrr | AND reg |
| 14 | INC D | A6 | AND (HL) |
| 15 | DEC D | A lrrr | XOR reg |
| 16 yy | LD D,data | AE | XOR (HL) |
| 17 | RLA | B 0rrr | OR reg |
| 18 disp2 | JR disp | B6 | OR (HL) |
| 19 | ADD HI,DE | B lrrr | CP reg |
| 1A | LD A,(DE) | BE | CP (HL) |
| 1B | DEC DE | C0 | RET NZ |
| 1C | INC E | C1 | POP BC |
| 1D | DEC E | C2 ppqp | JP NZ,ADDR |
| 1E yy | LD E,data | C3 ppqp | JP ADDR |
| 1F | RRA | C4 ppqp | CALL NZ,ADDR |
| 20 disp2 | JR NZ,disp | C5 | PUSH BC |
| 21 yyyy | LD HI,data16 | C6 yy | ADD A,data |
| 22 ppqq | LD (ADDR),HL | C7 | RST 00H |
| 23 | INC HL | C8 | RET Z |
| 24 | INC H | C9 | RET |
| 25 | DEC H | CA ppqp | JP z,ADDR |
| 26 yy | LD H,data | CB 0 0rrr | RLC reg |
| 27 | DAA | CB 06 | RLC (HL) |
| 28 disp2 | JR Z,disp | CB 0 lrrr | RRC reg |
| 29 | ADD HL,HL | CB 0E | RRC (HL) |
| 2A ppqp | LD HL,(addr) | CB 1 0rrr | RL reg |
| 2B | DEC HL | CB 16 | RL (HL) |
| 2C | INC L | CB 1 lrrr | RR reg |
| 2D | DEC L | CB 1E | RR (HL) |
| 2E | LD L,data | CB 1 0rrr | SLA reg |
| 2F | CPL | CB 26 | SLA (HL) |
| 30 disp2 | JR NC,disp | CB 2 lrrr | SRA reg |
| 31 yyyy | LD SP,data16 | CB 2E | SRA (HL) |
| 32 ppqp | LD (addr),A | CB 3 lrrr | SRL reg |
| 33 | INC SP | CB 3E | SRL (HL) |
| 34 | INC (HL) | CB 01bbbrrr | BIT b,reg |
| 35 | DEC (HL) | CB 01bbb110 | BIT b,(HL) |
| 36 yy | LD (HL),data | CB 10bbbrrr | RES b,reg |
| 37 | SCF | CB 10bbb110 | RES b,(HI) |
| 38 | JR C,disp | CB 11bbbrrr | SET b,reg |
| 39 | ADD HL,SP | CB 11bbb110 | SET b,(HL) |
| 3A ppqp | LD A,(addr) | CC ppqp | CALL Z,addr |
| 3B | DEC SP | CD ppqp | CALL addr |
| 3C | INC A | CE yy | ADC A,data |
| 3D | DEC A | CF | RST 08H |
| 3E yy | LD A,data | D0 | RET NC |
| 3F | CCF | D1 | POP DE |
| 40 0sss | LD B,reg | D2 ppqp | JP NC,addr |
| 46 | LD B,(HL) | D3 yy | OUT (port),A |
| 4 lsss | LD C,reg | D4 ppqp | CALL NC,addr |
| 4E | LD C,(HL) | D5 | PUSH DE |
| 5 0sss | LD D,reg | D6 yy | SUB data |
|_________________|_________________|_________________|________________|
____________________________________________________________________________
| Codigo | Nemotecnico | Codigo | Nemotecnico |
|------------------|------------------|------------------|-------------------|
| D7 | RST 10H | ED 67 | RRD |
| D8 | RET C | ED 6F | RLD |
| D9 | EXX | ED A0 | LDI |
| DA ppqp | JP C,addr | ED A1 | CPI |
| DB yy | IN A,(port) | ED A2 | INI |
| DC ppqp | CALL C,addr | ED A3 | OUTI |
| DD 00xx 9 | ADD IX,pp | ED A8 | LDD |
| DD 21 yyyy | LD IX,data16 | ED A9 | CPD |
| DD 22 ppqp | LD (addr),IX | ED AA | IND |
| DD 23 | INC IX | ED AB | OUTD |
| DD 2A ppqp | LD IX,(addr) | ED B0 | LDIR |
| DD 2B | DEC IX | ED B1 | CPIR |
| DD 34 disp | INC (IX+disp) | ED B2 | INIR |
| DD 35 disp | DEC (IX+disp) | ED B3 | OTIR |
| DD 36 disp yy | LD (IX+disp) | ED B8 | LDDR |
| | ,data | | |
| DD 01ddd110 disp | LD reg,(IX+disp)| ED B9 | CPDR |
| DD 7 0sss disp | LD (IX+disp),reg| ED BA | INDR |
| DD 86 disp | ADD A,(IX+disp)| ED BB | OTDR |
| DD 8E disp | ADC A,(IX+disp)| EE yy | XOR data |
| DD 96 disp | SUB (IX+disp) | EF | RST 28H |
| DD 9E disp | SBC A,(IX+disp)| F0 | RET P |
| DD A6 disp | AND (IX+disp) | F1 | POP AF |
| DD AE disp | XOR (IX+disp) | F2 ppqp | JP P,addr |
| DD B6 disp | OR (IX+disp) | F3 | DI |
| DD BE disp | CP (IX+disp) | F4 ppqp | CALL P,addr |
| DD CB disp 06 | RLC (IX+disp) | F5 | PUSH AF |
| DD CB disp 0E | RRC (IX+disp) | F6 yy | OR data |
| DD CB disp 16 | RL (IX+disp) | F7 | RST 30H |
| DD CB disp 1E | RR (IX+disp) | F8 | RET M |
| DD CB disp 26 | SLA (IX+disp) | F9 | LD SP,HL |
| DD CB disp 2E | SRA (IX+disp) | FA ppqp | JP M,addr |
| DD CB disp 3E | SRL (IX+disp) | FB | EI |
| DD CBdisp01bbb110| BIT b,(IX+disp)| FC ppqp | CALL M,addr |
| DD CBdisp10bbb111| RES b,(IX+disp)| FD 00xx9 | ADD 1Y,rr |
| DD CBdisp11bbb110| SET B,(IX+disp)| FD 21 yyyy | LD 1Y,data 16 |
| DD E1 | POP IX | FD 22 ppqp | LD (addr),1Y |
| DD E3 | EX (SP),IX | FD 23 | INC 1Y |
| DD E5 | PUSH IX | FD 2A ppqp | LD 1Y,(addr) |
| DD E9 | JP (IX) | FD 2B | DEC 1Y |
| DD F9 | LD SP,IX | FD 34 disp | INC (1Y,disp) |
| DD yy | SBC A,data | FD 35 disp | DEC (1Y+disp) |
| DF | RST 18H | FD 36 disp yy | LD (1Y+disp),data|
| E0 | RET PO | FD 01ddd110 disp | LD reg,(1Y+disp) |
| E1 | POP HL | FD 7 0sss disp | LD (1Y+disp),reg |
| E2 ppqp | JP PO,addr | FD 86 disp | ADD A,(1Y+disp) |
| E3 | EX (SP),HL | FD 8E disp | ADC A,(1Y+disp) |
| E4 ppqp | CALL PO,addr | FD 96 disp | SUB (1Y+disp) |
| E5 | PUSH HL | FD 9E disp | SBC A,(1Y+disp) |
| E6 yy | AND data | FD A6 disp | AND (1Y+disp) |
| E7 | RST 20H | FD AE disp | XOR (1Y+disp) |
| E8 | RET PE | FD B6 disp | OR (1Y+disp) |
| E9 | JP (HL) | FD BE disp | CP (1Y+disp) |
| EA ppqp | JP PE,addr | FD CB disp 06 | RLC (1Y+disp) |
| EB | EX DE,HL | FD CB disp 0E | RRC (1Y+disp) |
| EC ppqp | CALL PE,addr | FD CB disp 16 | RL (1Y+disp) |
| ED 01ddd000 | IN reg,(C) | FD CB disp 1E | SRL (1Y+disp) |
| ED 01sss001 | OUT (C),reg | FD CB disp 26 | SRL (1Y+disp) |
| ED 01xx2 | SBC HL,rp | FD CB disp 2E | SRL (1Y+disp) |
| ED 01xx3 ppqp | LD (addr),rp | FD CB disp 3E | SRL (1Y+disp) |
| ED 44 | NEG | FD CBdisp01bbb110| BIT b,(1Y+disp) |
| ED 45 | RETN | FD CBdisp10bbb110| RES b,(1Y+disp) |
| ED 010nn110 | IM m | FD CBdisp11bbb110| SET b,(1Y+disp) |
| ED 47 | LD 1,A | FD E1 | POP 1Y |
| ED 01xx A | ADC HL,rp | FD E5 | EX (SP),1Y |
| ED 01xx B ppqp | LD rp,(addr) | FD E5 | PUSH 1Y |
| ED 4D | RETI | FD E9 | JP (1Y) |
| ED 4F | LD R,A | FD F9 | LD SP,1Y |
| ED 57 | LD A,1 | FE yy | CP data |
| ED ED 5F | LD A,R | FF | RST 38H |
|__________________|__________________|__________________|___________________|
6.1 Tipos de direccionamientos
==========================
El Z80 dispone de los siguientes modos de direccionamiento:
* Inmediato
"""""""""
Es usado en instrucciones de dos bytes, el primero es el de la
instruccion a tratar, y el segundo es el del operando o dato a tratar.
* Inmediato Extendido
"""""""""""""""""""
Es usado en instrucciones de tres bytes, donde el operando ocupa dos de
ellos.
* Relativo
""""""""
Es usado para operar en las proximidades de la instruccion en curso. Esta
relacionado con el contador del programa. Es de dos bytes.
* Extendido
"""""""""
Es usado en instrucciones en que se determina la direccion efectiva.
Es de tres bytes.
* Indexado
""""""""
La direccion efectiva se obtiene sumando el contenido de los registros
indice con el del tercer byte. Es de tres bytes.
* De registros
""""""""""""
Es usado en operaciones de tratamiento de registros.
* Indirecto
"""""""""
La direccion efectiva se encuentra en el lugar de memoria indicado por la
instruccion.
7. Agradecimientos
"""""""""""""""
Al staff de SET, a Madfran que me alento a escribir el articulo.
8. Bibliografia
""""""""""""
1. Biblioteca basica electronica
Ediciones Nueva Lente - ISBN 84-7534-159-4
2. Construya una computadora basada en el Z80
Steve Ciarcia - Ed. McGraw-Hill
3. Z80 Programing & Hardware Manual
Zilog.
*****************************************************************************
********************** PARTE DOS - TABLAS Y MAS TABLAS ********************
*****************************************************************************
Aqui esta la segunda parte de este (aburrido para algunos) articulo y la
mayoria del contenido no ha cambiado. Haciendo alusion a la ezine, esta
parte viene con MUCHA informacion tecnica.
Recomiendo al que pueda (y consiga en algun remoto lugar), conseguir un
Z80 junto con el 'Z80 Programing & Hardware manual', de la misma empresa:
Zilog, y tratar de ensamblar un circuito minimo para ver su funcionamiento
Tambien sirve visitar la pagina de la empresa: www.zilog.com
Aqui encontraras mucha informacion y seguramente sera mas util que la que
tienes aqui, asi que cualquier duda, ya te estas conectando a Inet.
INDICE DE CONTENIDOS - Parte II
1 - Tabla de instrucciones LOAD de carga de bits
2 - Tabla de instrucciones de intercambio, transferencia y
busqueda
3 - Tabla de instrucciones aritmeticas y logicas de 8 bits
4 - Tabla de instrucciones de control de CPU
5 - Tabla de instrucciones aritmeticas de 16 bits
6 - Tabla de instrucciones de tratamiento de subrutinas
7 - Tabla de instrucciones de salto
8 - Tabla de instrucciones de entrada/salida
* * * PARTE II * * *
1. Tabla de instrucciones LOAD de carga de bits
============================================
______________________________________________________________________________
| | Registro de | | |
Nemotec- | Simbolo | estado | Codigo | N§ |Comentarios
nico | de la |_________________| Maquina |Bytes|
| operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
____________|_____________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________
LD r,s | r<-s |# # X # X # # #|01 r s | | 1 |r,s Reg.
LD r,n | r<-n |# # X # X # # #|00 r 110| | 2 |000 B
| | | <-n-> | | |001 C
LD r,(HL) | r<-(HL) |# # X # X # # #|01 r 110| | 1 |010 D
LD r,(IX+d) | r<-(IX+d) |# # X # X # # #|11 011 101| DD | 3 |011 E
| | |01 r 110| | |100 H
| | | <-d-> | | |101 L
LD r,(IY+d) | r<-(IY+d) |# # X # X # # #|11 111 101| FD | 3 |111 A
| | |01 r 110| | |
| | | <-d-> | | |
LD (HL),r | (HL)<-r |# # X # X # # #|01 110 r | | 1 |
LD (IX+d),r | (IX+D)<-r |# # X # X # # #|11 011 101| DD | 3 |
| | |01 110 r | | |
| | | <-d-> | | |
LD (IY+d),r | (IY+d)<-r |# # X # X # # #|11 111 101| FD | 3 |
| | |01 110 r | | |
| | | <-d-> | | |
LD (HL),n | (HL)<-n |# # X # X # # #|00 110 110| 36 | 2 |
| | | <-d-> | | |
LD (IX+d),n | (IX+d)<-n |# # X # X # # #|11 011 101| DD | 4 |
| | |00 110 110| 36 | |
| | | <-d-> | | |
| | | <-n-> | | |
LD (IY+d),n | (IY+d)<-n |# # X # X # # #|11 111 101| FD | 4 |
| | |00 110 110| 36 | |
| | | <-d-> | | |
| | | <-n-> | | |
LD A,(BC) | A<-(BC) |# # X # X # # #|00 001 010| 0A | 1 |
LD A,(DE) | A<-(DE) |# # X # X # # #|00 011 010| 1A | 1 |
LD A,(nn) | A<-(nn) |# # X # X # # #|00 111 010| 3A | 3 |
| | | <-n-> | | |
| | | <-n-> | | |
LD (BC),A | (BC)<-A |# # X # X # # #|00 000 010| 02 | 1 |
LD (DE),A | (DE)<-A |# # X # X # # #|00 010 010| 12 | 1 |
LD (nn),A | (nn)<-A |# # X # X # # #|00 110 010| 32 | 3 |
| | | <-n-> | | |
| | | <-n-> | | |
LD A,I | A<-I | # X # X # # #|11 101 101| ED | 2 |
| | |01 010 111| 57 | |
LD A,R | A<-R | # X # X # # #|11 101 101| ED | 2 |
| | |01 011 111| 5F | |
LD I,A | I<-A |# # X # X # # #|11 101 101| ED | 2 |
| | |01 000 111| 47 | |
LD R,A | R<-A |# # X # X # # #|11 101 101| ED | 2 |
| | |01 001 111| 4F | |
LD dd,nn | dd<-nn |# # X # X # # #|00 dd0 001| | 3 |dd Par
| | | <-n-> | | |00 BC
| | | <-n-> | | |01 DE
LD IX,nn | IX<-nn |# # X # X # # #|11 011 101| DD | 4 |10 HL
| | |00 100 001| 21 | |11 SP
| | | <-n-> | | |
| | | <-n-> | | |
LD IY,nn | IY<-nn |# # X # X # # #|11 111 101| FD | 4 |
| | |00 100 001| 21 | |
| | | <-n-> | | |
| | | <-n-> | | |
LD (HL),nn | H<-(nn+l) |# # X # X # # #|00 101 010| 2A | 3 |
| L<-(nn) | | <-n-> | | |
| | | <-n-> | | |
LD dd,(nn) | ddH<-(nn+l) |# # X # X # # #|11 101 101| ED | 4 |
| ddL<-(nn) | |01 dd1 011| | |
| | | <-n-> | | |
| | | <-n-> | | |
LD IX,(nn) | ixH<-(nn+l) |# # X # X # # #|11 011 101| DD | 4 |
| ixL<-(nn) | |00 101 010| 2A | |
| | | <-n-> | | |
| | | <-n-> | | |
LD IY,(nn) | iyH<-(nn+l) |# # X # X # # #|11 111 101| FD | 4 |
| iyL<-(nn) | |00 101 010| 2A | |
| | | <-n-> | | |
| | | <-n-> | | |
LD (nn),HL | (nn+l)<-H |# # X # X # # #|00 100 010| 22 | 3 |
| (nn)<-L | | <-n-> | | |
| | | <-n-> | | |
LD (nn),dd | (nn+l)<-ddH |# # X # X # # #|11 101 101| ED | 4 |
| (nn)<-ddL | |01 dd0 011| | |
| | | <-n-> | | |
| | | <-n-> | | |
LD (nn),IX | (nn+l)<-ixH |# # X # X # # #|11 011 101| DD | 4 |
| (nn)<-ixL | |00 100 010| 22 | |
| | | <-n-> | | |
| | | <-n-> | | |
LD (nn),IY | (nn+l)<-iyH |# # X # X # # #|11 111 101| FD | 4 |
| (nn)<-iyL | |00 100 010| 22 | |
| | | <-n-> | | |
| | | <-n-> | | |
LD SP,HL | SP<-HL |# # X # X # # #|11 111 001| F9 | 1 |
LD SP,IX | SP<-IX |# # X # X # # #|11 011 101| DD | 2 |
| | |11 111 001| F9 | |
LD SP,IY | SP<-IY |# # X # X # # #|11 111 101| FD | 2 |qq Par
| | |11 111 001| F9 | |00 BC
PUSH qq | (SP2)<-qqL |# # X # X # # #|11 qq0 101| | 1 |01 DE
| (SP1)<-qqH | | <-n-> | | |10 HL
PUSH IX | (SP2)<-ixL |# # X # X # # #|11 011 101| DD | 2 |11 AF
| (SP1)<-ixH | |11 100 101| E5 | |
PUSH IY | (SP2)<-iyL |# # X # X # # #|11 111 101| FD | 2 |
| (SP1)<-iyH | |11 100 101| E5 | |
POP qq | qqH<-(SP+1) |# # X # X # # #|11 qq0 001| | 1 |
| qqL<-(SP) | | <-n-> | | |
POP IX | ixH<-(SP+1) |# # X # X # # #|11 011 101| DD | 2 |
| | |11 100 001| E1 | |
POP IY | |# # X # X # # #|11 111 101| FD | 2 |
| | |11 100 001| E1 | |
____________|_____________|_________________|__________|____|_____|__________
Referencias: r,s: Se refiere a cualquier registro: A, B, C, D, E, H, L
""""""""""""
# : Bit del status no afectado
En el registro de estado, 0 es un bit borrado; y 1
es un bit puesto a este valor.
dd : Se refiere a algun par de registros: BC, DE, HL, SP
qq : Se refiere a los pares de registros AF, BC, DE, HL
BCL: Por ejemplo, se refiere a un registro de ocho bits
del par BC, concretamente en este el L, ya que el
subindice L (low) se refiere al octeto mas bajo, al
contrario que el subindice H (high)
2. Tabla de instrucciones de intercambio, transferencia y busqueda
===============================================================
______________________________________________________________________________
| | Registro de | | |
Nemotec- | Simbolo | estado | Codigo | N§ |Comentarios
nico | de la |_________________| Maquina |Bytes|
| operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
___________|_____________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________
EX DE,HL | DE<->HL |# # X # X # # #|11 101 011 EB | 1 |El banco de
EX AF,AF | AF<->AF |# # X # X # # #|00 001 000 08 | 1 |regs y regs
| | | | |auxiliares
| | | | |se intercam
| | | | |bian.
EXX | BC<->BC' |# # X # X # # #|11 011 001 D9 | 1 |
| DE<->DE' | | | |
| HL<->HL | | | |
| | | | |
EX (SP),HL | H<->(SP+1) |# # X # X # # #|11 100 011 E3 | 1 |
| L<->(SP) | | | |
EX (SP),IX | ixL<->(SP) |# # X # X # # #|11 011 101 DD | 2 |
| ixH<->(SP+1)| |11 100 011 E3 | |
EX (SP),IY | iyL<->(SP) |# # X # X # # #|11 111 101 FD | 2 |
| iyH<->(SP+1)| |11 100 011 E3 | |
| | 1 | | |
LDI | (DE)<-(HL) |# # X 0 X ? 0 #|11 101 101 ED | 2 |Cargar (HL)
| DE<-DE+1 | |10 100 000 A0 | |en (DE) aum
| HL<-HL+1 | | | |enta los
| BC<-BC+1 | | | |punteros
| | | | |decrementa
| | | | |(BC)
| | | | |
LDIR | (DE)<-(HL) |# # X 0 X 0 0 #|11 101 101 ED | 2 |Si BC not 0
| DE<-DE+1 | |10 110 000 B0 | 2 |Si BC=0
| HL<-HL+1 | | | |
| BC<-BC-1) | | | |
| Repeat until| | | |
| BC=0 | 1 | | |
LDD | (DE)<-(HL) |# # X 0 X ? 0 #|11 101 101 ED | 2 |
| DE<-DE-1 | |10 101 000 A8 | |
| HL<-HL-1 | | | |
| BC<-BC-1 | | | |
LDDR | (DE)<-(HL) |# # X 0 X 0 0 #|11 101 101 ED | 2 |Si BC not 0
| DE<-DE-1 | |10 111 000 B8 | 2 |Si BC=0
| HL<-HL-1 | | | |
| BC<-BC-1 | | | |
| Rept until | | | |
| BC=0 | | | |
| A-(HL) | 2 1 | | |
CPI | HL<-HL+1 |? ? X ? X ? 1 #|11 101 101 ED | 2 |
| BC<-BC-1 | |10 100 001 A1 | |
| | 2 1 | | |
CPIR | A-(HL) |? ? X ? X ? 1 #|11 101 101 ED | 2 |Si BC =/ 0
| HL<-HL+1 | | | |y A =/ (HL)
| BC<-BC-1 | | | |
| Rept until | |10 110 001 B1 | 2 |Si BC = 0
| A=HL o | | | |y A = (HL)
| BC=0 | | | |
| | 2 1 | | |
CPD | A-(HL) |? ? X ? X ? 1 #|11 101 101 11 | 2 |
| HL<-HL-1 | |10 101 001 A9 | |
| BC<-BC-1 | | | |
| | 2 1 | | |
CPDR | A-(HL) |? ? X ? X ? 1 #|11 101 101 ED | 2 |Si BC = 0
| HL<\-HL-1 | |10 111 001 B9 | 2 |y A =/ (HL)
| BC<-BC-1 | | | |
| Rept until | | | |
| A=(HL) o | | | |
| BC=0 | | | |
___________|_____________|_________________|_______________|_____|______________
Referencias: & : Une todos los procesos que se realizan en una operacion
""""""""""""
El bit P/V es puesto o 0 si el resultado de BC-1=0, si no;
P/V sera 1.
El bit Z es 1 si A=(HL), si no; Z=0
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
? : El bit queda afectado segun el resultado de la operacion
Repeat o : Indica que se repetira la operacion
rept until hasta que se cumpla con alguna de las
condiciones que la siguen.
3. Tabla de instrucciones aritmeticas y logicas de 8 bits
======================================================
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comenta
Nemotecnico | de la |_________________| Maquina |Bytes| rios
| operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________
ADD A,r | A <- A+r |? ? X ? X V 0 ?|10 000 r | | 1 |r Reg
ADD A,n | A <- A+n |? ? X ? X V 0 ?|11 000 110| | 2 |000 B
| | | <-n<- | | |001 C
| | | | | |010 D
ADD A,(HL) | A <- A+(HL) |? ? X ? X V 0 ?|10 000 110| | 1 |011 E
ADD A,(IX+d) | A <- A+(IX+d) |? ? X ? X V 0 ?|11 011 101| DD | 3 |100 H
| | |10 000 110| | |101 L
| | | <-d<- | | |111 A
ADD A,(IY+d) | A <- A+(IY+d) |? ? X ? X V 0 ?|11 111 101| FD | 3 |
| | |10 000 110| | |
| | | <-d<- | | |
ADC A,s | A <- A+s+CY |? ? X ? X V 0 ?| 001 | | |
SUB s | A <- A-s |? ? X ? X V 1 ?| 010 | | |
SBC A,S | A <- A-s-CY |? ? X ? X V 1 ?| 011 | | |
AND s | A <- A and s |? ? X 1 X P 0 0| 100 | | |
OR s | A <- A or s |? ? X 0 X P 0 0| 110 | | |
XOR s | A <- A (+) s |? ? X 0 X P 0 0| 101 | | |
CP s | A - s |? ? X ? X V 1 ?| 111 | | |
INC r | r <- r+l |? ? X ? X V 0 #|00 r 100| | 1 |
INC (HL) | (HL) <- (HL)+1|? ? X ? X V 0 #|00 110 100| | 1 |
INC (IX+d) | (IX+d) <- |? ? X ? X V 0 #|11 011 101| DD | 3 |
| (IX+d)+1 | |00 110 100| | |
| | | ->d-> | | |
INC (IY+d) | (IY+d) <- |? ? X ? X V 0 #|11 111 101| FD | 3 |
| (IY+d)+1 | |00 110 100| | |
| | | ->d-> | | |
DEC s | s <- s - 1 |? ? X ? X V 1 #| 101| | 1 |
_____________|_______________|_________________|__________|____|_____|________
Referencias: El simbolo V en el bit P/V indica que este bit contiene el
"""""""""""" desbordamiento del resultado de la operacion. De igual forma
el simbolo P indica la paridad V=1, significa desbordamiento.
P=1, significa paridad par. P=0 significa paridad impar
El bit P/V es puesto o 0 si el resultado de BC-1=0, si no;
P/V sera 1.
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
? : El bit queda afectado segun el resultado de la operacion
IFF indica permiso de interupcion
CY indica bit de acarreo
4. Tabla de instrucciones de control de CPU
========================================
* Las aclaraciones se han dejado en ingles, porque al ser un lenguaje tecnico,
se pierde mucho del sentido original al traducirlo.
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comenta
Nemotecnico | de la |_________________| Maquina |Bytes| rios
| operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________
DAA | Converts acc, |? ? X ? X P # ?|00 100 111| 27 | |Ajuste
| content into | | | | |decimal
| packed BCD | | | | |del
| following add | | | | |acumula
| or substract | | | | |dor.
| with packed | | | | |
| BCD operands | | | | |
| _ | | | | |
CPL | A <- A |# # X 1 X # 1 #|00 101 111| 2F | 1 |
| _ | | | | |
NEG | A <- A + 1 |? ? X ? X V 1 ?|11 101 101| ED | 2 |
| | |01 000 100| 44 | |
| __ | | | | |
CCF | CY <- CY |# # X X X # 0 ?|00 111 111| 3F | 1 |Complem
| | | | | | ta el
SCF | CY <- 1 |# # X 0 X # 0 1|00 110 111| 37 | 1 | acum.
NOP | No operation |# # X # X # # #|00 000 000| 00 | 1 |Bit
| | | | | |carry
| | | | | |=1
HALT | Cpu
halted |# # X # X # # #|01 110 111| 76 | 1 |
DI* | IFF <- 0 |# # X # X # # #|11 110 011| F3 | 1 |
EI* | IFF <- 1 |# # X # X # # #|11 111 011| FB | 1 |
IM 0 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 |
| mode 0 | |01 000 110| 46 | |
IM 1 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 |
| mode 1 | |01 010 110| 56 | |
IM 2 | Set interrupt |# # X # X # # #|11 101 101| ED | 2 |
| mode 2 | |01 011 110| 5E | |
_____________|_______________|_________________|__________|____|_____|________
Referencias: El simbolo V en el bit P/V indica que este bit contiene el
"""""""""""" desbordamiento del resultado de la operacion. De igual forma
el simbolo P indica la paridad V=1, significa desbordamiento.
P=1, significa paridad par. P=0 significa paridad impar
El bit P/V es puesto o 0 si el resultado de BC-1=0, si no;
P/V sera 1.
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
? : El bit queda afectado segun el resultado de la operacion
IFF indica permiso de interupcion
CY indica bit de acarreo
5. Tabla de instrucciones aritmeticas de 16 bits
=============================================
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comenta
Nemotecnico | de la |_________________| Maquina |Bytes| rios
| operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_____________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|________
| | | | | |ss Reg
ADD HL,ss | HL <-HL+ss |# # X X X # 0 ?|00 ss1 001| | 1 |00 BC
| | | | | |01 DE
ADC HL,ss | HL <-HL+ss+CY |? ? X X X V 0 ?|11 101 101| ED | 2 |10 HL
| | |01 ss1 010| | |11 SP
| | | | | |
SBC HL,ss | HL <-HL-ss-CY |? ? X X X V 1 ?|11 101 101| ED | 2 |
| | |01 ss0 010| | |
ADD IX,pp | IX <-IX+pp |# # X X X # 0 ?|11 011 101| DD | 2 |pp Reg
| | |00 pp1 001| | |00 BC
| | | | | |01 DE
| | | | | |10 IX
| | | | | |11 SP
ADD IY,rr | IY <-IY,rr |# # X X X # 0 ?|11 111 101| FD | 2 |rr Reg
| | |00 rr1 001| | |00 BC
| | | | | |01 DE
| | | | | |10 IY
| | | | | |11 SP
| | | | | |
INC ss | ss <-ss + 1 |# # X # X # # #|00 ss0 011| | 1 |
INC IX | IX <-IX + 1 |# # X # X # # #|11 011 101| DD | 2 |
| | |00 100 011| 23 | |
INC IY | IY <-IY + 1 |# # X # X # # #|11 111 101| FD | 2 |
| | |00 100 011| 23 | |
DEC ss | ss <-ss - 1 |# # X # X # # #|00 ss1 011| | 1 |
DEC IX | IX <-IX - 1 |# # X # X # # #|11 011 101| DD | 2 |
| | |00 101 011| 2B | |
DEC IY | IY <-IY - 1 |# # X # X # # #|11 111 101| FD | 2 |
| | |00 101 011| 2B | |
_____________|_______________|_________________|__________|____|_____|________
Referencias: El simbolo V en el bit P/V indica que este bit contiene el
"""""""""""" desbordamiento del resultado de la operacion. De igual forma
el simbolo P indica la paridad V=1, significa desbordamiento.
P=1, significa paridad par. P=0 significa paridad impar
El bit P/V es puesto o 0 si el resultado de BC-1=0, si no;
P/V sera 1.
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
? : El bit queda afectado segun el resultado de la operacion
ss : Algun par de registros BC, DE, HL, SP
pp : Algun par de registros BC, DE, IX, SP
rr : Algun par de registros BC, DE, IY, SP
6. Tabla de instrucciones de tratamiento de subrutinas
===================================================
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comentarios
Nemo- | de la |_________________| Maquina |Bytes|
tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_________|________________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________
| | | | | |
CALL nn | (SP-1) <- PCh |# # X # X # # #|11 001 101| CD | 3 |
| (SP-2) <- PCl | | <- n <- | | |
| PC <- nn | | <- n <- | | |
| | | | | |
CALL cc |Si cc es falso, |# # X # X # # #|11 cc 100| | 3 |Si cc falso
,nn |continua, si no | | <- n <- | | |Si cc ver-
|toma CALL nn | | <- n <- | | |dadero
| | | | | 3 |
RET |PCl <- (SP) |# # X # X # # #|11 001 001| C9 | 1 |
|PCh <- (SP+1) | | | | |
| | | | | |
RET cc |Si cc es falso, |# # X # X # # #|11 cc 000| | 1 |Si cc falso
|continua, si no | | | | 1 |Si cc ver-
|toma ret | | | | |dadero
| | | | | |
| | | | | |
| | | | | |
| | | | | |
RETI |Retorno de |# # X # X # # #|11 101 101| ED | 2 |cc Cond
|interupt. | |01 00 101| 4D | |000 NZnot0
| | |11 101 101| ED | |001 Z=0
RETN(1) |Retorno de |# # X # X # # #|01 000 101| 45 | 2 |010 NCnoCY
|interrupt | | | | |011 C CY
|no enmascarable | | | | |100 POpIMP
| | | | | |101 PEpPAR
| | | | | |110 P=+
| | | | | |111 M=-
RST p |(SP-1) <- PCh |# # X # X # # #|11 t 111| | 1 |t P
|(SP-2) <- PCl | | | | |000 00H
|PCh <- 0 | | | | |001 08H
|PCl <- p | | | | |010 10H
| | | | | |011 18H
| | | | | |100 20H
| | | | | |101 28H
| | | | | |110 30H
| | | | | |111 38H
_________|________________|_________________|__________|____|_____|____________
Referencias: NCnoCY : NC no acarreo
""""""""""""
C CY : C acarreo
POpIMP : PO paridad impar
PEpPAR : PE paridad par
P=+ : P signo positivo
M=- : M signo negativo
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
7. Tabla de instrucciones de salto
===============================
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comentarios
Nemo- | de la |_________________| Maquina |Bytes|
tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_________|________________|_|_|_|_|_|___|_|_|__|___|___|____|_____|___________
| | | | | |
JP nn | PC <- nn |# # X # X # # #|11 000 011| C3 | 3 |
| | | <-n<- | | |
| | | <-n<- | | |
JP cc,nn | Si cc verdadero|# # X # X # # #|11 cc 010| | 3 |cc Condcion
| PC <- nn, si no| | <-n<- | | |000 NZnot0
| continua. | | <-n<- | | |001 Z=0
| | | | | |010 NCnoCY
| | | | | |011 C CY
| | | | | |100 POpIMP
| | | | | |101 PEpPAR
| | | | | |110 P=+
JR e | PC <- PC + e |# # X # X # # #|00 011 000| 18 | 2 |111 M=-
| | | <-eú2<- | | |
JR C,e | Si C=0, |# # X # X # # #|00 111 000| 38 | 2 |Segun cond
| continua | | <-eú2<- | | |
| Si C=0, | | | | 2 |Segun cond
| PC <- PC + e | | | | |
JR NC,e | Si C=1, |# # X # X # # #|00 110 000| 30 | 2 |Segun cond
| continua | | <-eú2<- | | |
| Si C=0, | | | | 2 |Segun cond
| PC <- PC + e | | | | |
JR Z,e | Si Z=0 |# # X # X # # #|00 101 000| 28 | 2 |Segun cond
| continua | | <-eú2<- | | |
| Si Z=1, | | | | 2 |Segun cond
| PC <- PC + e | | | | |
JR NZ,e | Si Z=1, |# # X # X # # #|00 100 000| 20 | 2 |Segun cond
| continua | | <-eú2<- | | |
| Si Z=0, | | | | 2 |Segun cond
| PC <- PC + e | | | | |
JP (HL) | PC <- HL |# # X # X # # #|11 101 001| E9 | 1 |
JP (IX) | PC <- IX |# # X # X # # #|11 011 101| DD | 2 |
| | |11 101 001| E9 | |
JP (IY) | PC <- IY |# # X # X # # #|11 111 101| FD | 2 |
| | |11 101 001| E9 | |
DJNZ, E | B <- B-1 |# # X # X # # #|00 010 000| 10 | 2 |Si B=0
| Si B=0, | | <-eú2<- | | |
| continua | | | | |
| Si B not 0, | | | | 2 |Si B not 0
| PC <- PC + e | | | | |
_________|________________|_________________|__________|____|_____|___________
Referencias: NCnoCY : NC no acarreo
""""""""""""
C CY : C acarreo
POpIMP : PO paridad impar
PEpPAR : PE paridad par
P=+ : P signo positivo
M=- : M signo negativo
e : Representa la extension de direccionamiento
relativo, es un signo de complemento a dos y
cubre el rango <-126, 129>
e ú 2 : En codigo maquina produce una direccion de PC,
siendo PC incrementado en 2 antes de la suma de
e.
# : Bit no afectado
0 : Bit borrado
1 : Bit puesto a uno
X : Bit indiferente (0 o 1)
8. Tabla de instrucciones de entrada/salida
========================================
______________________________________________________________________________
| | Registro de | | |
| Simbolo | estado | Codigo | N§ |Comentarios
Nemo- | de la |_________________| Maquina |Bytes|
tecnico | operacion |7|6|5|4|3| 2 |1|0|_______________| |
| |S|Z| |H| |P/V|N|C|76|543|210|HEX | |
_________|_______________|_|_|_|_|_|___|_|_|__|___|___|____|_____|____________
| | | | | |
IN A,(n) | A <- (n) |# # X # X # # #|11 011 011| DB | 2 |n to A0~A7
| | | <- n <- | | |Acc toA8~A15
IN r,(C) | r <- (C) |? ? X ? X P # #|11 101 101| ED | 2 |C to A0~A7
| Si r=110, solo| |01 r 000| | |B to A8~A15
| C se vera afec| | | | |
| tado | | | | |
| | (1) | | | |
INI | (HL) <- (C) |# ? X # X # 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B-1 | |10 100 010| A2 | |B to A8~A15
| HL <- HL + 1 | | | | |
INIR | (HL) <- (C) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 110 010| B2 | |B to A8~A15
| HL <- HL + 1 | | | | |
| repetir hasta | | | | |
| que B=0 | | | | |
| | (1) | | | |
IND | (HL) <- (C) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 101 010| AA | |B to A8~A15
| HL <- HL - 1 | | | | |
INDR | (HL) <- (C) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 111 010| BA | |B to A8~A15
| HL <- HL - 1 | | | | |
| repetir hasta | | | | |
| que B=0 | | | | |
| | | | | |
OUT (n),A| (n) <- A |# # X # X # # #|11 010 011| D3 | 2 |C to A0~A7
| | | | | |B to A8~A15
OUT (C),r| (C) <- r |# # X # X # # #|11 101 101| ED | 2 |C to A0~A7
| | |01 r 001| | |B to A8~A15
| | (1) | | | |
OUTI | (C) <- (HL) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 100 011| A3 | |B to A8~A15
| HL <- HL +1 | | | | |
OTIR | (C) <- (HL) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 100 011| B3 | |B to A8~A15
| HL <- HL + 1 | | | | |
| repetir hasta | | | | |
| que B=0 | | | | |
| | | | | |
| | (1) | | | |
OUTD | (C) <- (HL) |# ? X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 110 011| AB | |B to A8~A15
| HL <- HL - 1 | | | | |
OTDR | (C) <- (HL) |# 1 X X X X 1 #|11 101 101| ED | 2 |C to A0~A7
| B <- B - 1 | |10 111 011| BB | |B to A8~A15
| HL <- HL - | | | | |
| repetir hasta | | | | |
| que B=0 | | | | |
_________|_______________|_________________|__________|____|_____|____________
Espero que hayan disfrutado este articulo, conociendo un poco la historia
de la informatica y del hardware.
Como ya mencione, agradezco a todo SET por publicar este articulo y
a Madfran. Y por ultimo, a vos que leiste el articulo.
Comentarios, criticas o cualquier cosa (si es dinero, mejor :))
elotro.ar@gmail.com