Está en la página 1de 51

Ensamblador para 8085 1

5
Ensamblador para 8085
5.1
.
Introducci
n
Si examinamos el contenido de la memoria de un computador, un programa aparece
como una serie de dgitos hexadecimales indistinguibles unos de otros. El procesador o
CPU interpreta estos dgitos como cdigos de instruccin, direcciones o datos.
Sera posible escribir un programa en esta forma, pero resultara un proceso
lento y costoso. Por ejemplo, el siguiente programa se almacena en la memoria como se
muestra
repite: MOV A,M
CPI 0h
JNZ fin
MVI M, FFh
INX H
JMP repite
fin: HLT
0100
0101
0104
0107
0109
010A
010
7!h
F!h 00h
C"h 0h 01h
#$h FFh
"#h
C#h 00h 01h
7$h
El byte !E es interpretado por el procesador como el cdigo de la instruccin
"#$ de transferencia de memoria %indicada por &'( al registro ).
'os bytes *E ++ se corresponden con el cdigo de la instruccin de
comparacin CP,, del acumulador con el dato inmediato ++h.
'os bytes C- +. +/ indican una instruccin de salto condicional a la
direccin +/+.h.
'os bytes 01 ** reali2an la transferencia de ** a la memoria.
El byte -0 indica 3ue el par de registros &' debe incrementarse como si
fueran un registro de /1 bits.
'os bytes C0 ++ +/ indican un salto incondicional a la direccin /+++h.
El byte !1 es la instruccin &)'4 o parada del procesador.
2 Simulador del microprocesador 8085
El texto de i23uierda es un programa escrito en ensamblador, mientras 3ue el de
la derecha es un 5olcado directo de la memoria. 'as diferencias entre ambos son ob5ias
en cuanto a t6rminos de legibilidad.
El programa anterior reali2a una tarea muy sencilla. Utili2ando el par de
registros &' como direccin de memoria carga el contenido en el acumulador. Si el
contenido es diferente de ++ termina, si no, cambia el contenido por **h y continua por
la siguiente direccin. ,ncluso en un programa tan simple 5emos lo costoso 3ue puede
ser trabajar directamente sobre la memoria.
Sin embargo, existe un problema a7adido. Supongamos 3ue deseamos introducir
una instruccin m8s al programa propuesto. Por ejemplo, supongamos 3ue 3uiere
especificar una direccin inicial de memoria en &'. Esto se puede hacer con la
secuencia de dgitos hexadecimales -/ '' &&, donde '' representa la parte baja de la
direccin de memoria y && la alta.
LXI H,A000h
repite: MOV A,M
CPI 0h
JNZ fin
MVI M, FFh
INX H
JMP repite
fin: HLT
0100
010#
0104
0107
010A
010C
010
0110
21h 00h A0h
7!h
F!h 00h
C2h 10h 01h
#$h FFh
"#h
C3h 03h 01h
7$h
En negrita se han marcado los cambios sobre el programa original. Como
5emos, en la memoria la introduccin de una nue5a instruccin da lugar a efectos
laterales 3ue obligan a modificar otras del programa. El riesgo de cometer un fallo es
mayor.
'a ilegibilidad del programa agra5a el riego de error si se intentan a7adirse m8s
instrucciones y efectuar m8s cambios.
Para e5itar esta forma engorrosa y tediosa de trabajar, sobre todo en programas
de cierta complejidad, el primer paso est8 en utili2ar el lenguaje ensamblador, 3ue
Ensamblador para 8085 3
proporciona una notacin de las instrucciones completamente legible, y e5ita al
programador tener 3ue referirse a direcciones de memoria especficas.
El lenguaje ensamblador es, en sntesis, una secuencia de instrucciones 3ue se
con5ierten a un cdigo hexadecimal ejecutable por la m83uina a tra56s de un programa
llamado Ensamblador.
Fichero
Fuente
Fichero
Objeto
Ensamblador
Programa
Fuente
Programa
Objeto
El Ensamblador con5ierte el programa fuente, escrito en lenguaje ensamblador,
en su e3ui5alente en hexadecimal, denominado programa objeto. El programa objeto es
muy similar a la representacin en memoria 3ue tendr8 el programa.
4 Simulador del microprocesador 8085
5.2
.
Sintaxi
s
En un programa ensamblador se distinguir8 los siguientes tipos de elementos
.irecti5as, ,nstrucciones de ensamblaje e ,nstrucciones de la ma3uina.
DIRECTIVAS:
'as .irecti5as ofrecen informacin al ensamblador sobre el tipo de elementos
3ue se 5a a encontrar a continuacin y la direccin de memoria donde debe disponerlos
%si corresponde(. Se caracteri2an por ir precedidas por un punto.
.Directiva <Direccin deMemoria> [Comentario]
Figura 5.1. Estructura de una Directiva.
.isponemos de tres directi5as distintas. Estas directi5as nos permiten hacer definiciones
%define(, introducir datos %data( e introducir instrucciones %org(. Cada directi5a declara,
por tanto, un blo3ue dentro del programa.
Definiciones
Datos
Programa
Datos
Programa
Definiciones

Definiciones
Datos
Programa
Datos
Programa
Definiciones
Ensamblador para 8085 5
Figura 5.2. Organizacin Aleatoria de Bloques.
'a disposicin de blo3ues dentro del programa ensamblador no esta sujeta a
ning9n tipo de restriccin inicial. )dem8s, es posible declarar 5arios blo3ues de un
mismo tipo.
,gualmente, ning9n blo3ue es imprescindible. Se pueden construir programas sin
declaraciones, datos e, incluso, instrucciones. )un3ue esto ultimo pare2ca poco
ra2onable nos puede llegar a ser 9til si se 3uiere 9nicamente introducir datos en la
memoria para usarlos con otro programa. En ultimo extremo podremos construir un
programa 5aco, 3ue ser8 ensamblado como un programa 5aco.
:eneralmente, la forma m8s usual de un programa ser8 la siguiente
Definiciones
Datos
Programa
Figura 5.3. Organizacin Usual de Bloques.
INSTRUCCIONES DE ENSAMBLAJE:
Son un tipo de instrucciones especiales 3ue 9nicamente se tienen en cuenta en el
proceso de ensamblaje del programa, pero 3ue realmente no tienen ejecucin dentro de
la ma3uina, esto es, una 5e2 terminado a3uel proceso.
La distribucin usual por bloques es obligatoria?
;o, puede organi2ar las directi5as a su gusto. 'a distribucin usual es la recomendada. 'a
distribucin representada en la figura anterior se obtiene empleando las directi5as por este
orden .E*,;E, .)4) y por 9ltimo #<:.
6 Simulador del microprocesador 8085
'as instrucciones de ensamblaje se emplean 9nicamente en el proceso de
ensamblaje. .e esta forma, no tienen una aparicin explicita dentro del cdigo objeto,
sin embargo si aparecen de forma implcita.
'as instrucciones de ensamblaje difieren seg9n el blo3ue, o directi5a
pre5iamente declarada, en la 3ue estemos. Por ello, 5eremos cada una de ellas dentro de
su 8mbito correspondiente. Por ahora solo diremos 3ue hay de dos clases, una para
hacer definiciones y otra para declarar datos.
INSTRUCCIONES DE LA MAQUINA:
) diferencia de las anteriores, las instrucciones de la ma3uina, o simplemente
instrucciones, =corren> o se ejecutan en la ma3uina. Cada instruccin tiene su
correspondiente operacin en la ma3uina.
'as instrucciones se introducen tras la directi5a =.org>, o lo 3ue es lo mismo,
cuando se declara un blo3ue de programa. "8s adelante 5eremos con m8s detalle la
sintaxis dentro de este blo3ue, a3u solo haremos una pe3ue7a introduccin.
?8sicamente, el ensamblador reali2a una traduccin entre un nemot6cnico con
unos operadores a un n9mero. Cada nemot6cnico representa una operacin y se
denominan as por3ue este permite acordarnos f8cilmente de lo 3ue reali2a la operacin
correspondiente
Mov M
nemot!cnico O"erandos
01
, A
110 111
#odo" O"erandos
,nstruccin "o5er el )cumulador a la "emoria
Ensamblador para 8085 7
En este caso el ensamblador con5ierte de forma autom8tica la expresin =%&'
M, A> a 7(h.
<ealmente, el ensamblador permite complicar todo esto mucho m8s facilitando
el trabajo al programador. Como ya dijimos, esto lo 5eremos m8s adelante.
5.2.1
.
Sintaxis de las Definiciones
El objeti5o de una definicin es, simplemente, poner un nombre a un n9mero. .urante
el ensamblaje, cada 5e2 3ue nos encontremos con un operando 3ue contiene el nombre
este ser8 sustituido de forma autom8tica por el 5alor correspondiente con el 3ue se ha
definido.
"8s adelante, si es necesario alterar este n9mero por alguna ra2n, 9nicamente
se tendr8 3ue cambiar la declaracin, lo 3ue nos e5ita la tarea de buscar todas las
apariciones del n9mero en el texto, comprobar si se trata realmente del n9mero 3ue
3ueremos alterar y modificarlo.
'as definiciones solo se pueden reali2ar si pre5iamente se ha declarado la
directi5a de definiciones =)*efine>. Si no es as se producir8 un error, ya 3ue el
ensamblador no entender8 la secuencia de l6xicos.
'a estructura de un blo3ue de definiciones es la siguiente
) *efine
+*efini,i-n.
+*efini,i-n.
+*efini,i-n.
))))
8 Simulador del microprocesador 8085
Existe alguna restriccin sobre la tabulacin y uso de espacios en la directiva y
resto de definiciones?
;o, las tabulaciones mostradas anteriormente solo son indicati5as. ;o tienen por3ue
reali2arse de forma estricta. 'a palabra @defineA puede estar junto al punto sin
separarse por espacios y las definiciones al principio de lnea.
Cada definicin tiene la siguiente estructura sint8ctica
Nombre Valor [Comentario]
Figura 5.4. Estructura de una De$inicin.
donde =nomre> declara el nombre, mientras 3ue en =!a"or> se asigna el 5alor
correspondiente. Nomre y Va"or deben estar separados por al menos un espacio en
blanco. Por ejemplo
) *efine
%/0i%& FFFFh
%ini%& 0
1%2r/3 0CA1h
e1r& 1$$
'os identificadores %/0i%&, %ini%&, 1%2r/3 y e1r& son nombres, mientras
3ue FFFFh, 0, 0CA1h y 1$$ son 5alores 3ue se asignan respecti5amente a los
nombres.
'os identificadores de nombre no pueden ser n9meros, es decir, deben comen2ar
al menos por una letra. Como m8ximo, deben tener un tama7o no superior a -BB
caracteres. ,gualmente, un nombre ya usado en una definicin no puede 5ol5er a
emplearse nue5amente en ninguna otra definicin. En este caso el ensamblador muestra
un mensaje de ad5ertencia y asigna el nombre al 5alor correspondiente de la primera
definicin.
Ensamblador para 8085 9
)un3ue es un caso poco probable, puesto 3ue si seguimos la organi2acin usual
por blo3ues no es posible, un nombre de definicin no puede ser un nombre ya usado en
una eti3ueta declarada con anterioridad. En el apartado =Sintaxis de las Instrucciones>
cuando se explican las eti3uetas se hace referencia a esta limitacin. 4ambi6n puede
encontrar un ejemplo de este error en el capitulo =Mensajes producidos por el
Ensamblador>.
Cada definicin es una instruccin de ensamblaje. Como 5emos no hay una
instruccin ma3uina an8loga a ella, de forma 3ue no 3ueda expresada de forma
explicita. Sin embargo, la instruccin es tomada por el ensamblador 3ue reempla2a cada
nombre por el 5alor correspondiente.
5.2.2
.
Sintaxis de los Datos
.entro de un programa se establece una clara diferencia entre datos e instrucciones. 'os
datos constituyen b8sicamente los operandos de las instrucciones.
'a distribucin en memoria de datos e instrucciones suele estar separada y
claramente diferenciada. Esto se debe a 3ue tanto datos como instrucciones son tratados
de la misma forma por la ma3uina seg9n la situacin en la 3ue este, es decir, un dato no
es un dato, ni una instruccin una instruccin, por s sola. .epende de como sea tratada
por la ma3uina.
'os datos pueden ser de tres tipos. Se han distinguido tres tipos distintos de
datos simples con los 3ue trabajar en el ensamblador. 'a diferencia fundamental entre
estos tipos es el tama7o, como muestra la 4abla B./.
Es una definicin sensible a la capitalizacin?
) diferencia del resto de elementos del ensamblador, el identificador de una definicin es
sensible a min9sculas y may9sculas. El objeti5o de esto es obtener una mayor di5ersidad de
nombres.
10 Simulador del microprocesador 8085
Tabla 5.1. %ama&o de los datos.
4ipo 4ama7o Ejemplos
?yte C bits /, /+, -BB, /-!, D/-!, ...
Eord /1 bits *E++h, 1BB0B, ****h, ...
String C bits x nF caracteres =Esto es un ejemplo>, =Salida del programa>, ...
:eneralmente la mayora de los datos ser8n de tipo B#te, puesto 3ue el C+CB solo
opera con datos de C bits. 'os datos de tipo $ord se emplearan con mayor probabilidad
para definir direcciones de memoria, ya 3ue el C+CB es capa2 de direccionar direcciones
de hasta /1 bits. 'as cadenas de caracteres solo proporcionan una mayor legibilidad al
programa ensamblador puesto 3ue se pueden definir alternati5amente mediante una
secuencia de B#te%
4!5t& e5 1n e6e%p3&7
48h 7#h 74h $Fh "0h $8h 7#h "0h 78h $!h "0h $8h $Ah $8h $h 70h $Ch $Fh
En la primera lnea se muestra la cadena original, mientras 3ue la segunda la
cadena de bytes correspondiente. Como 5emos, es mucho m8s sencillo de construir y
modificar la notacin para cadenas de caracteres.
'a estructura de un blo3ue de datos es la siguiente
) */t/ 9*ire,,i-n &ri:en;
+*e,3/r/,i-n */t&5.
+*e,3/r/,i-n */t&5.
+*e,3/r/,i-n */t&5.
))))
En direccin origen se indica la direccin de memoria en la 3ue se comen2ara a
introducir los datos.
Ensamblador para 8085 11
5
4
3
2
1
-2
-1
A010
A011
A012
A013
A014
A015
A016
A017
A018
A019
A01A
. DA%A A012
dB '( )( *( +( ,
dB -'( -)
EO./A
Cada declaracin de datos tiene la siguiente sintaxis
Prefijo <Dato> [, Dato]* [Comentario]
Figura 5.5. Estructura de una Declaracin.
donde
El &refi'o indica el tipo de dato 3ue 5amos a introducir. 'os posibles prefijos
coinciden con los tipos descritos anteriormente
dB declaracin de ?ytes o n9meros de C bits.
d$ declaracin de Eords o n9meros de /1 bits.
dS declaracin de cadenas de caracteres.
'os prefijos no son sensibles a la capitali2acin de letras. Por ejemplo, @dbA,
@d?A, @.?A y @.bA se reconocen igualmente por un prefijo de declaracin de
?ytes.
12 Simulador del microprocesador 8085
'os dato% simplemente son una secuencia de n9meros o expresiones lgicas y
aritm6ticas separados por comas o una cadena de caracteres.
Cuando se reali2a una declaracin de un dato %ya sea explcitamente o como
resultado de una expresin aritm6tica yGo lgica( como un byte, este se almacena en el
prximo byte 9til de memoria.
Cuando la declaracin es de un Hord los 8 bits menos significativos de la
expresin se almacenan en el prximo byte til de memoria! mientras que los oc"o
bits m#s significativos se almacenan en el siguiente. Como se 5e, la direccin est8
colocada en la memoria en orden in5erso. ;ormalmente, las direcciones se encuentran
en la memoria en esta forma. Esta operacin se utili2a b8sicamente para crear una tabla
de direcciones constantes.
Si la representacin del dato excede el n9mero de bits con 3ue ha sido declarado
entonces se informa al programador mediante una ad5ertencia de ensamblaje.
$nicamente quedaran almacenados los bits menos significativos%
0'h
1 bits
dB AF0'h
AFh
) continuacin mostramos un ejemplo de declaracin de datos
)ATA 100h
*< 1, " , #, 4, 8, $, 7, (, 9, 0 =,ifr/5
*< #", "8, FFh, #", >8, >1"0
*? 0, FFFFh, 01A0h =%i5 p&5i,i&ne5 *e %e%&ri/
*@ 4P135e 1n/ te,3/7 =%en5/6e p/r/ ,&ntin1/r
*@ 4Fin *e3 pr&:r/%/7 =%en5/6e *e 5/3i*/
Ensamblador para 8085 13
)dem8s, es posible emplear eti3uetas durante una definicin, esto nos permite
poder referenciar m8s adelante en el programa un determinado dato. El uso de eti3uetas
durante una definicin pone las bases de lo 3ue, en lenguajes de m8s alto ni5el, ser8n las
5ariables.
*inalmente la estructura de una declaracin de datos es
Prefijo <Dato> [, Dato]* [Comentario] [ti!"eta#]

Figura 5.6. Estructura E2tendida de una Declaracin.
En el apartado B.-.0 5eremos con m8s detenimiento las eti3uetas y como se
emplean estas en las instrucciones. .e esta forma 5eremos la utilidad real de la
definicin de eti3uetas durante una declaracin de datos.
5.2.3
.
Sintaxis de las Instrucciones
'a estructura de un blo3ue de instrucciones es la siguiente
) &r: 9*ire,,i-n &ri:en;
+in5tr1,,i-n.
+in5tr1,,i-n.
+in5tr1,,i-n.
))))
'as instrucciones del lenguaje ensamblador 5ienen dadas por una serie de reglas
3ue conforman la sintaxis de este. .entro de cada instruccin hay cuatro partes o
campos separados
[ti!"eta#] Cdi$o <%&erando> [Comentario]
14 Simulador del microprocesador 8085
Figura 5.7. Estructura de una /nstruccin.
'os campos Eti3ueta y Comentario son prescindibles y no tienen por3u6 estar
necesariamente en cada instruccin ensamblador. El Cdigo de #peracin, tambi6n
conocido por Codo&, es completamente necesario si 3ueremos definir una instruccin.
'os operadores depender8n del Cdigo de #peracin correspondiente, ya 3ue hay
instrucciones 3ue no re3uieren ning9n operador mientras 3ue otras necesitan 5arios de
ellos.
Estos campos est8n separados por espacios en blanco, no existe ninguna
restriccin sobre el n9mero de estos 3ue debe haber entre cada dos campos, siempre 3ue
al menos halla uno.
ETI!ETA
Es un campo de utili2acin opcional 3ue, cuando est8 presente, puede tener una
longitud de / a -BB caracteres. El primer car8cter de la eti3ueta debe ser una letra del
alfabeto. .e no ser as, como 5eremos m8s adelante podra ser confundido con una
direccin real de memoria. Estos caracteres deben ir seguidos de dos puntos %(. 'os
cdigos de instruccin est8n especialmente definidos por el ensamblador y no pueden
ser utili2ados como eti3uetas. ;uestro ensamblador es capa2 de diferenciar entre ellos,
por lo 3ue esta restriccin no est8 presente, sin embargo se recomienda no me2clar
eti3uetas de salto con cdigos de instruccin.
El objeti5o de una eti3ueta es referenciar una direccin de memoria. Esto es,
cuando una eti3ueta se sit9a en la declaracin de un dato o delante una instruccin de
programa esta haciendo referencia a la direccin de memoria en la 3ue se encuentra
dicho dato o instruccin.
:racias a las eti3uetas el programador de ensamblador no tiene 3ue calcular a
mano la direccin de un determinado dato 3ue necesita ni la de una instruccin a la 3ue
se debe saltar. .e esta manera se puede simplificar enormemente la tarea del
programador con respecto a los saltos y a la carga o almacenamiento de datos.
Ensamblador para 8085 15
Si tenemos en cuenta el significado de una eti3ueta es muy f8cil reconocer las
limitaciones 3ue el uso de estas conlle5a. Por un lado, una eti3ueta define solamente
una direccin. ;o puede repetirse. Por tanto, esto no es posible
@/3t&: %&' /, 2
)))
@/3t&: ,/33 512
)))
6%p @/3t&
Es ob5io 3ue el ensamblador no puede determinar 3u6 direccin es a la 3ue debe
ir la instruccin I"P.
;o obstante, la situacin contraria es posible %aun3ue poco 9til(, esto es, asignar
la misma direccin a dos eti3uetas. 'a siguiente secuencia de instrucciones es 58lida
@/3t&:
@/3t&": %&' /, 2
))))
6%p @/3t&
)hora podemos justificar por3ue una eti3ueta debe al menos comen2ar por una
letra. .e no ser as, la eti3ueta podra ser una secuencia completa de dgitos. Si esto
ocurre el ensamblador es incapa2 de distinguir una eti3ueta de un n9mero igual. Esta
ambigJedad dara lugar a fallos.
Tabla 5.2. Ejem"lo de etiquetas.
ire,,i-n In5tr1,,i-n
0100 M&' /, 2
0101 0100: M&' ,, *
010" J%p 0100
16 Simulador del microprocesador 8085
Como podemos 5er existe una clara ambigJedad sobre lo 3ue realmente se
3uiere codificar. Por un lado se podra interpretar como 3ue el salto de la direccin
010" es hacia donde indica la eti3ueta 0100 %direccin 0101(. Pero por otro lado
tambi6n es posible decir 3ue realmente se 3uiere saltar a la direccin 0100.
4ampoco es posible 3ue una eti3ueta tenga el mismo nombre 3ue una definicin
pre5ia. Como en el caso anterior, el ensamblador no es capa2 de distinguir a 3ue
elemento, si eti3ueta o definicin, esta haciendo referencia el nombre encontrado.
Por ultimo, al igual 3ue los nombres de definicin, las eti3uetas son sensibles a
may9sculas y min9sculas.
"#$I%# $E #&E'A"I()
Es el campo m8s importante de la instruccin ya 3ue en el se define la operacin
a reali2ar por la m83uina %suma, resta, salto, etc.(. Cada una de las instrucciones tiene un
cdigo determinado, 3ue es pri5ati5o de la misma, y 3ue debe aparecer en el campo del
cdigo. Por ejemplo, las letras KJMPK definen exclusi5amente la operacin de Ksalto
incondicionalK y ninguna otra instruccin. ;o existen dos instrucciones con el mismo
cdigo ni dos cdigos para una misma instruccin.
.espu6s de las letras del campo del cdigo, debe haber como mnimo un espacio
en blanco
J%p @/3t&
A*i 7<h
M&' /, 2
Salto incondicional a Salto %eti3ueta(
Sumar !?h con acumulador
4ransferir registro ? al acumulador
) cada secuencia de letras 3ue definen exclusi5amente una operacin se
denomina nemot6cnico. 'os nemot6cnicos a diferencia 3ue las eti3uetas y los
&esumiendo '
'as eti3uetas son sensibles a may9sculas y min9sculas.
4ienen 3ue empe2ar al menos por una letra.
4ienen 3ue ser menores de -BB caracteres.
;o pueden coincidir con definiciones anteriores.
;o deben coincidir con eti3uetas anteriores.
Ensamblador para 8085 17
identificadores de definiciones no son sensibles a las may9sculas ni min9sculas. Esto es
=J%p>, =JMP>, =6%p> o =J%P> se refieren al mismo nemot6cnico.
#&E'A)$#
'a informacin contenida en este campo se usa conjuntamente con el campo del
cdigo a fin de definir con precisin la operacin a ejecutar por la instruccin. Seg9n el
contenido del campo del cdigo, el campo del operando puede no existir, o consistir en
una cifra o palabra, o bien en dos, separados ambas por una coma.
'
(MP
M%V , ) A
*alto
/nstruccin sin O"erandos
/nstruccin con un o"erando
/nstruccin con dos o"erandos
Figura 5.8. %i"os de /nstrucciones.
&ay cuatro tipos de informacin 58lidos como campo del operando
'*gis+ro. Un registro %o cdigo indicati5o de una referencia a memoria(
definido como fuente o destino de datos en una operacin. Un n9mero puede
usarse para especificar el registro o referencia a memoria mencionados,
pudi6ndose obtener dicho n9mero a partir de una expresin, pero el n9mero
finalmente e5aluado debe estar entre + y !. 'a correspondencia se muestra en la
tabla B.0.
Tabla 5.3. 34meros de registros.
,alor '*gis+ro ,alor '*gis+ro
18 Simulador del microprocesador 8085
0 - 4 .
1 " 5 /
2 $ 6 '*0*r*n1ia a m*moria
3 E 7 A1umulador 2A3
Por ejemplo, la instruccin "$, permite la carga inmediata del segundo
operador en el registro indicado por el primer operador. Esto es, usos tpicos de
esta instruccin seran
MVI A, 1
MVI H, *irA/3t/
MVI L, *irA2/6/
4ransferir / al acumulador
4ransferir dirLalta %definicin( al registro &
4ransferir dirLbaja %definicin( al registro '
Cada uno de los registros se pueden sustituir de di5ersas formas
MVI 7, 1
MVI (B", *irA/3t/
MVI re:L, *irA2/6/
! es el acumulador
CG- es M 3ue se corresponde con &
<eg' es una definicin con 5alor B %'(
&ar d* r*gis+ros. Un par de registros utili2ado como fuente o destino de una
operacin con datos. 'os pares de registros se especifican como se 5e en la tabla
B.M.
Tabla 5.4. Pares de registros.
Esp*1i0i1a1i4n &ar d* '*gis+ros
- '*gis+ros - 5 "
$ '*gis+ros $ 5 E
. '*gis+ros . 5 /
&67
!n b5+* 8u* indi1a *l *s+ado d* los bi+s
d* 1ondi1i4n 5 *l r*gis+ro A.
6&
El r*gis+ro d* 16 bi+s d*l pun+*ro d*
s+a19.
Por ejemplo
INX <
PC@H P@?
,ncrementar ?C %como un registro de /1 bits(
:uardar en pila los bits de estado y el registro )
Ensamblador para 8085 19
LXI ,0h
Cargar &' con +h
$a+o inm*dia+o. Un dato expresado de forma inmediata en la instruccin. El
dato puede ser resultado de una expresin. Por ejemplo
AI 8D8
OEI 0Fh
LXI ,10hDFMOV A,<G
Sumar /+ al contenido del acumulador
#< del acumulador con +*h
Cargar &' con /+hN!Ch
$ir*11i4n d* 16 bi+s% Una direccin de memoria de /1 bits o la eti3ueta de
una instruccin en memoria. Por ejemplo
JMP #4F0h
LXI H,A000h
Saltar a la direccin 0M*+
Cargar &' con )+++h
"#:E)TA'I#6
'a 9nica regla 3ue rige la utili2acin de los comentarios es 3ue 6stos deben ir
precedidos de un punto y coma %O(.
AHCI: MVI C, AH =e5t& e5 1n ,&%ent/ri&)
El campo del comentario puede aparecer slo en una lnea, a pesar de 3ue no exista
instruccin en la misma
=,&%ent/ri& 5in in5tr1,,i-n
5.2.4
.
Sintaxis del Operando
20 Simulador del microprocesador 8085
Existen nue5e formas de especificar el operando. Estas nue5as formas se detallan a
continuacin
(% $a+o .*;ad*1imal. 4odo n9mero hexadecimal esta expresado en base /1 para
cuya representacin emplea los dgitos del + al P y las 1 primeras letras del alfabeto
%), ?, C, ., E y *(. Son los m8s comunes cuando se trabaja en ensamblador. 'os
datos hexadecimales 5an seguidos de una letra H. Por ejemplo
A"h F1$"G, 10AFh F4"71G, FFFFh F$88#8G, 11Ah F"("G
)% $a+o $*1imal. Expresados en base /+, son los n9meros 3ue todos conocemos con
dgitos entre + y P. Pueden ir seguidos de la letra , o bien ir solos. Por ejemplo
0, 1, "88*, #8, 1080*
*% $a+o #1+al. Expresados en base C, utili2an solo los dgitos del + al !. .eben ir
seguidos de la letra O H para 3ue sean reconocidos como tales. Por ejemplo
777I F811G, 1"#& F(#G, "4"I F1$"G, ""& F1(G
+% $a+o -inario. ;9meros binarios expresados en base - %+,/(. $an seguidos de la
letra <. Se emplean generalmente para definir mascaras de bits. Por ejemplo
0101011101< F#49G, 11110000< F"40G

,% El 1on+*nido a1+ual d*l 1on+ador d* programa. Este se define con el
car8cter Q y e3ui5ale a la direccin de la instruccin en ejecucin.
-% !na 1ons+an+* A6"II. Son uno o m8s caracteres )SC,, encerrados entre comillas
simples.
J/K F$8G, J2K F$$G, JLKF4"G,JMK F$#G
.% !na ins+ru11i4n *n1*rrada *n+r* par<n+*sis. Una instruccin entre
par6ntesis puede emplearse como operando. El 5alor concreto del operando ser8 el
cdigo hexadecimal con el 3ue la instruccin es codificada.
FMOV A,<G F$8G, FINX HG F#8G, FPC@H P@?G F"48G
Ensamblador para 8085 21
8% Id*n+i0i1ador*s d* E+i8u*+as. Ra sea 3ue se les ha asignado un 5alor num6rico
por el propio ensamblador, como 5imos en el caso de los registros representados por
n9meros. # bien eti3uetas definidas por el programador 3ue aparecen en el campo
de la eti3ueta de otra instruccin o declaracin de dato.
/% E;pr*sion*s /4gi1as 5 Ari+m<+i1as. 4odos los operandos descritos
anteriormente son expresiones. 'as expresiones lgicas y aritm6ticas son
expresiones unidas mediante los operadores N %suma(, D %resta o cambio de signo(, S
%multiplicacin(, G %di5isin(, "#. %mdulo(, los operadores lgicos ;#4, );.,
#<, T#<, S&< %rotacin hacia la derecha(, S&' %rotacin hacia la i23uierda(, y
par6ntesis a derecha e i23uierda.
0odos los operadores tratan sus argumentos como cantidades de (- bits y
genera como resultados cantidades de (- bits. Cada operador reali2a la siguiente
operacin
El operador = genera la suma aritm6tica de sus operandos.
A01-> 00FF> A11A> = ?
El operador - genera la resta aritm6tica de sus operandos, cuando se usa
como sustraccin %operador binario(, o como aritm6tica negati5o cuando
se utili2a como cambio de signo %operador unario(.
A01-> 00FF> 9F1"> - ?
El operador 1 indica el producto aritm6tico de los dos operandos.
A01-> 00FF> 9F7AE5>
@
?
El operador A calcula el cociente entero entre los dos operandos, el resto
de la di5isin se descarta.
22 Simulador del microprocesador 8085
A01-> 00FF> A0> A ?
El operador :#$ calcula el resto de la di5isin entre los dos operandos
descartando el cociente.
A01-> 00FF> --> :#$ ?
El operador )#T reali2a el complemento de cada bit del operando.
0110110b 1001001b ? )#T
El operador A)$ %o B( reali2a la operacin lgica );. bit a bit entre
los operandos.
011101b 111000b 011000b A)$ ?
El operador #' %o C( reali2a la operacin lgica #< bit a bit entre los
operandos.
011101b 111000b 111101b #' ?
El operador D#' %o E( reali2a la operacin lgica #DETC'US,$# bit a
bit entre los operandos.
011101b 111000b 100101b D#' ?
'os operadores 6.' y 6./ reali2an un despla2amiento del primer
operando a derecha e i23uierda respecti5amente el n9mero de posiciones
definidas por el segundo operando, introduciendo ceros en las nue5as
posiciones.
011101b 3 000011b 6.' ?
Ensamblador para 8085 23
011101b 3 101000b 6./ ?
El programador debe asegurarse de 3ue el resultado generado por una de estas
operaciones cumple los re3uisitos necesarios. En caso de 3ue as no fuera los bits
m8s significati5os 3ue no pudieran almacenarse se perderan. Por ejemplo
MVI A, NOT 0
MVI A, >1
MVI A, >1NFFFhG
;#4 + es ****h, "$, espera un dato inmediato de C bits.
D/ es ****h en complemento a dos.
*orma correcta de especificacin.
"9ltiples operadores pueden estar presentes en una expresin. Esta claro 3ue el
orden en 3ue estos se apli3uen 5a a dar lugar a diferentes resultados. Por esta ra2n
las expresiones producidas por los operadores deben ser e5aluadas en el orden de
prioridad mostrado en la tabla B.B.
Tabla 5.5. O"eradores de una e2"resin.
(rioridad
1 Expresiones entre par2ntesis
2 Multiplicacin 314! 5ivisin 364! M75! 89L! 89&
3 8uma 3:4! &esta 3;4
4 <70
5 =<5
6 7&! >7&
En el caso de las expresiones entre par6ntesis, el contenido entre los mismos debe
e5aluarse primero.
5.3
.
Especificacin Formal de la Sintaxis del
Ensamblador
'a estructura del lenguaje ensamblador 5iene dada por una serie de reglas 3ue
conforman la sintaxis de este. El lenguaje ensamblador es el primer escaln dentro de
los ni5eles de abstraccin de la ma3uina, es decir, est8 muy cerca de la propia ma3uina,
por lo 3ue su complejidad como lenguaje es significati5amente menor 3ue cual3uier
otro lenguaje de m8s alto ni5el.
24 Simulador del microprocesador 8085
'a sintaxis de un lenguaje de programacin se especifica mediante la gram8tica
independiente del contexto 3ue lo genera. Una gram8tica independiente del contexto es
una cu8drupla 3<! 0 ?! 84 en la 3ue
a( < es el conjunto de smbolos no terminales del lenguaje,
b( 0 es el conjunto de smbolos terminales del lenguaje,
c( ? es el conjunto de reglas de produccin, y
d( 8 es el axioma o smbolo inicial de la gram8tica,
y adem8s cumple 3ue todas las reglas de produccin adoptan la forma
A , donde S ( % , T N N A
En otras palabras, es una gram8tica de tipo -.
Notacin empleada
Para especificar formalmente la sintaxis de los lenguajes de programacin se
suelen usar ?;*. ?;* es un metalenguaje 3ue se usa para especificar la sintaxis de los
lenguajes de programacin. Esto se consigue especificando en ?;* la gram8tica 3ue
genera el correspondiente lenguaje.
?;*, ?acUus ;aur *orm, establecido por Iohn ?acUus y Peter ;aur %Iunio
/.PBP, - de enero /.P1+(. 'a e3ui5alencia entre las gram8ticas independientes del
contexto y ?;*, en el sentido de tener la misma potencia expresi5a, fue demostrada
por S. :insburg, y &.:. Pice en /.P1-

En ?;* la gram8tica de un lenguaje de programacin se expresa por medio de
sus reglas de produccin, por lo 3ue la sintaxis con la 3ue se escriban estas reglas
deber8 poner claramente de manifiesto cuales son
el smbolo inicial,
los smbolos no terminales y
los smbolos terminales de la gram8tica del lenguaje
Ensamblador para 8085 25
Para ello el smbolo inicial de la gram8tica deber8 aparecer en la parte i23uierda
de la primera regla de produccin R el resto de smbolos no terminales deber8n aparecer
en la parte i23uierda de al menos una regla de produccin. Se dice 3ue esa regla define
al smbolo no terminal.
) partir del concepto de gram8tica independiente del contexto, es ob5io 3ue
ning9n smbolo terminal podr8 aparecer en la parte i23uierda de ninguna regla de
produccin.
El orden natural 3ue se suele seguir al escribir las reglas de produccin es, dada
una regla, escribir a continuacin de ella las reglas correspondientes a los smbolos no
terminales 3ue apare2can en su parte derecha. Si alguno o algunos, de estos smbolos
son comunes a 5arias reglas la regla 3ue define este smbolo se pondr8 al final de todas
ellas. &abitualmente las reglas de produccin en cuya parte derecha solo aparecen
smbolos terminales figuran al final de la especificacin.
Para especificar las reglas de produccin, la notacin ?;* consta de los
siguientes metasmbolos
F G 3ue se usan como delimitadores de los smbolos no terminales de la
gram8tica al escribir las regias de produccin.
HH? 3ue se utili2a para separar las partes i23uierda y, derecha de las reglas de
produccin, R se lee =%e define )omo>.
C 3ue se use como separador de las di5ersas alternati5as 3ue puedan aparecer en
la parte derecha de una regla de producciones y se lee KoK.
I J para representar 3ue lo encerrado entre los corchetes es opcional.
K L para representar 3ue lo encerrado entre los corchetes se repite + o 5arias
5eces.
5.3.1
.
otacin !F del Ensamblador
5Programa6 778 {<Bloque>}
26 Simulador del microprocesador 8085
5Bloque6 778 <Bloque definicin> | <Bloque declaracin> | <bloque Programa>
5Bloque de$inicin6 778 <direci!a define> {<definiciones>}
5Bloque declaracin6 778 <direci!a daos> {<declaraciones>}
5Bloque Programa6 778 <direci!a programa> {<insrucciones>}
5directiva de$ine6 778 <puno> $EFI)E "M <comenarios>#
5directiva datos6 778 <puno> $ATA <e$presin> "M <comenarios>#
5directiva "rograma6 778 <puno> #'% <e$presin> "M <comenarios>#
5de$inicin6 778 <idenificador> <e$presin> "M <comenarios>#
5declaracin6 778 "<idenificador> % # <prefi&o> <e$presin> N {<e$presin>} "M
<comenarios>#
5instrucciones6 778 <cdigo operacin> "<e$presin reg># " N <e$presin reg>#
"M <comenarios>#
5e2"resin reg6 778 <e$presin> | <regisro>
5e2"resin6 778 <ermino> { <operador d'bil> <ermino> }
5t!rmino6 778 <elemeno> { <operador fuere> <elemeno> }
5elemento6 778 < idenificador> | <consane> | 2 <e$presin> 3
5identi$icador6 778 <lera> | <idenificador> <lera> | <idenificador> <digio>
Ensamblador para 8085 27
5constante6 778 <consane (e$> | <consane decimal> | <consane ocal> |
<consane bin> | <consane car)cer>
5constante he26 778 <digio (e$> {<digio (e$>} .
5constante dec6 778 <digio> {<digio>} "$#
5constante octal6 778 <digio oc> {<digio oc>} # | <digio oc> {<digio oc>}
5constante bin6 778 <digio bin> {<digio bin>} -
5constante car9cter6 778 O <lera> | <digio dec> P
5cdigo de o"eracin6 778 A)A : A)$ : A"I : A$I : .... : D".% : DT./

5"re$ijo6 778 d- : d7 : d6
5registro6 778 A : - : " : $ : E : F : . : 6 : &67
5o"erador debil6 778 = : - : A)$ : )#T : #'
5o"erador $uerte6 778 @ : A
5digito6 778 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9
5digito he26 778 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : A : - : " : $ : E : F
5digito oct6 778 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7
5digito bin6 778 0 : 1
5letra6 778 a : b : 1 : ... : Q : A : - : " : ... : R
5"unto6 778 .
28 Simulador del microprocesador 8085
5.4
.
"ensa#es de Error producidos por el
Ensamblador
5.4.1
.
Introducci
n
Ensamblador para 8085 29
'os mensajes de error se generan cuando existe alg9n problema en el cdigo fuente a
ensamblar. Estos errores pro5ocan 3ue si el ensamblador siguiera con5irtiendo el
fichero en ensamblador, el programa resultante fuera totalmente incorrecto por lo 3ue el
proceso de ensamblaje se termina cada 5e2 3ue se produce un error.
4ambi6n es posible 3ue el ensamblador genere mensajes de ad5ertencia. Estos
mensajes de ad5ertencia indican incoherencias o ambigJedades en el cdigo fuente.
Estas ambigJedades no generan un programa totalmente incorrecto por lo 3ue el
proceso de compilacin continua. )un3ue funcione este conser5ara ciertos errores 3ue
deberan eliminarse. "8s adelante 5eremos estos casos.
'os mensajes de error se muestran en rojo, mientras 3ue los mensajes de
ad5ertencia se muestran en amarillo.
) continuacin describiremos de forma detallada los mensajes de error y de
ad5ertencia de los 3ue informa el ensamblador. )dem8s mostraremos ejemplos en los
3ue estos errores se producen.
5.4.2
.
"ensa#es de
Error
Error*s *n $ir*1+iSas
'as .irecti5as ofrecen informacin al ensamblador sobre el tipo de elementos
3ue se 5a a encontrar a continuacin y la direccin de memoria donde debe disponerlos
%si corresponde(. Se caracteri2an por ir precedidas por un punto.
Error' cada blo3ue debe comen2ar por una directi5a. 'nea *N+ ",nea-
Cada blo3ue 3ue se defina debe comen2ar por la directi5a correspondiente. Si no
es as se lan2a este error. Usualmente este error solo aparece cuando empe2amos a
30 Simulador del microprocesador 8085
introducir instrucciones en el programa o declaraciones de datos desde cero, sin definir
ninguna directi5a pre5ia.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
= )&r: 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
=)*/t/ 10H
*< 0, 1"7, FFh
*@ 4!rr&r en *ire,ti'/7
Error' ,dentificador precediendo directi5a no 5alido. 'nea *N+ ",nea-
)ntes del punto %.( 3ue marca el comien2o de una directi5a no puede haber nada
sal5o espacios en blanco o tabulaciones. En caso de 3ue esto no se cumpla se genera el
mensaje de error anterior.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
ire,ti'/ )&r: 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&

Error' .irecti5a no reconocida. 'nea *N+ ",nea-
Solo existen las directi5as mencionadas anteriormente, esto es, .E*,;E para las
definiciones, .)4) para las declaraciones de datos y #<: para comien2o del
programa. El ensamblador no es sensible a la capitali2acin de estas letras, siempre y
cuando se correspondan con alguna directi5a 5alida.
Ensamblador para 8085 31
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)%iA*ire,ti'/ 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
Error' .ireccin incorrecta en la directi5a. 'nea *N+ ",nea-
'as directi5as .)4) y #<: necesitan una direccin de memoria inicial a partir
de la cual colocar los datos e instrucciones respecti5amente. 4anto si no se introduce
esta direccin as como si es in58lida se genera este error.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
)&r: 1A
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
)*/t/
*< 0, 1"7, FFh
*@ 4N& h/O *ire,,i-n
&ri:en7
En el primer caso la expresin es errnea, ya 3ue para definir un 5alor
hexadecimal es necesario introducir el sufijo @hA. El n9mero no es
reconocido correctamente dando lugar al error. Este caso se puede extender
a cual3uier otro en el 3ue la expresin 3ue decide la direccin de memoria es
incorrecta.
En el segundo caso no se ha puesto ninguna direccin. Esto da tambi6n lugar
a un error de ensamblado 3ue genera el mensaje actual.
Error*s *n $*0ini1ion*s
El objeti5o de una definicin es, simplemente, poner un nombre a un n9mero.
.urante el ensamblaje, cada 5e2 3ue nos encontremos con un operando 3ue contiene el
32 Simulador del microprocesador 8085
nombre este ser8 sustituido de forma autom8tica por el 5alor correspondiente con el 3ue
se ha definido.
Error' $alor V*Va"or-V asociado a definicin V*Defini)i.n-V incorrecto. 'nea
*N+ ",nea-
El 5alor 3ue se ha asociado a un identificador de una definicin no es correcto.
En una definicin slo se puede asignar un 5alor %o cual3uier expresin 3ue se resuel5a
en un 5alor( a un identificador. Este mensaje de error indica 3ue el 5alor 3ue se ha
introducido no es 5alido.
Va"or. Secuencia de smbolos 3ue no se pueden reconocer como un
5alor.
Defini)i.n. ;ombre del idenficador al 3ue se intenta asignar un 5alor
incorrecto o no reconocible.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
)*efine
p'p 1(0A
i'/ 1$
)&r: 100H
)))
)*efine
5inA'/3&r
'/ri&5 1$ 17
)&r: 100H
)))
En el primer ejemplo el 5alor asociado a =p'p> es incorrecto. Es un 5alor en
hexadecimal al 3ue le falta el sufijo @hA. Esto es extensible a toda expresin
3ue contenga errores.
En el segundo ejemplo se muestran dos errores. En el primero no se ha
especificado un 5alor al 3ue asignar el identificado =sinL5alor>, el segundo
intenta asignar 5arios 5alores a la 5e2 en la misma lnea.
Error' Colisin con la declaracin pre5ia de la eti3ueta V*Nomre-V. 'nea *N+
",nea-
Ensamblador para 8085 33
Se pretende emplear un nombre identificador en una definicin 3ue ya ha sido
pre5iamente empleado para una eti3ueta.
Nomre. ,dentificador de la declaracin 3ue ya se ha empleado
anteriormente.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
5/3t&: %'i /,1
/** /
6%p 5/3t&
)*efine
5/3t& 1000h
Error' El identificador V*Nomre-V no es 5alido para una definicin. 'nea *N+
",nea-
El nombre 3ue se le 3uiere asignar a la definicin no es 5alido. Esto se debe a
3ue, o bien contiene caracteres in58lidos, o 3ue comien2a por un n9mero.
<ecordemos 3ue el primer car8cter de un nombre de definicin debe ser una
letra del alfabeto. .e no ser as, como ya 5imos antes podra ser confundido con un
n9mero empleado en el programa.
Nomre. ;ombre de la definicin 3ue no es 58lido.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
34 Simulador del microprocesador 8085
)*efine
15/3t& 1000h
)*efine
1"#48 1000h
Error*s *n $*1lara1ion*s d* $a+os
.entro de un programa se establece una clara diferencia entre datos e
instrucciones. 'os datos constituyen b8sicamente los operandos de las instrucciones.
Error' .eclaracin no 5alida. Expresin incorrecta V*Va"or-V. 'nea *N+ ",nea-
Existe un error en los 5alores introducidos en una declaracin de datos. Ra sea
de C %bytes( o /1 %Hords( bits, si el 5alor correspondiente no se puede calcular, debido a
alg9n error tipogr8fico, se genera este error.
Va"or. Secuencia de smbolos 3ue no se pueden reconocer como un
5alor.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
)*efine
15/3t& 1000h
)*efine
1"#48 1000h
Error' .eclaracin incorrecta. ;o se han abierto comillas. 'nea *N+ ",nea-
En la declaracin de una cadena no se han abierto comillas antes de introducir la
secuencia de letras correspondiente. 'as comillas son necesarias para delimitar la
cadena 3ue se 3uiere almacenar en memoria. Por esta ra2n es necesario 3ue las cadenas
de caracteres se expresen delimitadas por comillas.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ensamblador para 8085 35
Ejemplo del error
)*/t/ 0H
*@ N& 5e h/n /2iert& ,&%i33/57
)&r: 100H
5/3t&: %'i /,1
/** /
6%p 5/3t&
Error' .eclaracin incorrecta. ;o se han cerrado comillas. 'nea *N+ ",nea-
Como antes, pero el error contrario. 4ras abrir comillas es necesario indicar el
final de la secuencia de caracteres, esto se reali2a mediante cierre de comillas. )un3ue
pare2ca una formalidad, el cierre de comillas puede e5itar errores del programa 3ue se
deben a simples errores tipogr8ficos.
N+ de ",nea. 'nea en la 3ue se encuentra el error.

Ejemplo del error
)*/t/ 0H
*@ 4N& 5e h/n /2iert& ,&%i33/5 = !5t& 5e %eterP/
)&r: 100H
5/3t&: %'i /,1
/** /
6%p 5/3t&
Como 5emos, el problema de introducir cadenas de caracteres es 3ue si estas
no se delimitan correctamente se pueden introducir caracteres espurios.
Error' .eclaracin incorrecta. Solo se puede introducir una cadena. 'nea *N+
",nea-
36 Simulador del microprocesador 8085
El prefijo de declaracin de cadenas %dS( solo permite introducir una cadena de
caracteres, a diferencia 3ue d? y dE no es posible introducir secuencias consecuti5as
en la misma lnea separadas por comas.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)*/t/ 0H
*@ 4C/*en/ '/3i*/7,7C/*en/ n& '/3i*/7
)&r: 100H
5/3t&: %'i /,1
/** /
6%p 5/3t&
Error' Prefijo V*(refi'o-V desconocido. 'nea *N+ ",nea-
El ensamblador solo reconoce tres prefijos distintos. Estos son, el prefijo de
enteros de C bits o ?ytes %dB(, el prefijo de palabras de /1 bits o Eords %d$( y el
prefijo de cadenas de caracteres o Strings %dS(.
El ensamblador no es sensible a la capitali2acin de los prefijos, pero cual3uier
otro prefijo es recha2ado generando este mensaje de error.
(refi'o. Secuencia de caracteres 3ue el ensamblador no reconoce como
prefijo.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
Ensamblador para 8085 37
)*/t/ 0H
*< FFh
*? FFFFh
*@ 4C/*en/ '/3i*/7
*I 0/1"# =Prefi6& n& '/3i*&
i'/ 1$ =Prefi6& n& '/3i*&
%'i /,1 =Prefi6& n& '/3i*&
)&r: 100H
5/3t&: %'i /,1
/** /
6%p 5/3t&
Error*s *n Ins+ru11ion*s
'as instrucciones del lenguaje ensamblador 5ienen dadas por una serie de reglas
3ue conforman la sintaxis de este.
Error' "nemot6cnico V*Mnemot/)ni)o-V desconocido. 'nea *N+ ",nea-
'os mnemot6cnicos representan el cdigo de cada instruccin. Cada una de las
instrucciones tiene un cdigo determinado, 3ue es pri5ati5o de la misma, y 3ue debe
aparecer en el campo del cdigo. 'os cdigos ensamblador est8n claramente definidos
por este.
Mnemot/)ni)o. El mnemot6cnico no se reconoce como una instruccin
propia del procesador C+CB.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)*/t/ 0H
*< FFh
*? FFFFh
*@ 4C/*en/ '/3i*/7
)&r: 100H
5/3t&: %'i /,1
p/**52 /,2
/** /
6%p 5/3t&
38 Simulador del microprocesador 8085
El primer operando de la instruccin no es un operando 58lido. Esto se puede
deber a diferentes causas.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
)&r: 100H
5/3t&: %'i /, 8
/** /
6%p 5/3t&DF#LG
)&r: 100H
5/3t&: %'i /,1
p15h /
6%p 5/3t&
En el primer ejemplo se produce este error debido a 3ue la expresin
introducida es errnea.
) la 5e2 3ue se genera este error se muestra tambi6n el error de expresin
correspondiente.
En el segundo caso se intenta emplear un registro no 5alido para la
instruccin %push a(, por esta ra2n tambi6n se muestra un error.
Error' Sintaxis incorrecta en la instruccin. Segundo operando no 5alido. 'nea
*N+ ",nea-
El segundo operando de la instruccin no es un operando 58lido. Esto se puede
deber a las diferentes causas explicadas anteriormente.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
Error' Sintaxis incorrecta en la instruccin. Primer operando no 5alido. 'nea
*N+ ",nea-
Ensamblador para 8085 39
)&r: 100H
5/3t&: %'i /, 8D#LF8DG
/** /
6%p 5/3t&
)&r: 100H
5/3t&: %&' /, 1
/** /
6%p 5/3t&
En el primer ejemplo se produce este error debido a 3ue la expresin
introducida es errnea.
) la 5e2 3ue se genera este error se muestra tambi6n el error de expresin
correspondiente.
En el segundo caso se intenta emplear la funcin mo! con una carga
inmediata, lo cual no es posible %para eso est8 m!i(. )3u tambi6n se genera
el mensaje de error.
Error' Sintaxis incorrecta en la instruccin. *alta operando. 'nea *N+ ",nea-
'a informacin contenida en el campo operando se usa conjuntamente con el
campo del cdigo %mnemot6cnico( a fin de definir con precisin la operacin a ejecutar
por la instruccin.
Seg9n el contenido del campo del cdigo, el campo del operando puede no
existir, o consistir en una cifra o palabra, o bien en dos, separados ambas por una coma.
Si la instruccin necesita m8s operandos de los 3ue hay especificados se
producir8 este error.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
40 Simulador del microprocesador 8085
)&r: 100H
5/3t&: %&' /
/** /
6%p
MOV es una instruccin 3ue necesita necesariamente dos operandos. Solo
hemos introducido uno, por lo 3ue se genera un error.
.e igual forma JM( necesita un operando.
Error' Sintaxis incorrecta en la instruccin. Sobra operando. 'nea *N+ ",nea-
Situacin contraria a la anterior en la 3ue no falta un operando, sino 3ue al
contrario, hay operandos de m8s.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
5/3t&: %&' /,2,,
/** /
6%p 5/3t&, 5/3t&"
Cual3uier instruccin en el C+CB no re3uiere m8s de dos operadores. "#$
tiene tres, por lo 3ue se genera un error.
.e igual forma JM( solo necesita un operando.
Error' Sintaxis incorrecta en la instruccin. "#$ no permite dos direcciones de
memoria como operandos. 'nea *N+ ",nea-
'a instruccin de transferencia permite tres tipos de transferencias transferencia
entre registros %direccionamiento registro(, transferencia desde la memoria
Ensamblador para 8085 41
%direccionamiento registro indirecto( y transferencia hacia la memoria
%direccionamiento registro indirecto(. En ning9n caso permite la transferencia a la 5e2
desde y hacia la memoria, esto es, especificar ambos operandos como direcciones de
memoria.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
5/3t&: %&' M,M
/** /
6%p 5/3t&
Error*s *n E;pr*sion*s
Una expresin es una secuencia de n9meros y operadores 3ue pueden resol5erse.
En ensamblador, a diferencia 3ue otros lenguajes de m8s alto ni5el, las expresiones han
de resol5erse en tiempo de compilacin y no de ejecucin, ya 3ue el ensamblador solo
traduce instrucciones, no compila. Por esta ra2n, las expresiones en ensamblador no
contienen 5ariables %aun3ue s definiciones( ni registros.
Error' Expresin incorrecta. *alta operando en expresin entre par6ntesis. 'nea
*N+ ",nea-
En las expresiones es posible utili2ar par6ntesis. Si reali2ando una operacin se
nos ol5ida poner un operando y cerramos el par6ntesis se generar8 este error.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
42 Simulador del microprocesador 8085
F8D G
1$L78DF> G
FJAK>18L G
Error' Expresin incorrecta. #perando tras operador no encontrado. 'nea *N+
",nea-
4ras un operador no se encuentra el operando sobre el 3ue se aplica.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
8D
1$L78D
JAK>18L
Error' Expresin incorrecta. #perador no reconocido. 'nea *N+ ",nea-
Se ha empleado un operador distinto de los disponibles.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
@IrtF8G
@&3'eF0D8Q0G
8 M&*13& "
Error' Expresin incorrecta. *alta operador en expresin entre par6ntesis. 'nea
*N+ ",nea-
)l definir una operacin de mayor prioridad mediante los par6ntesis no se ha
especificado el operador correspondiente a dicha operacin.
Ensamblador para 8085 43
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
F8 1$G
F1$L8 78G
FFJAK 18G F8D(GG
Error' Expresin incorrecta. ;o se han cerrado todos los par6ntesis. 'nea *N+
",nea-
Se han abierto m8s par6ntesis de los 3ue se han cerrado.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
F1$L78
FJAK>18GLF8D8
FNOTFF8D4GL$G
Error' Expresin incorrecta. .i5isin por cero. 'nea *N+ ",nea-
En la expresin se intenta lle5ar a cabo una di5isin por cero.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplos del error
7B0
F88L1#GBNOTFFFhG
18BFF1$L#"D"G>F$4L(G>"G
Error*s *n E+i8u*+as
44 Simulador del microprocesador 8085
El objeti5o de una eti3ueta es referenciar una direccin de memoria. Esto es,
cuando una eti3ueta se sit9a en la declaracin de un dato o delante una instruccin de
programa esta haciendo referencia a la direccin de memoria en la 3ue se encuentra
dicho dato o instruccin.
Error' ;o se ha dado nombre a la eti3ueta. 'nea *N+ ",nea-
Este error aparece cuando se han puesto los dos puntos %( pero no se ha dado
nombre a la supuesta eti3ueta.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
%'i 2, 8
: %&' /,2
/** 2
6%p 5/3t&
Como 5emos, aun3ue existe el smbolo indicati5o de eti3ueta %( esta
realmente no existe.
Error' ,dentificador de eti3ueta no 5alido. 'nea *N+ ",nea-
Cuando al nombre de una eti3ueta le anteceden caracteres diferentes de espacio
o tabulador se genera este error. El nombre empleado para una eti3ueta no puede
contener espacios en blanco.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
Ensamblador para 8085 45
)&r: 100H
%'i 2, 8
!tiI1et/ *e 5/3t&: %&' /,2
/** 2
6%p 1"#
Error' El identificador V*Nomre-V no es 5alido para la eti3ueta. 'nea *N+
",nea-
El nombre 3ue se le 3uiere asignar a la eti3ueta no es 5alido. Esto se debe a 3ue,
o bien contiene caracteres in58lidos, o 3ue comien2a por un n9mero. <ecordemos 3ue el
primer car8cter de la eti3ueta debe ser una letra del alfabeto. .e no ser as, como ya
5imos antes podra ser confundido con una direccin real de memoria.
Nomre. ,denficador asignado a la eti3ueta 3ue no es 58lido.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
%'i 2, 8
1"# : %&' /,2
/** 2
6%p 1"#
Error' Colisin con la definicin pre5ia de *Nomre-. 'nea *N+ ",nea-
Se intenta establecer una eti3ueta con un nombre identificati5o 3ue ya ha sido
pre5iamente empleado en una definicin.
Nomre. ,dentificador de la eti3ueta 3ue ya se ha empleado
anteriormente.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
46 Simulador del microprocesador 8085
Ejemplo del error
)*efine
5/3t& 100h
)*/t/ F"8G
)&r: 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
Como 5emos, existe una ambigJedad sobre hacia donde se debe saltar. El
idenficador %a"to puede referirse o bien a la eti3ueta o a la definicin.
5.4.3
.
"ensa#es de
$d%ertencia
=dvertencia
'
.eclaracin pre5ia de la eti3ueta V*Nomre-V. 'nea *N+ ",nea-
El nombre con el 3ue se 3uiere definir la eti3ueta fue pre5iamente empleado
para definir otra eti3ueta, por lo 3ue no debera reutili2arse. El ensamblador tomara la
ultima declaracin de la eti3ueta como la 58lida.
Nomre. ,dentificador de la eti3ueta 3ue ya se ha empleado
anteriormente.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo de la ad5ertencia
)&r: 100H
5/3t& : %'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
Ensamblador para 8085 47
Como 5emos, existe una ambigJedad sobre hacia donde se debe saltar. Por
defecto el ensamblador optara por la 9ltima 5e2 en 3ue se declara la eti3ueta
de salto.
=dvertencia
'
.eclaracin pre5ia de la definicin V*Nomre-V. 'nea *N+ ",nea-
El nombre al 3ue se 3uiere aplicar la definicin fue pre5iamente empleado en
otra definicin, por lo 3ue no debera reutili2arse. El ensamblador tomara la ultima
definicin como la 58lida.
Nomre. ,dentificador de la definicin 3ue ya se ha empleado
anteriormente.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo de la ad5ertencia
)*efine
%/0i%& 100
%ini%& 0
%e*i/ 80
%/0i%& 1"0
)&r: 100H
5/3t& : %'i 2, 8
/** 2
6%p 5/3t&
El nombre ma0imo se utili2a dos 5eces para reali2ar una definicin. .e esta
forma el 5alor de ma0imo puede ser /++ o /-+. Por defecto ser8 /-+.
=dvertencia
'
'a directi5a define no necesita direccin origen. 'nea *N+ ",nea-
48 Simulador del microprocesador 8085
Solo las directi5as ..)4) y .#<: re3uieren una direccin de origen a partir de
la cual situar datos o instrucciones respecti5amente.
'as definiciones solo se emplean en tiempo de compilacin, reali28ndose las
oportunas sustituciones. Si se especifica una direccin, esta es reconocida pero no se
emplear8 en ning9n momento.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo de la ad5ertencia
)*efine A0h
%/0i%& 100
%ini%& 0
%e*i/ 80
)&r: 100H
5/3t& : %'i 2, 8
/** 2
6%p 5/3t&
El nombre ma0imo se utili2a dos 5eces para reali2ar una definicin. .e esta
forma el 5alor de ma0imo puede ser /++ o /-+. Por defecto ser8 /-+.
=dvertencia' 'a direccin V*dire))i.n-V no se puede almacenar en /1 bits.
'nea *N+ ",nea-
El procesador C+CB solo puede trabajar con direcciones de /1 bits. Cual3uier
otra direccin mayor de 1BB0B %o ****h( no es direccionable.
Si una directi5a ..)4) o .#<: reciben una direccin origen mayor a ****h se
generar8 esta ad5ertencia. Solo los /1 bits menos significati5os de la direccin se
almacenar8n.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
Ensamblador para 8085 49
)&r: 1FFFFH
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
=dvertencia
'
El 5alor V*Va"or-V no se puede almacenar en un byte. 'nea *N+
",nea-
)l reali2ar una declaracin de datos en forma de bytes estos deben de ser
representables en C bits. Si no ocurre esto se lan2a esta ad5ertencia.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)*/t/ 0H
*< "8$, 100h, 1000000002
)&r: 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
=dvertencia' El 5alor V*Va"or-V no se puede almacenar en un Hord. 'nea *N+
",nea-
Como en el caso anterior, con las palabras de /1 bits. Si el 5alor declarado no se
puede representar en /1 bits se lan2a esta ad5ertencia.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
50 Simulador del microprocesador 8085
)*/t/ 0H
*? $88#$, 10000h, 100000000000000002
)&r: 100H
%'i 2, 8
5/3t& : %&' /,2
/** 2
6%p 5/3t&
=dvertencias' El primer operando %*O&-( no se puede representar en C bits.
'nea *N+ ",nea-
El segundo operando %*O&-( no se puede representar en C bits.
'nea *N+ ",nea-
Ciertas instrucciones permite especificar un operando inmediato de C bits. Estas
ad5ertencias aparecen cuando el operando inmediato no puede representarse en C bits.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
%'i 2, 100h
5/3t& : %&' /,2
/** 2
6%p 5/3t&
=dvertencia
'
El primer operando %*O&-( no se puede representar en /1 bits. 'nea
*N+ ",nea-
Ciertas instrucciones permite especificar un operando inmediato de /1 bits. Esta
ad5ertencia aparece cuando el operando inmediato no puede representarse en /1 bits.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
Ensamblador para 8085 51
)&r: 100H
%'i 2, FFh
5/3t& : %&' /,2
/** 2
6%p 10000h
=dvertencia
'
El segundo operando %*O&-( no se puede representar en /1 bits.
'nea *N+ ",nea-
Ciertas instrucciones permite especificar un operando inmediato de /1 bits. Esta
ad5ertencia aparece cuando el operando inmediato no puede representarse en /1 bits.
N+ de ",nea. 'nea en la 3ue se encuentra el error.
Ejemplo del error
)&r: 100H
%'i 2, FFh
5/3t& : %&' /,2
/** 2
LXI H, 10000h

También podría gustarte