Está en la página 1de 49

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 1

Introduccin a la Organizacin de Computadoras



S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Conjunto de Instrucciones del Procesador Z-80

Introduccin

En este captulo se indican las caractersticas principales del procesador Z-80
de Zilog, y se presentan el conjunto de directivas utilizadas en el proceso de ensamblado
y el conjunto de instrucciones para el lenguaje assembler correspondiente al mismo.


1. Por qu el Procesador Z-80?

Resulta de suma importancia detectar el tipo de arquitectura mnima necesaria
para cada aplicacin. A modo de ejemplo, hacemos notar que no tendra sentido utilizar
un circuito costoso como el de una Silicon Graphics o el de una Intel Pentium III, para
armar un pager tipo Skytel. Ms an, de hacerlo, seguramente duraramos muy poco
tiempo en el empleo.

Como el objetivo de este libro es introducir conceptos bsicos, aplicables no slo
a una PC, se ha elegido un conjunto bsico y pequeo de instrucciones para el manejo
de un lenguaje assembler. Aprendiendo bien su uso ser muy fcil migrar hacia otros
lenguajes ensambladores ms complicados: Si has visto un assembler, los has visto
todos...


2. Arquitectura Bsica de un Sistema de Computacin tipo Z80

Los elementos bsicos son:
Memoria ROM (Read Only Memory)
Memoria RAM (Random Access Memory)
Bus de Datos (bidireccional de 8 bits)
Bus de Direcciones (unidireccional de 16 bits)
Bus de Control
MicroProcesador (CPU): Microcircuito Monoltico de Silicio
Circuitos Auxiliares (no representados en el esquema): amplificadores,
decodificadores, etc.












IN / OUT

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 2

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Hasta ahora la UCP era una caja negra. A continuacin vamos a detallar sus
componentes y la funcionalidad de cada una:

Unidad Aritmtico Lgica (para realizar operaciones)
Unidad de Control (para secuenciar las operaciones que se realizan en el sistema)
Registro Acumulador (pueden ser varios): entrada especial de conexin bidireccional
Banderas (flags): registros de estado que llevan cuenta de las situaciones que se
producen en el interior del microprocesador. Se los suele usar para las instrucciones
condicionales (saltos relativos)
Registros de Uso General: conjunto pequeo de registros de 8 elementos biestables
(metal xido semiconductor) conectados al Bus de Datos. Sirven para manipular datos
a velocidades elevadas (10
-9
seg)
Registros de Direcciones: son registros de 16 bits conectados al Bus de Direcciones,
aunque se cargan a travs del Bus de Datos (con 2 transferencias de 8 bits). Entre
ellos se cuenta con el StackPointer (SP) y el ProgramCounter (PC)



















Una vez cargado el proceso, para ejecutarlo, las operaciones bsicas de un ciclo
de instruccin, sin tener en cuenta las interrupciones, se pueden resumir en:
Tomar la Siguiente Instruccin (indicada en el registro PC)
Decodificar la Instruccin
Ejecutar la Instruccin



Llamamos Arquitectura del Conjunto de Instrucciones de una mquina
(Instruction Set Architecture - ISA) a la coleccin de instrucciones de lenguaje assembler
y unidades funcionales de dicha mquina.

Luego, la implementacin de una determinada Arquitectura es el diseo especfico
de hardware para soportar la interface entre el hardware y el nivel ms bajo del software.





Captulo 7 Conjunto de Instrucciones del Procesador Z-80 3

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Los puntos principales a tener en cuenta para la eleccin de un diseo de
arquitectura del conjunto de instrucciones son:
Tipo de operaciones soportadas (aritmticas, lgicas, punto flotante, etc.)
Tipos de operandos soportados (byte, caracter, palabra, etc)
Tipos de almacenamiento para operandos (stack, acumulador, registros, memoria)
Operandos implcitos vs. operandos explcitos
Modos de direccionamiento


3. Caractersticas del Procesador Z-80

RDM de 2 bytes Direccin mnima = 0000
Direccin mxima = FFFF

RBM de 1 byte 8 bits en cada Transferencia de Memoria



A
0

A
1

.
.
.
.
.
.
A
15







D
7
D
1
D
0



Controles: M1, MREQ, IORQ, RD, WR, RFSH, HALT, WAIT, INT, NM1, RESET,
BUSRQ, BUSAK, CLOCK, GND.


3.1. Registros

Los registros son almacenamientos de acceso rpido que se encuentran en la
CPU. Permiten manipular informacin, sin tener que acceder a la Memoria Principal.

Cuando se comienza a trabajar con un lenguaje assembler es muy importante
saber con qu tipo de registros se cuenta. En Z80 existen tres grupos de registros:
Grupo GR (registros generales)
Grupo GR (sus contenidos no son directamente accesibles, slo pueden ser
utilizados para intercambiarse con los del grupo GR a alta velocidad)
Grupo de Registros Especiales



Memoria
del
Z-80
RBM

R
D
M
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 4

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Registros del Grupo GR:

A: Registro Acumulador (8 bits).
Se utiliza para operaciones aritmticas, lgicas e instrucciones de E/S.

B, C, D, E, H, L: Registros de Uso General para manipular datos de 8 o 16 bits.
Pueden ser tratados en forma individual ( B, C, D, E, H, L ) para 8 bits o aparearse
en tres pares ( BC, DE, HL ) para manipular 16 bits.

F: Registro de Flag (8 bits).
Guarda los bits de estado que indican los resultados de la ejecucin de una
instruccin. Se consulta para controlar el flujo de ejecucin del programa. El
significado de cada uno de sus bits se detalla en el siguiente cuadro:













7 6 5 4 3 2 1 0















Ejemplo:
Si despus de una cierta operacin, el registro F toma el valor 87h

87h = 1 0 0 0 0 1 1 1



S Z H P/V N C

eso quiere decir que se trat de una operacin de sustraccin (N = 1), la cual produjo
resultado negativo (S = 1) , overflow (P/V = 1), acarreo (C = 1) y no hubo half carry
(H = 0) y el resultado no fue nulo (Z = 0)
S

Z
-

H
-

P/V

N
C
Bit de Carry.
Se enciende cuando ocurre
un acarreo (suma) o borrow
(resta) en el bit ms
significativo.Es afectado por
el Acumulador en
operaciones a nivel bit,
como decalaje y rotaciones
Bit de Cero.
Se enciende cuando la
ejecucin de la instruccin
produce resultado cero. En
caso contrario, se apaga
Bit de Signo.
Usado en operaciones de
nmeros con signo. Si est
encendido es interpretado
como negativo
Bit de Half Carry.
Se enciende si ocurre acarreo en los
4 bits menos significativos.
Es usado por DAA para ajustar el
resultado a representacin BCD
Bit de Paridad - Overflow.
Tiene doble propsito. En las operaciones
lgicas se enciende cuando el resultado de la
operacin tiene cantidad par de unos (EVEN),
y se apaga en caso contrario. En las
operaciones complemento a dos se enciende
en caso de oveflow (fuera del rango [-128,
127] o del [-32768, 32767] para operaciones
de 8 bits o 16 bits, respectivamente
Bit Negativo.
Se enciende si la
ultima operacin fue
de sustraccin
(SUB, DEC, CP,
etc) y se apaga si fue
de adicin
(ADD, INC, etc.)
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 5

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Muy Importante

En algunos simuladores para Z-80 se utiliza la siguiente nomenclatura:
M (Minus) para el flag de signo S
I para el flag de Half Carry H
E (Even) para el flag de Paridad-Overflow P/V


Grupo de Registros Especiales:

I: Registro de Interrupcin (8 bits).
Indica el lugar del vector de Interrupcin.

R: Registro Contador Refresh (8 bits).
Los 7 bits menos significativos indican la cantidad de instrucciones ejecutadas
por el procesador. Es incrementado por el procesador en cada fetch.

IX, IY: Registros ndices (16 bits).
Se usan para manipular datos y direcciones. Cuando se usa en direcciones, el
contenido de un desplazamiento especificado en la instruccin es sumado o
restado del registro ndice para calcular la direccin efectiva de un operando.

SP: Registro Stack Pointer (16 bits).
Contiene la direccin del Stack.

PC: Registro Contador de Programa (16 bits).
Contiene la direccin de la prxima instruccin a ejecutar. Es actualizado
automticamente despus de cada fetch.


3.2. Modos de Direccionamiento

Existen distintas formas de indicar cmo acceder a los datos que se quieren
utilizar en las instrucciones. A dichas formas de obtencin del dato se las llama modos de
direccionamiento.

El conjunto de instrucciones del Z80 posee 8 modos de direccionamiento:
F Registro Implcito
F Registro Directo
F Registro Indirecto
F Registro Indexado
F Extendido
F Inmediato
F Relativo
F I/O
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 6

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Registro Implcito

Ciertas instrucciones se aplican automticamente a un registro predeterminado
(que no se puede elegir).

Ejemplo:
Neg

Con esta instruccin se cambia el contenido del registro A por su complemento
en sistema binario complemento a 2. Como se puede observar, en la instruccin no se
indica registro alguno, ya que no existe opcin para elegirlo.



Registro Directo

El cdigo de operacin de la instruccin contiene cul o cules registros estn
implicados en la ejecucin de la instruccin.

Ejemplo:
Add A, B tiene direccionamiento directo en B


Con esta instruccin se suma el contenido del registro A con el contenido del
registro B.


A =

B =





Registro Indirecto

Alguno de los registros de uso general, tomados de a pares (16 bits: BC, DE o
HL), indica la direccin de memoria donde se encuentra el operando.

Ejemplo:
Add A, (HL) tiene direccionamiento registro indirecto en (HL)

Con esta instruccin se suma el contenido del registro A con el contenido de la
zona de memoria almacenada en el registro HL.
02h
03h
Con Add A, B
se suma 03h
con 02h
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 7

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z


A =

HL =


0100h 0101h 0102h . . .
76h FFh ACh .............





Registro Indexado

La direccin del operando en memoria es calculada usando el contenido de uno
de los registros ndice IX o IY ms un desplazamiento de 8 bits con signo que se
especifica en las instruccin.


Ejemplo:

Add A, (IX + 4) tiene direccionamiento registro indexado en (IX+4)


Con esta instruccin se suma el contenido del registro A con el contenido de la
zona de memoria indicada por el contenido del registro IX, previamente aumentado en 4.



A =


IX =



0100h 0101h 0102h 0103h 0104h 0105h . . .
76h FFh ACh 07h 06h 15h ..........






Extendido

La direccin del operando en memoria es especificada por dos bytes contenidos
en la instruccin. La direccin se coloca entre parntesis.

0102h
03h
0100h
03h
+ 4 = 0104h
Con Add A, (HL)
se suma 03h
con ACh
Con Add A, (IX + 4)
se suma 03h
con 06h
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 8

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Ejemplo:

Ld A, (0105h) tiene direccionamiento extendido en (0105h)


Con esta instruccin se carga el registro A con el contenido de la zona de
memoria indicada por el valor entre parntesis.

0100h 0101h 0102h 0103h 0104h 0105h . . .
76h FFh ACh 07h 15h 06h ..........








Inmediato

El operando est contenido en 1 2 bytes de la instruccin.


Ejemplo:
Add A, 05h tiene dir. inmediato en 05h

Con esta instruccin se suma el contenido del registro A directamente con el
valor indicado, en este caso 05h.


A =







Relativo

Se utiliza slo para instrucciones de bifurcacin condicional o incondicional. El
desplazamiento es sumado al registro PC.


I/O

Se utiliza slo para instrucciones de E/S.
06h
Si inicialmente el registro A contiene
el valor 06h, luego de ejecutarse la
instruccin contendr 0Bh

0Bh
Con Ld A, (0105h)
se carga A
con 06h
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 9

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

3.3. Almacenamiento de Bytes

El procesador Z-80 trabaja con almacenamiento Little-Endian.

Cuando se usan datos que ocupan ms de un byte, existen dos opciones en
cuanto al orden en que se colocan dichos bytes en las celdas de memoria
correspondientes al almacenamiento:
Big-Endian(
*
): el byte ms significativo del dato (potencias binarias mayores) hacia la
zona ms baja de memoria
Little-Endian(
*
): el byte menos significativo del dato (potencias binarias menores)
hacia la zona ms baja de memoria


Ejemplo de Big-Endian:



byte 3 byte 2 byte 1 byte 0


1 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 0




0300h 0301h 0302h 0303h 0304h . . .
. . . 11011101 0011011 11001111 00011110 . . .
. . . . . . . . . . . . . . . . . .



Ejemplo de Little-Endian:


byte 3 byte 2 byte 1 byte 0


1 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 0




0300h 0301h 0302h 0303h 0304h . . .
. . . 00011110 11001111 0011011 11011101 . . .
. . . . . . . . . . . . . . . . . .




(*) A modo de informacin, cabe aclarar que la palabara endian proviene de la forma en que se
puede romper un huevo: por su extremo pequeo (little end) o por su extremo mayor (big end).
Para mayores detalles, leer los Viajes de Gulliver
Dato
Memoria
Dato
Memoria
Byte ms significativo
Byte menos significativo
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 10

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Si los datos que ocupan ms de un byte se almacenan y levantan como conjunto,
este tratamiento es transparente para el programador: al almacenarlos se invierten y al
levantarlos se vuelven a invertir, sin notarse cambio alguno.

El problema existe en el almacenamiento Little-Endian cuando un mismo dato que
ocupa varios bytes se manipula indistintamente como un todo o recorriendo los bytes que
lo componen.


Ejemplo de mal acceso:

Sea una arquitectura que utiliza little-endian y enteros que ocupan 32 bits.

Supongamos que se almacena el nmero 5 en el rango 0301h 0304h.


byte 3 byte 2 byte 1 byte 0


0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1




0300h 0301h 0302h 0303h 0304h . . .
. . . 00000101 00000000 00000000 00000000 . . .
. . . . . . . . . . . . . . . . . .


Como se trata de un nmero pequeo cuya representacin no ocupa ms de un
byte, se sabe que los tres bytes de la izquierda estn en cero y slo el de la derecha
contiene al nmero 5. Olvidando que es little-endian, accedemos a la direccin 0304h y
slo tomamos ese byte, creyendo que es el byte menos significativo del nmero Qu
nmero nos llevamos? Obviamente el cero, que no es lo que pretendamos.

Si en cambio levantamos los cuatro bytes como un todo, el sistema vuelve a hacer
la inversin y obtenemos 00000005h, que es realmente el nmero almacenado.



4. Programa Fuente en Assembler Z-80

Un programa en lenguaje ensamblador es una secuencia de lneas.

Cada lnea de un programa fuente en Assembler Z-80 puede tener, en principio, la
siguiente estructura, donde el punto y coma seguido de un comentario es optativo:

instruccinZ80 ; comentario

Para poder hacer referencia a la direccin de memoria en donde se almacena una
instruccin determinada, se le puede colocar adelante de la misma un rtulo (nombre), a
travs del cual se la puede identificar.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 11

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Teniendo en cuenta el uso de rtulos, una lnea de programa Z80 tambin puede
tener la siguiente forma:

rtulo instruccinZ80 ; comentario


Ejemplo:


Xor A ; blanqueo el registro A
Ld B, 5 ; cargo la cantidad de elementos
vuelta: Add A, B ; acumulo los valores de B
dec B
. . . . . . . . . .

jp vuelta


tener rotulada la instruccin Add A,B me sirve para volver a ella



Sabemos que en una arquitectura de Von Newmann se almacenan instrucciones
y datos. Hasta ahora hicimos referencia a las instrucciones, Qu hay acerca de los
datos?

No tendra sentido generar circuitos de mquina para reservar espacio de
memoria para guardar datos o para indicar a partir de qu direccin almacenar un cdigo.
Sin embargo son acciones necesarias dentro de un programa.

Debido a que estas acciones no tienen circuito asociado, no existen las
instrucciones correspondientes en la cartilla, sino que se llevan a cabo a travs de
directivas que se le indican al ensamblador, y como lo indica su nombre, se realizan en
tiempo de ensamblado. Como no son instrucciones de la cartilla no generan cdigo,
razn por la cual se las llama pseudoinstrucciones.
Cuando se trata de directivas para reservar zonas de datos, pueden rotularse, si
es que se desea hacer referencia a la direccin de memoria en la cual se encuentran
dichos datos. En la seccin 4.1.3. se ver en detalle la reserva de espacio para datos.

De acuerdo a todo lo explicado, se tienen otras dos formas de lnea de programa
Z80, con los siguientes formatos:

directivaAlEnsamblador ; comentario


rtulo directivaAlEnsamblador ; comentario


Captulo 7 Conjunto de Instrucciones del Procesador Z-80 12

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Si bien el rtulo es optativo, de estar presente slo puede escribirse en la primera
columna.

Los identificadores (nombres) vlidos que se le pueden dar al rtulo son aquellos
formados por combinacin de los siguientes caracteres, siempre que no se comience
con dgito numrico ni con signo de pregunta:

A, B, C, ... Z
a, b, c, ... z
0, 1, 2, 3, ... 9 (no en primer lugar)
$
.
? (no en primer lugar)
@
_

Muy Importante

Los identificadores de un rtulo o de una constante simblica son sensibles al
contexto (diferencia entre maysculas y minsculas)

Ejemplo:
El identificador START es distinto del identificador Start.
Si dentro de un programa se define el identificador START y luego se lo pretende
usar como Start, el ensamblador indicar que el identificador Start no existe.


Por otra parte puede resultar de suma utilidad hacer referencia a un valor
numrico dentro de un cdigo a travs de un nombre significativo que lo represente. En
este caso la lnea de programa tendra el siguiente formato:

cteSimblica definicionDeConstante ; comentario


El identificador que se puede usar para el nombre de la constante simblica
cumple las mismas condiciones que los identificadores de rtulos.

La directiva al ensamblador para darle nombre a una constante se ver en detalle
en la seccin 4.1.1.

Cabe aclarar que todo identificador seguido de : es definido localmente (slo
reconocido dentro del programa que se escribe), y si est seguido de :: es definido
globalmente (reconocido en otros programas externos).

Aclaracin
La diferencia entre un rtulo y una constante simblica es que el rtulo tiene
asociada una direccin de memoria y la constante simblica slo est asociada al valor
que le sigue.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 13

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z












4.1. Directivas al Ensamblador (Pseudoinstrucciones)

Son acciones que debe realizar el compilador, pero que NO GENERAN CDIGO,
ya que no tienen un circuito de hardware asociado para llevar a cabo la operacin.

As como los cdigos de instruccin son especficos de cada mquina, el formato
de las pseudo-instrucciones se denota para un determinado ensamblador, ya que se trata
de acciones llevadas a cabo por el traductor mismo.


4.1.1. Directivas para la Definicin de Constantes Simblicas

Asignan un nombre simblico a una expresin. La misma puede ser una
constante, una referencia de direccin, otro nombre simblico, un identificador de
segmento, un operando o etiqueta de instruccin. Existen dos formas de hacerlo:

nombre equ expresin

donde expresin puede ser un caracter o una expresin numrica. Esta forma NO
permite la redefinicin del smbolo en otra expresin.


nombre defl expresin

donde expresin puede ser un caracter o una expresin numrica. Esta forma permite la
redefinicin del mismo smbolo.

La pseudo-instruccin equ le indica al ensamblador que debe reemplazar el valor
indicado en cada lugar donde sea usado el nombre del equ a lo largo del cdigo fuente.


Ejemplos:
k equ 1024
pi equ 3.14
NUM equ 30h
letra equ B

doble defl 2
doble defl doble * 2
RTULO
CONSTANTE
SIMBLICA
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 14

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

4.1.2. Definicin de Macros

Una macro es una secuencia de instrucciones y pseudoinstrucciones,
consignadas bajo un nombre. Una vez definida una macro, se puede colocar su nombre
varias veces en el programa fuente, y el ensamblador reemplaza cada aparicin del
nombre de la macro por el conjunto de instrucciones y pseudoinstrucciones a las que
representa. Esta accin del ensamblador se llama macroexpansin.

nombre MACRO listaDeParmetros
. . . . . . . . .
cuerpo de la macro
. . . . . . . . .
endm

Este tema lo veremos en detalle en el captulo 9.


4.1.3. Definicin de Datos

Existen cinco formas diferentes de reservar posiciones de memoria para guardar
variables (que pueden ir cambiando su contenido en tiempo de ejecucin). Alguna de
ellas permiten inicializar con un valor inicial, y otras slo reservar espacio.


v DB (define byte)

nombre db listaDeExpresiones
o bien

nombre defb listaDeExpresiones

donde listaDeExpresiones puede ser una expresin numrica o un string (se guarda el
cdigo ASCII de cada uno de los caracteres que lo integran, cada uno en un byte).

Ejemplo:
MAX db 255, 128
. . . . . . . . . . . . . . . . . . . .
A db a veces


Si el rtulo MAX est en la direccin 3000h y el rtulo A en 300Dh,
obtendremos en memoria el siguiente mapeo:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
300 FF 80 61 20 76
301 65 63 65 73
. . .

a v
e c e s
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 15

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

v DW (define word)

nombre dw listaDeExpresiones
o bien

nombre defw listaDeExpresiones

donde listaDeExpresiones puede ser una expresin numrica o un caracter (cdigo
ASCII) que se almacenar en dos bytes (invertidos !!!)

Ejemplo:
MAX dw 65535, 255, 10

Si el rtulo MAX est en la direccin 3000h obtendremos en memoria el
siguiente mapeo:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
300 FF FF FF 00 0A 00
. . .


255 = 00FFh 10 = 000Ah



v DEFM (define message)

nombre defm expresin

donde expresin puede ser un string, encerrado entre comillas simples o dobles, que
se almacenar en la cantidad necesaria de bytes (longitud del string)

Ejemplo:
MENSAJE defm Buen Dia
. . . . . . . . . . . . . . . . . . . . . . . . . . .
DESPEDIDA defm Adios


Si el rtulo MENSAJE est en la direccin 2013h y el rtulo DESPEDIDA en
3000h, obtendremos en memoria el siguiente mapeo:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
201 42 75 65 6E 20 44 69 61
. . .
300 41 64 69 6F 73
. . .
Notar que A a (difieren sus cdigos ASCII)
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 16

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

v DS (define space)

nombre ds expresin

o bien

nombre defs expresin


donde expresin indica la cantidad de bytes que se reservar.

Ejemplo:
TABULADOR ds 7 + 1

Si el rtulo TAB est en la direccin 3015h el compilador reservar 8 bytes a
partir de dicha direccin, que no necesariamente deben estar en 0, por lo cual nosotros
lo marcamos con una X en el mapeo de memoria:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
301 X X X X X X X X
. . .



v DEFF (define floating point)

nombre deff listaDeExpresiones

donde listaDeExpresiones ser una lista de expresiones numricas y cada nmero
ser almacenado en notacin flotante normalizada IEEE 754 de 32 bits

Ejemplo:

PI deff 3.14

Si el rtulo PI est en la direccin 2000h, obtendremos en memoria el siguiente
mapeo, que representa a 3.14 en IEEE 754:

3.14 = ( 11.0010001111010111000011... )
2
= ( 1. 10010001111010111000011... )
2
* 2
1

s = 0
e = 1 + 127 = 128
f = 10010001111010111000011

IEEE 754 0 10000000 10010001111010111000011

As como al guardar 16 bits intercambia los primeros 8 con los ltimos 8 bits, al
guardar en memoria un bloque de 32 bits (IEEE754) intercambia los primeros 16 con los
ltimos 16 bits, y dentro de cada grupo, intercambia 8 y 8:

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 17

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

IEEE 754 40 48 F5 C3 h


Recordando que Z-80 es little-endian, al cargarlo en memoria se obtendra:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
200 C3 F5 48 40
. . .



4.1.4. Directivas para Control de Ensamblado

end rtulo


Indica que la primera instruccin a ejecutar (no necesariamente la primera
ejecutable) es la que se encuentra en la direccin indicada por rtulo. En un programa
ejecutable debe haber un slo mdulo que indique cul es la primera instruccin a
ejecutar.

Esta informacin es manejada por el Mdulo Cargador de Sistema Operativo.
Como nosotros trabajamos sobre un simulador, no hay tal sistema. Ms an, el Sistema
Operativo somos nosotros!!!!

Por lo tanto, teniendo en cuenta la direccin de memoria del rtulo indicado por la
directiva end, deberemos indicarle al simulador que comience la ejecucin del programa
a partir de dicha direccin.



4.1.5. Directivas para Referencias Externas

Sirven para indicar el tipo de rtulo o constante simblica usados en referencias
externas (fuera de nuestro programa). El uso detallado lo veremos ms adelante.

v Referencias Pblicas

public listaDeIdentificadores

ent listaDeIdentificadores


Indica que pueden ser usados por otros mdulos. Es anlogo a colocar ::
haciendo el rtulo o constante simblica pblica.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 18

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

v Referencias Externas

extern listaDeIdentificadores

external listaDeIdentificadores


Indica que dichos rtulos o constantes simblicas estn definidas en otros
mdulos y es el linkeditor el que debe resolverlas.

Este tema lo veremos en detalle en el captulo 10.



4.1.6. Directivas de Segmento


v Segmento Absoluto

Aseg
Org nnn

donde nnn es una direccin de memoria


Si se declara que el segmento de datos o cdigo es absoluto, por medio de la
directiva Aseg, dicho segmento no podr ser realocado. Se la puede acompaar con la
directiva al compilado Org que permite setear el desplazamiento dentro del segmento
actual. Debe colocarse una direccin mayor o igual que 100h, porque de no indicarse
nada asume que org es 0h y como el Z80 tiene los primeros 100h reservados para los
vectores de interrupcin se cuelga el procesador al pretender darle el control al
programa.

Ejemplo:
Aseg
Org 100h



v Segmentos Reubicables

Cseg

........
Dseg


zona de cdigo
zona de datos
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 19

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

La zona de datos es precedida por la directiva Dseg y la de cdigo por la directiva
Cseg. Existe luego una opcin al linkeditor que permite especificar donde alocar dichos
segmentos (juntos o por separado). Si se estuvieran linkeditando varios cdigos objetos
podra colocarse todo los segmentos de cdigo juntos y los datos en otra zona, en vez de
mezclar cdigos y segmentos entre s.

Este tema lo veremos en detalle en el captulo 10.

Ejemplo:
Cseg
start: ld A, 12h
......
......
Dseg
num: db 5
end start



5. Tipos de Instrucciones en Assembler Z-80

Las instrucciones se pueden agrupar de acuerdo a su formato y a la cantidad de
bytes que involucran en su codificacin:


Formato
Tamao
(bytes)
Ejemplo Cdigo del Ejemplo
1 Add A, B 80

2 Inc IX DD 23

2 Add A, 3 C6 03

3 Add A, (IX + 5) DD 86 05

3 Ld HL, (F052h) 2A 52 F0

4 Ld (IY+05), 02 FD 36 05 02

donde
cod: es el cdigo que identifica a la instruccin (puede ser de 8 de 16 bits)
op: es el valor del operando utilizado en la instruccin (puede ser de 8 de 16 bits)
cod
cod
cod op
cod op
cod op
cod op1 op2
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 20

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

5.1. Listado de Instrucciones en Assembler Z-80

El encabezado de cada tabla responde a las siguientes consignas:

Explica el modo de direccionamiento de los operandos que intervienen
en la instruccin

Indica el formato de la instruccin ( forma de uso para incluirla en un
cdigo fuente)

Indica la cantidad de ciclos de CPU utilizados en la ejecucin de la
instruccin

Indica la cantidad de ciclos de reloj utilizados en la ejecucin de la
instruccin


Muestra el cdigo de operacin (cdigo de mquina) asociado a la
instruccin (y por lo tanto la longitud de la instruccin)

Muestra el estado de los bits del registro F despus de la ejecucin de
la instruccin, segn la siguiente convencin:

si es alterado por la operacin
si no es alterado por la operacin
0 si es apagado por la operacin
1 si es encendido por la operacin
? si es indefinido despus de la operacin




La convencin de codificacin de los registros es la siguiente:

TABLA 1 TABLA 2 TABLA 4 TABLA 6
Registro Cdigo Registro Cdigo Registro Cdigo Flag Significado Cdigo
B 000 BC 00 BC 00 NZ No zero 000
C 001 DE 01 DE 01 Z Zero 001
D 010 HL 10 IX 10 NC No carry 010
E 011 AF 11 SP 11 C Carry 011
H 100 PO
Paridad
impar
100
L 101 TABLA 3 TABLA 5 PE Paridad par 101
- 110 Registro Cdigo Registro Cdigo P Signo mas 110
A 111 BC 00 BC 00 M
Signo
menos
111
DE 01 DE 01
HL 10 IY 10
SP 11 SP 11

+
?
`
6
:
O
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 21

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

5.1.1. Instrucciones Aritmticas

Comenzaremos por las instrucciones ms simples de explicar, las de naturaleza
matemtica. Estas instrucciones sirven para manipular datos en forma aritmtica y
permiten trabajar con datos de 8 y de 16 bits:

Suma (Add)
Suma con acarreo (Adc)
Resta (Sub)
Resta con acarreo (Sbc)
Incremento en 1 (Inc)
Decremento en 1 (Dec)
Complemento a 2 (Neg)
Multiplicacin (Mlt)


Veremos en detalle slo algunas instrucciones, para indicar cmo debe
interpretarse la informacin que presentan. En la cartilla se pueden consultar todas las
instrucciones en detalle.


Add (8 bits)

La suma de 8 bits utiliza el modo de direccionamiento implcito para uno de los
operandos, ya que siempre deja el resultado en el registro acumulador A.

Adems el otro operando que interviene en la suma puede tener diferentes modos
de direccionamiento. La cantidad de bytes que ocupa la instruccin vara justamente
segn el operando en cuestin.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo

A A + r











Add A, r
donde r puede ser
alguno de los
siguientes registros
de 8 bits:
B, C, D, E, H, L, A

2

4

10000 - - -

donde - - -
codifica
alguno de los
registros de 8 bits
con la
convencin de la
tabla 1

















V

0


Para la instruccin Add A, L el cdigo de mquina es 10000 101 85h
Para la instruccin Add A, B el cdigo de mquina es 10000 000 80h
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 22

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z


O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Indirecto

A A + (HL)


Add A, (HL)




cdigo en binario




2

6

10000110


86



cdigo en
hexa
(abreviado)


















V

0



Registro
Indexado

A A + (IX + d)


Add A, (IX + d)

donde d es un
desplazamiento de 8
bits

6

14

11011101
10000110
(d)


DD 86(d)



















V

0



Registro
Indexado

A A + (IY + d)


Add A, (IY + d)

donde d es un
desplazamiento de 8
bits

6

14

11111101
10000110
(d)

FD 86(d)










V

0



Inmediato

A A + v


Add A, v

donde v es un dato
de 8 bits

2

6

11000110
(v)

C6(v)










V

0


Para la instruccin Add A, (HL) el cdigo de mquina es 10000110 86h
ya que NO HAY opcin para elegir registros
Este smbolo indica que el valor final del signo (S),
del estado cero (Z), del carry (C) , del half carry (H)
y del overflow (P) se alteran, pero su valor
depender del resultado de la operacin, que cambia
entre una suma y otra.
El estado del bit N se
setea seguro en 0, ya
que la operacin es de
adicin
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 23

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Add (16 bits)

La suma de 16 bits utiliza el modo de direccionamiento implcito para uno de los
operandos. Slo se pueden hacer sumas entre ciertos pares de registros.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo

HL HL + r

Add HL, r

donde r puede ser
alguno de los
siguientes pares
registros de 16 bits:
BC, DE, HL, SP

5

7

00--1001
donde ---
codifica
alguno de los
pares de
registros de 16
bits con la
convencin de la
tabla 3

9















?



0



Registro
Directo

IX IX + r


Add IX, r

donde r puede ser
alguno de los
siguientes pares
registros de 16 bits:
BC, DE, IX, SP


6

10

11011101
00--1001
donde ---
codifica
alguno de los
pares de
registros de 16
bits de la tabla 4

DD9






?



0



Registro
Directo

IY IY + r


Add IY, r

donde r puede ser
alguno de los
siguientes pares
registros de 16 bits:
BC, DE, IY, SP


6

10

11111101
001001
donde ---
codifica
alguno de los
pares de
registros de 16
bits de la tabla 5

FD9






?



0


Este smbolo indica que los bits de signo (S), del estado
cero (Z) y de overflow (P) NO se alteran, o sea,
mantienen el valor de la ltima operacin que los afect.
Este smbolo indica que el valor final del bit de half carry (H)
no tiene un estado definido. Por lo tanto, despus de realizar esta una instruccin
NO conviene preguntar por el valor de este bit.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 24

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Adc (8 bits)

La suma con carry utiliza el modo de direccionamiento implcito, ya que siempre
deja el resultado en el registro acumulador A.

Adems el otro operando que interviene en la suma puede tener diferentes modos
de direccionamiento. La cantidad de bytes que ocupa la instruccin vara justamente
segn el operando en cuestin.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo

A A + r + c

Adc A, r
donde r puede ser
alguno de los
siguientes registros
de 8 bits:
B, C, D, E, H, L, A

2

4

10001---
donde --- codifica
alguno de los
registros de 8 bits
con la
convencin de la
tabla 1

8














bit
de
V

0



Registro
Indirecto

A A+ (HL) + c


Adc A, (HL)



2

6

10001110


8E









bit
de
V

0



Registro
Indexado

AA+(IX + d) +
c


Adc A, (IX + d)

donde d es un
desplazamiento de 8
bits

6

14

11011101
10001110
(d)

DD 8E(d)










bit
de
V

0



Registro
Indexado

AA+(IY + d) +
c


Adc A, (IY + d)

donde d es un
desplazamiento de 8
bits

6

14

11111101
10001110
(d)

FD 8E(d)










bit
de
V

0



Inmediato

A A + v + c


Adc A, v

donde v es un dato
de 8 bits

2

6

11001110
(v)

CE(v)









bit
de
V

0


Cabe aclarar que en las operaciones del tipo Adc se suma el valor del bit de carry (C)
que qued seteado desde la ltima instruccin que lo alter, independientemente de que
despus de hacer A + r + c, se encienda o no el bit de carry nuevamente. Por lo dems
las instrucciones tipo Adc son como las del tipo Add.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 25

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Adc (16 bits)

La suma con carry de 16 bits utiliza el modo de direccionamiento Implcito. Slo se
pueden hacer sumas entre ciertos pares de registros.

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Directo

HL HL + r + c
Adc HL, r

donde r puede ser
alguno de los
siguientes pares
registros de 16 bits:
BC, DE, HL, SP
6 10 11101101
01--1010
donde ---
codifica
alguno de los
registros de 16
bits con la
convencin de la
tabla 3

EDA






?



bit
de
V

0














Neg

La negacin slo se puede hacer con el registro acumulador A. Representa el
complemento a 2 del acumulador ( aplicar NEG es lo mismo que hacer 0-A)

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Implcito

A - A
Neg


2 6 11101101
01000100

ED 44















1

bit
de
v

1


MUY IMPORTANTE
No hay que inventar instrucciones que NO existen

Notar que en la suma con acarreo no existen las instrucciones con el
registro IX IY que existan en Add:

Adc IX, r
Adc IY, r
Notar que slo se puede operar con el registro A.

Si A contiene el valor 07h = 0000 0111
Al hacer Neg A, se modificar su contenido con 1111 1001 = F9h
Obviamente 07h representa al 7 y F9 representa al 7 decimal.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 26

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Mlt

La multiplicacin aparece en assembler (es una extensin al Z80). Opera slo
con ciertos registros de 16 bits. Multiplica uno de los bytes por el otro byte dejando el
resultado en el registro de 16 bits.

El operando funciona como origen y destino, ya que en el mismo se guarda el
valor modificado.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo


r rh * rl

Mlt r
donde r puede ser
alguno de los
siguientes pares de
registros de 16 bits:
BC, DE, HL, SP

13

17

11101101
01--1100
donde -- codifica
alguno de los
pares de registros
de 16 bits con la
convencin de la
tabla 3

EDC





































Sugerencia

Leer en el Apndoce el resto de las instrucciones aritmticas.

Hay que tener cuidado, porque el resultado de la multiplicacin lo guarda en el
registro de 16 bits.

Si B contiene el valor 05h = 0000 0101 = 5
y C contiene el valor 45h = 0100 0101 = 69

al hacer Mlt BC, se guardar en BC el 345 en binario.

Luego BC contendr 0000 0001 0101 1001 = 01 59h
Habindose perdido los valores iniciales de B y C

Notar que si se vuelven a tomar B y C por separado, se obtiene
B con 01h = 1 y C con 59h = 89

Atencin
Esta instruccin no funciona para nmeros negativos

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 27

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

5.1.2. Instrucciones de Transferencias de Datos


Estas instrucciones sirven para transferir datos de un registro a otro, de registro a
memoria , de memoria a registro, etc.

Ld (para datos de 8 bits)
Ld (para datos de 16 bits)


Ld (8 bits)

Con esta instruccin se pueden cargar datos de 8 bits. Posee un diverso nmero
de variantes segn sea el direccionamiento del operando origen y destino.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo en
fuente y en
destino

r r

Ld r, r

donde r y r son
cualquier registro de
la tabla 1


2

4

01--- ---
los --- primeros
codifican al
registro r y los
otros --- codifican
al registro r ,
segn la tabla 1




































Esta instruccin sirve para llevar informacin de un registro a otro.

Si B contiene el valor 05h = 0000 0101 = 5
y C contiene el valor 45h = 0100 0101 = 69

luego de hacer Ld B, C




quedarn B y C conteniendo el valor 45h = 0100 0101 = 69

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 28

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z


O
+ ?
`
6 :
S Z H
P
V
N C

Extendido para
el destino,
Registro
Implcito para el
fuente

(mn) A














Ld (mn), A

donde mn es un
nmero de 16 bits

5

13

00110010
(n)
(m)

32 (n) (m)


























Registro
Implcito para el
destino,
Extendido para
el fuente

A (mn)










Ld A, (mn)

donde mn es un
nmero de 16 bits

4

12

00111010
(n)
(m)

3A (n) (m)














Cabe aclarar que en caso de transferir datos desde memoria hacia un registro de
16 bits, se toma el valor de la direccin de memoria estipulada y de su siguiente
direccin.


Sugerencia
Recomendamos ver en el Apndice la totalidad de las instrucciones de
transferencia.
Esta instruccin sirve para llevar informacin desde el registro A hacia una zona de
memoria, indicada por mn.

Si A contiene el valor 05h = 0000 0101 = 5

luego de hacer Ld (1050h), A

quedar el valor 05h como contenido de la direccin 1050h de memoria
y A seguir manteniendo su valor

En general, para cada instruccin de tipo Ld existe su inversa

Ld A, (mn) Ld (mn), A
Ld A, (HL) Ld (HL), A
.................. ..................
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 29

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

6. Algunos Ejemplos

Para clarificar el uso de la cartilla de instrucciones de Assembler Z80,
comenzaremos haciendo algunos ejercicios.



z Ejemplo 1:

Sea el siguiente fragmento de programa. Vamos a realizar su traduccin a
lenguaje assembler. Luego lo cargaremos en memoria, a partir de la direccion 3000h y
lo ejecutaremos.

LD H, 0Fh
LD A, 0
ADD A, H
ADD A, 0Eh



Instruccin LD H, 0Fh (cargar H con un valor inmediato)

Buscamos LD H, v entre los LD de 8 bits y NO lo encontramos. Entonces lo
buscamos en forma ms genrica como LD r, v y encontramos:

O
+ ?
`
6 :
S Z H
P
V
N C
Registro Directo
para el destino,
Inmediato para el
fuente
r v
Ld r, v

donde v es un dato
de 8 bits
2 6 00- - -110
(v)

(v)













Como en la tabla 1, el registro H est codificado con 100, el cdigo de la
instruccin LD H, v ser 00100110 v, es decir 26 0F



Instruccin LD A, 0 (cargar A con un valor inmediato)

Es anlogo al caso de la instruccin anterior, tomamos LD r, v. Como en la tabla
1, el registro A est codificado con 111, el cdigo de la instruccin LD A, 0 ser
00111110 00, es decir 3E 00



Instruccin ADD A, H (sumar A con registro H)

Inicialmente buscamos ADD A, H entre los ADD de 8 bits y NO lo
encontramos. Entonces lo buscamos en forma ms genrica como ADD A, r:
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 30

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z


O
+ ?
`
6 :
S Z H
P
V
N C
Registro Directo

A A + r
Add A, r
donde r puede ser
alguno de los
siguientes
registros de 8 bits:
B, C, D, E, H, L, A
2 4 10000---
donde --- codifica
alguno de los
registros de la
tabla 1

8











0



Como en la tabla 1, el registro H est codificado con 100, el cdigo de la
instruccin ADD A, H ser 10000100, es decir 84



Instruccin ADD A, 0Eh (sumar A con un valor inmediato)

Buscamos ADD A, v entre los ADD de 8 bits y encontramos:

O
+* ?
`
6 :
S Z H
P
V
N C
Inmediato

A A + v

Add A, v

donde v es un dato
de 8 bits
2 6 11000110
(v)

C6(v)











0



Entonces, el cdigo de la instruccin ADD A, 0Eh quedar como 11000110 v,
es decir C6 0E


Programa Fuente Cdigo de Mquina Generado









Por lo tanto, teniendo en cuenta que cuando se cargue el programa en
memoria, la primera instruccin traducida debe comenzar en la direccin 3000h, el
estado de la Memoria Principal ser el siguiente:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
300 26 0F 3E 00 84 C6 0E
. . .


Al terminar la ejecucin del programa, el registro H quedar con el valor 0Fh y el
registro A quedar con el valor 1Dh (que es 0F + 0E). La memoria no se altera.

LD H, 0Fh
LD A, 0
ADD A, H
ADD A, 0Eh

26 0F
3E 00
84
C6 0E

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 31

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

z Ejemplo 2:

Sea el siguiente fragmento de programa. Vamos a realizar su traduccin a
lenguaje assembler. Luego lo cargaremos en memoria, a partir de la direccion 3000h y
lo ejecutaremos.

LD HL, 3001h
LD A, 0
ADD A, (HL)



Instruccin LD HL, 3001h

Como se est cargando en HL un valor de 16 bits, buscamos inicialmente la
instruccin LD HL, mn entre los LD de 16 bits pero no existe. Luego lo buscamos en
una forma ms genrica como LD r, mn y hallamos:

O
+ ?
`
6 :
S Z H
P
V
N C
Registro Directo
para el destino,
Inmediato para el
fuente

r mn

Ld r, mn

donde r es alguno de
los registros de la
tabla 3, y mn es un
dato de 16 bits
3 9 00--0001
(n)
(m)


1 (n) (m)













Como en tabla 3, el registro HL se codifica con 10, la instruccin LD HL, 3001h
se codifica como 21 01 30 (notar que m y n se invierten)


Instruccin LD A, 0 (cargar A con un valor inmediato)

Ya hicimos su traduccin en el ejercicio anterior y su codificacin es 3E 00



Instruccin ADD A, (HL)

Buscamos esta instruccin y hallamos:

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Indirecto

A A + (HL)

Add A, (HL)


2 6 10000110


86











0



Captulo 7 Conjunto de Instrucciones del Procesador Z-80 32

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Programa Fuente Cdigo de Mquina Generado







Teniendo en cuenta que cuando se cargue el programa en memoria, la primera
instruccin traducida debe comenzar en la direccin 3000h, el estado de la Memoria
Principal ser el siguiente:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
300 21 01 30 3E 00 86
. . .


Al terminar de ejecutar este programa, el registro A queda con el valor 01 y no
hay modificaciones en la memoria principal, ya que ninguna instruccin intenta escribir en
la misma.




z Ejemplo 3:

Sea el siguiente fragmento de programa. Vamos a realizar su traduccin a
lenguaje assembler. Luego lo cargaremos en memoria, a partir de la direccion 2000h y
lo ejecutaremos.

LD DE, 18
LD (2000h), DE
LD A, (2000h)


Instruccin LD DE, 18

O
+ ?
`
6 :
S Z H
P
V
N C
Registro Directo
para el destino,
Inmediato para el
fuente

r mn

Ld r, mn

Donde r es alguno de
los registros de la
tabla 3, y mn es un
dato de 16 bits
3 9 00--0001
(n)
(m)


1 (n) (m)













Como en tabla 3, el registro DE se codifica con 01 y el nmero 18 se representa
en binario (16 bits) abreviado como 0012h, la instruccin LD DE, 18 se codifica como
11 12 00 (se invierte 00 12)


LD HL, 3001h
LD A, 0
ADD A, (HL)

21 01 30
3E 00
86
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 33

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Instruccin LD (2000h), DE

O
+ ?
`
6 :
S Z H
P
V
N C
Extendido para
el destino,
Registro Directo
para el fuente

(mn) r

Ld (mn), r

donde r es alguno de
los registros de la
tabla 3 (HL), y mn es
un dato de 16 bits
7 19 11101101
01--0011
(n)
(m)

ED3 (n) (m)













Como en tabla 3, el registro DE se codifica 01, la instruccin LD (2000h), DE se
codifica como ED 53 00 20 ( 2000h se invierte)



Instruccin LD A, (2000h)

O
+ ?
`
6 :
S Z H
P
V
N C
Registro Implcito
para el destino,
Extendido para el
fuente

A (mn)

Ld A, (mn)

donde mn es un
nmero de 16 bits
4 12 00111010
(n)
(m)

3A (n) (m)













Finalmente, LD A, (2000h) se codifica como 3A 00 20



Programa Fuente Cdigo de Mquina Generado









Por lo tanto, teniendo en cuenta que cuando se cargue el programa en memoria,
la primera instruccin traducida debe comenzar en la direccin 2000h, tenemos:

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
200 11 12 00 ED 53 00 20 3A 00 20
. . .



LD DE, 18
LD (2000h), DE
LD A, (2000h)

11 12 00
ED 53 00 20
3A 00 20

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 34

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Al ejecutar la primera instruccin queda el registro DE con el valor 0012h. Con la
segunda instruccin se mueve el contenido del registro DE a la direccin de memoria
2000h, queda modificada la memoria de esta forma (el valor 0012h se invierte):

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
200 12 00 00 ED 53 00 20 3A 00 20
. . .


Por ltimo el registro A queda con el valor 12h, ya que slo se levantan 8 bits.


Muy Importante

Recordar que Z-80 es little-endian: Cuando se pasan valores de 16 bits hacia o
desde la Memoria Principal, se invierten el primer grupo de 8 bits con el segundo
grupo.

Por esta razn todas las instrucciones que guardan un valor mn (16 bits) en
memoria lo hacen como nm. En forma coherente, al levantarlo desde la memoria, lo
vuelven a invertir, y as lo toman como mn nuevamente.



7. Escritura de un Programa en Assembler Z-80

A modo de ejemplo, armaremos un pequeo programa utilizando instrucciones y
pseudoinstrucciones de Z-80.

Supongamos que nuestro objetivo es sumar dos nmeros enteros. Los nmeros a
sumar estn inicialmente cargados en zonas de memoria bajo los nombres num1 y
num2. La suma obtenida hay que dejarla en la zona de memoria rotulada como rta. Se
desea adems que el programa sea cargado a partir de la direccin 2000h de memoria
principal. La siguiente es una posible versin del programa:

aseg
org 2000h

com ld A, (num1) ; cargo en A el primer nmero
ld B, A ; y lo paso a B

ld A, (num2) ; cargo en B el segundo nmero

add A, B ; la suma queda en A

ld (rta), A ; descargo en la zona reservada
; para la respuesta la suma

rst 38h ; finaliza el programa
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 35

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

rta ds 1 ; byte reservado para respuesta
num1 db 12 ; primer nmero a sumar
num2 db 12h ; segundo nmero a sumar

end com


A continuacin comentaremos en detalle cada instruccin o pseudoinstruccin:

aseg
org 2000h




com ld A, (num1)

ld B, A

ld A, (num2)


add A, B



ld (rta), A


rst 38h



rta ds 1





num1 db 12





num2 db 12h



end com


Pseudoinstruccin para indicar direccin absoluta
de memoria 2000h
Direccionamiento extendido en la fuente
(se indica la direccin de memoria donde est
el dato a transferir)
Direccionamiento extendido en el destino
(se indica la direccin de memoria hacia donde hay
que hacer la transferencia)
Los datos a sumar ya estn colocados en los registros A y B
(entran a la ALU y sale la suma que se almacena en A)
Instruccin para interrumpir la ejecucin del programa

Pseudoinstruccin para reservar 1 byte sin valor

Pseudoinstruccin para reservar 1 byte con el valor 0Ch
Pseudoinstruccin para reservar 1 byte con el valor 12h
Pseudoinstruccin para indicar que la primera
instruccin a ejecutar debe ser ld A, (num1).
Notar la necesidad de rotularla
Rtulo para identificar la primera instruccin a ejecutar
Rtulo para identificar la zona reservada para la respuesta
Rtulos para identificar los nmeros a sumar
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 36

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Cuando se realice la traduccin de este programa a lenguaje de mquina cada
instruccin ser reemplazada por su cdigo binario (de acuerdo a la cartilla) y cada
pseudoinstruccin producir alguna accin a tomar:

instruccin pseudoinstruccin cdigo mquina accin del traductor
- aseg
org 2000h
- carga el programa a partir de la
direccin 2000h
ld A, (num1) - 3A d2 d1 -
ld B, A - 47 -
ld A, (num2) - 3A d4 d3 -
add A, B - 80 -
ld (rta), A - 32 d6 d5 -
rst 38h - FF -
- ds 1 - reserva 1 byte
- db 12 - reserva 1 byte con 0Ch
- db 12h - reserva 1 byte con 12h
- end com - marca la instruccin rotulada
com para ser la primera
ejecucin

donde:
d1d2 es la direccin de memoria del rtulo num1
d3d4 es la direccin de memoria del rtulo num2
d5d6 es la direccin de memoria del rtulo rta


En el prximo captulo veremos cmo hace el traductor para calcular dichas
direcciones. Por ahora suponemos que ya las conocemos:
d1d2 es 200Dh
d3d4 es 200Eh
d5d6 es 200Ch



Luego, el programa cargado en memoria quedar (todo cdigo de mquina binario
abreviado en hexa):

direccin de num1
direccin de num2
direccin de rta

0 1 2 3 4 5 6 7 8 9 A B C D E F
. . .
200 3A 0D 20 47 3A 0E 20 80 32 0C 20 FF - 0C 12
201
. . .


byte reservado para la respuesta

bytes reservados con datos
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 37

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

8. Ms Instrucciones de Assembler Z-80

Veremos a continuacin instrucciomes para comparar informacin y para decidir
en base a alguna comparacin si seguir con la prxima instruccin o saltar a otra.



8.1. Instrucciones Lgicas

Estas instrucciones sirven para manipular datos en forma lgica (forma booleana):
Conjuncin (And)
Disyuncin (Or)
Suma lgica (Xor)
Complementacin (Cpl)
Comparacin (Cp)


Para operar se compara bit a bit, segn las siguientes tablas:

Tabla del AND Tabla del OR Tabla del XOR

& 1 0
|| 1 0 1 0
1 1 0
1 1 1 1 0 1
0 0 0
0 1 0 0 1 0


Ejemplos
Con D9h & F2h obtenemos D0h:
D9 1101 1001
F2 1111 0010
D9 & F2 1101 0000 D0h


Con D9h || F2h obtenemos FBh:
D9 1101 1001
F2 1111 0010
D9 || F2 1111 1011 FBh


Con D9h F2h obtenemos 2Bh:
D9 1101 1001
F2 1111 0010
D9 F2 0010 1011 2Bh
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 38

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

And

La operacin lgica de conjuncin es de 8 bits y utiliza el modo de
direccionamiento implcito en el destino ya que siempre deja el resultado en el registro
acumulador A. El otro operando que interviene en la conjuncin puede tener diferentes
modos de direccionamiento.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo en
fuente

A A & r

And r
donde r es alguno de
los siguientes
registros de 8 bits: B,
C, D, E, H, L, A

1

4

10100---

donde --- codifica
alguno de los
registros de 8 bits
con la
convencin de la
tabla 1

A









1

1

bit
de
p

0

0



Or

La operacin lgica de disyuncin es de 8 bits y utiliza el modo de
direccionamiento implcito en el destino ya que siempre deja el resultado en el registro
acumulador A. El otro operando que interviene en la disyuncin puede tener diferentes
modos de direccionamiento.

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Directo en
fuente

A A | r

Or r

donde r es alguno de
los siguientes
registros de 8 bits: B,
C, D, E, H, L, A
1 4
10110---

donde --- codifica
alguno de los
registros de 8 bits
de la tabla 1

B










0

1

bit
de
p

0

0
Slo se pueden hacer operaciones lgicas sobre A.

Si A contuviera el valor 05h = 0000 0101
y B contuviera el valor 71h = 0111 0001
despus de hacer And B
A quedara con el valor el valor 0000 0001
Si A contuviera el valor 05h = 0000 0101
y B contuviera el valor 71h = 0111 0001

Despus de hacer Or B
A quedara con el valor el valor 0111 0101 = 75h
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 39

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Xor

La operacin lgica de disyuncin exclusiva es de 8 bits. Utiliza modo de
direccionamiento implcito en el destino (siempre en A). El otro operando que interviene
en la disyuncin exclusiva puede tener diferentes modos de direccionamiento.

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Directo en
fuente

A A r
XOR r

donde r es alguno de
los siguientes
registros de 8 bits: B,
C, D, E, H, L, A
1 4
10101---

donde --- codifica
alguno de los
registros de 8 bits
de la tabla 1

A










0

1

bit
de
p

0

0




Cpl

Realiza una negacin bit a bit del registro acumulador (complemento a 1)

O
+ ?
`
6 :
S Z H
P
V
N C

Registro
Implcito

A A

Cpl


1

3

00101111


2F

















1



1



Si A contuviera el valor 05h = 0000 0101
y B contuviera el valor 71h = 0111 0001

Despus de hacer Xor B
A quedara con el valor el valor 0111 0100 = 74h
Slo se puede hacer complemento a 1 del registro A.


Si A contuviera el valor 05h = 0000 0101
Despus de hacer Cpl
A quedara con el valor el valor 1111 1010 = FAh
Cpl Complemento a 1
(cambia 0 por 1 y visc.)

Neg Complemento a 2
(el valor opuesto)
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 40

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

8.2. Instrucciones para Comparacin de Datos


Cp

Sirve para comparar operandos de 8 bits. Realiza la resta en forma temporaria,
encendiendo todos los flags que correspondan, pero sin almacenarla!!!

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Directo

A r
Cp r

donde r es alguno de
los siguientes
registros de 8 bits: B,
C, D, E, H, L, A
1 4 10111---

donde --- codifica
alguno de los
registros de 8 bits
con la
convencin de la
tabla 1

B









bit
de
v

1


Registro
Indirecto

A - (HL)
Cp (HL)


1 6 10111110

BE










bit
de
v

1


Registro
Indexado



A - (IX + d)
Cp (IX + d)


3 14 11011101
10111110
(d)

DD BE (d)










bit
de
v

1


Registro
Indexado


A - (IY + d)

Cp (IY + d)


3 14 11111101
10111110
(d)

FD BE (d)









bit
de
v

1


Inmediato

A v
Cp v

2 6 11111110
(v)

FE (v)








bit
de
v

1




Tener en cuenta que:
A < B A - B < 0 Se encendera el bit de signo ( S )
A > B A - B > 0 Se apagara el bit de signo ( S )
A = B A - B = 0 Se encendera el bit de cero ( Z )
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 41

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

8.3. Instrucciones de Salto

Cuando un programa ejecutable se ha cargado en memoria y se le ha dado el
control a la UCP, cada vez que se levanta una instruccin para ejecutarla se incrementa
un registro especial llamado Registro de Prxima Instruccin (PC)

PC PC + Long (instruccin decodificada)


Salto Incondicional
Se cambia PC sin testear los Flags


Salto Condicional
Se cambia PC si se verifica cierta condicin en los Flags


Ciclo
Primero se decrementa automticamente el registro B. Luego, si B no se anula (no se
enciende el flag Z) se transfiere el control al desplazamiento indicado en el
direccionamiento relativo. Cuando B se hace 0, se corta el ciclo y se contina con la
secuencia de instrucciones.


Llamada A Subrutinas
Lo veremos en el captulo 10.



Para todas la instrucciones de saltos relativos:

j = rotulo a saltar direccin actual




Aclaracin

Cuando veamos la ejecucin de un programa (UCP), explicaremos el motivo por
el cual hay que restarle 2 a la diferencia j entre el rtulo al cual se salta y la direccin de
la instruccin que contiene el salto
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 42

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

JP Incondicional


Con esta instruccin se puede cortar la secuencia de ejecucin. Existen diversas
instrucciones segn el modo de direccionamiento del operando.

O
+ ?
`
6 :
S Z H
P
V
N C
Inmediato

PCmn

JP mn

donde mn es un
nmero de 16 bits
3 9 C3 (n) (m)


Registro
Indirecto

PCHL
JP (HL)


1 3 E9


Registro
Indexado

PCIX
JP (IX)


2 6 DD E9


Registro
Indexado

PCIY
JP (IY)


2 6 FD E9


Relativo

PCPC + (j
2)
JR rotulo






2 8 18 (j-2)






JP Condicional

Con esta instruccin se puede cortar la secuencia de ejecucin segn est
encendido o apagado alguno de los flags del registro F (carry, zero). Para la codificacin
de las condiciones de la instruccin tipo JP f, mn se usa la siguiente tabla:


f significado valor
NZ Non zero 000
Z Zero 001
NC Non carry 010
C Carry 011
PO Paridad impar 100
PE Paridad par 101
P Signo mas 110
M Signo menos 111
Si tenemos la instruccin JR LUGAR en la direccin 002B
y el rtulo LUGAR se encuentra en la direccin 002F

JR LUGAR se traducir como 18 02
ya que j = 002F 002B = 0004
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 43

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z


O
+ ?
`
6 :
S Z H
P
V
N C
Extendido

si f es TRUE
PCmn
sino
CONTINUAR
JP f, mn

donde f puede ser:
NZ, Z, C, NC, PO,
PE, P, M
(ver Tabla)
3 6
si
F

9
si
T
11---010
(n) (m)

donde --- codifica
segn la tabla













Relativo

si C=0
CONTINUAR
sino
PCPC + (j-2)

JR C, rotulo


2 6
si
C=0

8
si
C=1
38 (j-2)











Relativo

si C=1
CONTINUAR
sino
PCPC + (j-2)

JR NC, rotulo 2 6
si
C=1

8
si
C=0
30 (j-2)











Relativo

si Z=0
CONTINUAR
sino
PCPC + (j-2)

JR Z, rotulo


2 6
si
Z=0

8
si
Z=1
28 (j-2)











Relativo

si Z=1
CONTINUAR
Sino
PCPC + (j-2)

JR NZ, rotulo


2 6
si
Z=1

8
si
Z=0
20 (j-2)
































Si tenemos la instruccin JR Z, LUGAR en la direccin 002B
y el rtulo LUGAR se encuentra en la direccin 002F

JR Z, LUGAR se traducir como 28 02
ya que j = 002F 002B = 0004

En el momento de ejecutarse la instruccin de cdigo 28 02,
se saltar hacia LUGAR en el caso de que se encienda el flag de cero (Z), caso
contrario se seguir con la instruccin que le sigue.
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 44

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

DJNZ (ciclo)

Con esta instruccin se puede repetir un ciclo la cantidad de veces que se cargue
inicialmente en el registro B.

O
+ ?
`
6 :
S Z H
P
V
N C
Registro
Relativo

BB-1

si B=0
CONTINUAR
Sino
PCPC+j


























DJNZ rotulo




5


3
9 si
B=0

7 si
B0
10 (j-2)













LD D, 0
LD B, 3
Vuelta: ADD A, C
INC D
DJNZ Vuelta
LD H, 6

El registro D quedar en 03 ya que por el ciclo rotulado VUELTA se pasar 3
veces (para B = 3, B = 2 y B =1). Cuando B llegue a 0, se seguir con la
instruccin LD H, 6 y ya no se saltar a VUELTA.

JR Z, LUGAR se traducir como 28 02
ya que j = 002F 002B = 0004

En el momento de ejecutarse la instruccin de cdigo 28 02,
se saltar hacia LUGAR en el caso de que se encienda el flag de cero (Z), caso
contrario se seguir con la instruccin que le sigue
Captulo 7 Conjunto de Instrucciones del Procesador Z-80 45

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

8.4. Instrucciones de Manipulacin de Bits


Estas instrucciones sirven para trabajar con datos a nivel bit y permiten:
t DECALAJES ( corrimientos a derecha e izquierda )
t ROTACIONES ( corrimientos circulares )
t SETEOS ( encendido o apagado de bits )

Existe una gran variedad de instrucciones de corrimiento y seteo de bits dentro de
un registro o de un byte de memoria. A continuacin slo mostraremos unas pocas
representantes, con el objetivo de explicar su funcionamiento.


Seteo de Bits

Permite setear o apagar bits dentro del operando

O
+
?
`
6 :
S Z H
P
V
N C

Registro Directo
para r y Dir. a bit
para b

bit b de r 1


Set b, r

donde b es la
posicin del bit
dentro del registro
y r puede ser alguno
de los siguientes
registros de 8 bits:
A, B, C, D, E, H, L


3

7

11001011
11--- ---

donde las primeras
--- codifican a b y
las segundas al
registro segn la
tabla 1

CB














Registro Directo
para r y
Dir. a bit para b


bit b de r 0


Res b, r

donde b es la
posicin del bit
dentro del registro y r
puede ser alguno de
los siguientes
registros de 8 bits:
A, B, C, D, E, H, L


3

7

11001011
10--- ---

donde las primeras
--- codifican a b y
las segundas al
registro segn la
tabla 1

CB























Sea el registro H con el valor 3E = 00111110

Si se ejecutara Set 6, H quedara con el valor 7E = 01111110
ya que se enciende (se setea en 1) el sptimo bit.

Si se ejecutara Res 2, H quedara con el valor 3A = 00111010
ya que se apagara (se setea en 0) el tercer bit.

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 46

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Shift (Decalaje)

Permiten reubicar los bits movindolos hacia izquierda o derecha.

O
+
?
`
6 :
S Z H
P
V
N C

Registro Directo
para fuente y
destino





SLA r

donde r puede ser
alguno de los
siguientes registros
de 8 bits:
A,B, C, D, E, H, L


3

7

11001011
00100---

donde --- codifica
al registro segn la
tabla 1

CB 2











0



P

0



Registro Directo
para fuente y
destino


SRL r

donde r puede ser
alguno de los
siguientes registros
de 8 bits:
A, B, C, D, E, H, L


3

7

11001011
00111---

donde --- codifica
al registro segn la
tabla 1


CB 3











0



P

0



Registro Directo
para fuente y
destino





SRA r

donde r puede ser
alguno de los
siguientes registros
de 8 bits:
A, B, C, D, E, H, L


3

7

11001011
00101---

donde --- codifica
al registro segn la
tabla 1

CB 2













0



P

0


Carry

0

Carry

0
Carry


Captulo 7 Conjunto de Instrucciones del Procesador Z-80 47

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Rotacin

Permiten un efecto parecido al anterior reubicar los bits movindolos dentro del
operando, pero realizando un tratamiento circular de los mismos.

O
+
?
`
6 :
S Z H
P
V
N C

Registro Directo
para fuente y
destino




RL r

donde r puede ser
alguno de los
siguientes registros
de 8 bits:
A, B, C, D, E, H, L


1

3

11001011
00010---

donde --- codifica
al registro segn la
tabla 1


CB 1














0



P

0



Registro Directo
Para fuente y
destino



RR r

donde r puede ser
alguno de los
siguientes registros
de 8 bits:
A, B, C, D, E, H, L


3

7

11001011
00011---

donde --- codifica
al registro segn la
tabla 1


CB 1













0



P

0





Sugerencia

Recomendamos leer en el Apndice todas las opciones de decalajes, rotaciones y
seteos de bits, tanto para registros como para bytes de memoria.
Carry


Carry


Captulo 7 Conjunto de Instrucciones del Procesador Z-80 48

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

8.4.1. Decalajes como Operaciones Aritmticas

De todas las operaciones de decalaje hay dos en particular sirven para aplicar
operaciones de multiplicacin y divisin en forma rpida, siempre que el factor sea 2:
v SLA sirve para multiplicar un nmero por 2 a alta velocidad, pero hay que tener
cuidado poruqe puede perderse el signo !!!
v SRA sirve para obtener la divisin entera de un nmero por 2 a alta velocidad



Ejemplo 1:

ld E, 0D1h
sla E


El registro E tiene inicialmente el valor 11010001 = -47 y despus del shifteo a
izquierda queda con el valor 10100010 = -94 (y se enciende el bit de carry)

Todo est O.K. si se lo toma como producto decimal !



Ejemplo 2:

ld E, 21h
sla E


El registro E tiene inicialmente el valor 00100001 = 33 y despus del shifteo a
izquierda queda con el valor 01000010 = 66 (y se apaga el bit de carry)

Todo est O.K. si se lo toma como producto decimal !



Ejemplo 3:

ld E, 51h
sla E

El registro E tiene inicialmente el valor 01010001 = 81 y despus del shifteo a
izquierda queda con el valor 10100010 = -94 (y se apaga el bit de carry)

Se comete un ERROR si se lo toma como producto decimal !

Captulo 7 Conjunto de Instrucciones del Procesador Z-80 49

Introduccin a la Organizacin de Computadoras

S
i
l
v
i
a

A
l
i
c
i
a

G

m
e
z

&

L
e
t
i
c
i
a

I
r
e
n
e

G

m
e
z

Ejemplo 4:

ld E, 20h
sra E

El registro E tiene inicialmente el valor 00100000 = 32 y despus del shifteo a
derecha queda con el valor 00010000 = 16 (y se apaga el bit de carry)

Todo est O.K. si se lo toma como divisin entera decimal !



Ejemplo 5:

ld E, 0D0h
sra E

El registro E tiene inicialmente el valor 11010000 = -48 y despus del shifteo a
derecha queda con el valor 11101000 = -24 (y se apaga el bit de carry)

Todo est O.K. si se lo toma como divisin entera decimal !



Ejemplo 6:

ld H, 32
sra H
sra H
sra H


Obviamente aplicando varios shifteos uno a continuacin de otro, permite
multiplicar o dividir por cualquier nmero que sea potencia de 2. En este cdigo se divide
el contenido del registro H por 8 (cada sra lo divide por 2).

También podría gustarte