Está en la página 1de 36

Programacion Assembler Teoria Ingenieria en Sistemas de

Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
PROGRAMACION EN ASSEMBLER
EL REPERTORIO DE INSTRUCCIONES
Un microprocesador interpreta y ejecuta un repertorio de instrucciones denominado
instrucciones de maquina, estas instrucciones escritas sobre un editor en lenguaje
nomnico deben ser traducidas (compiladas) a cdigo binario ya que un
microprocesador solo entiende el cdigo binario.
El juego de instrucciones es diseado por el fabricante de microprocesadores y debe
cumplir unas caractersticas generales como las siguientes:
. !as instrucciones reali"an una funcin #nica y sencilla, por lo que su
descodificacin por la $%U es sencilla
&. Una misma instruccin utili"a siempre un numero fijo de operandos y
diferentes instrucciones pueden tener un numero distinto de operandos
'. !a codificacin de la instruccin es sistem(tica, puesto que facilita su
descodificacin
). !as instrucciones son autocontenidas e independientes, es decir que
contienen toda la informacin necesaria para ejecutarse. *eben e+presar: el
tipo de operacin a reali"ar, el ,alor o la posicin de los operandos, el lugar
donde se depositara el resultado y la ubicacin de la siguiente instruccin
!os bits de una instruccin binaria se di,ide en grupos llamados campos
Un campo para el cdigo de operacin que especifica la operacin que se
reali"ara
Un campo de referencia a los operandos que designa el ,alor del operando
o una direccin de la memoria o un cdigo para elegir un registro del
procesador que contiene al operando
Un campo de modo que especifica la forma en que se interpretara el campo
de direccin
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
!as instrucciones se pueden agrupar en tres categoras seg#n el tipo de accin que
reali"an. En la siguiente tabla se muestran estas categoras y se mencionan algunas
instrucciones de cada grupo ( cabe recordar que estas instrucciones no son
uni,ersales y su escritura y funcin dependen del microprocesador )
-./01U$$-2.E/ *E
013./4E1E.$-3 *E
*302/
lle,an datos de un lugar a otro de la
computadora sin alterar su
contenido
$arga !*
3lmacenamiento /0
5o,imiento 526E
-ntercambio 7$8
-ntroduccion %U/8
*escarga %2%
Entrada -.
/alida 2U0
-./01U$$-2.E/ *E
53.-%U!3$-9. *E
*302/
ARITMTICAS :
las cuatro operaciones aritm:ticas
b(sicas
-ncremento -.$
*ecremento *E$
/uma 3**
1esta /U;
5ultiplicacin 5U!
*i,ision *-6
LGICAS Y DE MANIPULACIN
DE BIT :
operaciones binarias con bits o
cadena de bits
%oner en cero $!1
-niciali"ar /E0
$omplemento $25
3.* 3.*
21 21
$orrimiendo a la
derec<a
/81
$orrimiento a la
i"quierda
/8!
-./01U$$-2.E/ *E
$2.012! *E
%12=1353
$ambia el contenido del Contador
de Programa, alterando el flujo de
control
;ifurcacin ;1
/alto >5%
!lamada a subrutina $3!!
1egreso de subrutina 1E0
$omparacion $5%
;ifurcar si es cero ;?
;ifurcar si no es cero ;.?
;ifurcar si <ay acarreo ;$
;ifurcar si es mayor ;8
MODOS DE DIRECCIONAMIENTO
!a operacin indicada en el cdigo de operacin de la instruccin se deber( reali"ar
con datos almacenados en registros o en memoria, la forma en que se escogen los
operandos depende del modo de direccionamiento de la instruccin.
3 continuacin se anali"an los modos de direccionamiento que utili"an los
microprocesadores
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
1. Modo Implcio: el operando aparece implcitamente en el cdigo de operacin
$25 3 3 (complementar el acumulador)
!. Modo I"m#di$o: el operando se especifica en la instruccin misma
!*3 @.;1 3 .;1 (cargar el acumulador con un numero)
%. Modo d# &#'i(&o: el operando se encuentra en un registro, el nombre del registro
se indica en la instruccin
!*3 1 3 1 (cargar el accumulador con el contenido de 1)
). Modo I"di&#co d# &#'i(&o(: el operando se encuentra en la memoria, la
direccin de memoria esta en el registro que se indica en la instruccin
!*3 (1) 3 5A1B (cargar el accumulador con el contenido de la
memoria en la direccin indicada por 1)
*. Modo di&#co: el campo de direccin de la instruccin seala la posicin del
operando en la memoria
!*3 3*1/ 3 5A3*1/B (cargar el acumulador con el contenido de
la memoria en la posicin 3*1/)
+. Modo i"di&#co: el campo de direcciones de la instruccin seala la direccin
donde esta la ,erdadera direccin del operando
!*3 (3*1/) 3 5A5A3*1/BB (cargar el acumulador con el contenido
de la memoria en la posicin
5A3*1/B)
,. Modo &#l$i-o: el operando se encuentra en la memoria, la direccin de memoria
efecti,a se obtiene como resultado de sumar al contador de programa un dato
num:rico aportado por la instruccin
!*3 C3*1/ 3 5A%$ D 3*1/B (cargar el accumulador con el
contenido de la memoria en la
direccin resultante de sumar el
contenido del %$ con el dato
3*1/)
.. Modo i"d#/$do: similar al anterior pero reempla"ando el %$ por un registro ndice
!*3 C3*1/ (1) 3 5A1 D 3*1/B
!os programas utili"an normalmente ,arios modos de direccionamiento que facilitan:
a) El a<orro de espacio: 5ientras mas cortas sean las instrucciones
menos espacio de almacenamiento necesitaran los programas y menos
bits se tendr(n que leer de la memoria para ejecutarlas
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
b) !a generacin de cdigo reubicable: es deseable que un programa
pueda ser cargado en diferentes "onas de memoria
c) El manejo de estructura de datos: El manejo de estructuras de datos
tales como tablas, colas, pilas, etc facilitan o simplifican el
direccionamiento de datos
0ORMATO DE LAS INSTRUCCIONES
*iferentes procesadores tienen diferentes formatos de instrucciones, ese es un
aspecto que da a cada procesador su caracterstica de <ardEare especial y define su
rique"a y fle+ibilidad.
El formato de la instruccin indica los campos y el tamao de los mismos para cada
instruccin. En el diseo del formato de las instrucciones la primera decisin a
considerar es el tamao de las instrucciones. %ara tomar esa decisin se consideran
los siguientes aspectos:
El tamao de la memoria
!a organi"acin de la memoria
!a estructura de buses
!a complejidad de la $%U y su ,elocidad
!as caractersticas generales que deben reunir los formatos de instrucciones son:
. *ebe e+istir uno o pocos formatos de instrucciones, cuando menos formatos
e+istan mas simple ser( la descodificacin y por ende la unidad de control que
se encarga de esta tarea
&. !os formatos son sistem(ticos. !os campos del mismo tipo tienen la misma
longitud y deben ocupar la misma posicin dentro de la instruccin
'. %ara acortar el tamao se emplean las t:cnicas de direccionamiento implcito.
3si e+ceptuando las instrucciones de bifurcacin no e+iste campo de
instruccin siguiente.
). !os tamaos de los formatos encajan f(cilmente en la palabra del computador.
!o mas corriente es que el formato ocupe una palabra, pero tambi:n son
frecuentes los formatos de media ( F ), una y media ( F ) y de dos ( &)
palabras.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
G. $uando se tienen ,arios formatos el cdigo de operacin diferencia entre ellos
H. !os tamaos de los campos que e+presan direcciones, ya sean de registros o
de memoria principal, deben corresponder a los mapas de memoria de
direccionamiento del procesador.
/e ilustra un formato de instrucciones de un procesador de H bits di,idido en cuatro
campos generales
&
Tipo
H
C1di'o d# op#&$ci1"
)
R#'.2modo
)
&#'i(&o
El campo Cdigo de Operacin especifica la operacin que se reali"a. 8ay tantos
cdigos de operacin como instrucciones diferentes que posea el microprocesador.
El numero de instrucciones que posea ,endr( limitado por la longitud de este campo.
El cdigo de operacin implica normalmente el tipo de operando, por ello se emplean
normalmente distintos cdigos de operacin para diferenciar una misma instruccin
con diferentes tipos de datos.
El campo de direccin (aqu formado por dos subcampos) puede contener ,arias
di,isiones para identificar las posiciones de memoria o los registros internos del
microprocesador donde se encuentran los operandos.
El campo tipo de dos bits determina la e+istencia de cuatro tipos diferentes de
instrucciones
Tipo 0 : Registro Registro
3qu a los operandos se accede a tra,es de registros internos del microprocesador,
estos registros pueden contener el operando (directo) o la direccin donde se
encuentra el operando (indirecto)
G ) ' I J H ) ' & K
K K $digo de 2peracin /- /1$ *- */0

0ipo K: registro L registro
0ipo : 5emoria L
registro
0ipo &: ;ifurcacin
0ipo ': -mplcito
0 = DIRECTO
1 = INDIRECTO
REGISTRO
FUENTE
REGISTRO
DESTINO
0 = DIRECTO
1 = INDIRECTO
Direccin
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
Ejemplos:

Tipo 1 : Memoria Registro
Este tipo de instrucciones permite una amplia forma de acceder a los operandos que
podran ser dos o uno solo. En el caso de un solo operando este puede direccionarse
a tra,es de M o a tr,as de un registro interno del procesador
G ) ' I J H G ) ' & K
K $digo de 2peracin /* 52* - 1E=
*ireccin de bifurcacin (M)
Ejemplos:
Tipo 2 : Bifurcacion
El campo M contiene la direccion de salto del programa
CDIGO
HEXAD.
SI DI CDIGO
OPERACIN
OPERNDOS OPERACIN
0952 0 0 ADD R5, R2 R2 R2 + R5
095A 0 1 ADD R5, (R2) M[R2] M[R2] + R5
09D2 1 0 ADD (R5), R2 R2 R2 + M[R5]
CDIGO
HEXAD.
SD MOD MODO CDIGO
OPERACIN
OPERNDOS OPERACIN
4902 00 00 Directo ADD W, R2 R2 R2 + M[W]
53C2 11 XX Registro !R R2 R2 R2 + 1
03#"# 2 d#(i"o
KK N & 2per. 4te: palabra de memoria
*est.: registro
K N & 2per. 4te: registro
*est: palab. de memoria
K N 2perand. Especificado por M
y el campo 52*
N 2perand especif. por 1E= e -
(.o se usa M)
MODO DE DIRECC. DE 4
KK N 5odo de direccin directa
K N 5odo inmediato
K N 1elati,o al modo de %$
N 5odo de ndice
0 = DIRECTO
1 = INDIRECTO
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
G ) ' I J K
K $digo de 2peracin K K K K K K K K
*ireccin de bifurcacin (M)
Ejemplos :
Tipo : Modo !mp"icito
En el modo implicito no se requiere de una direccion para el operando
G ) ' I J K
$digo de 2peracin K K K K K K K K
Ejemplos :
E5EMPLO NUMRICO DE UNA INSTRUCCIN: 6!*6 ADD ADRS7 R1
CDIGO
HEXAD.
CDIGO
OPERACIN
OPERNDOS OPERACIN
A100 "R W "i#$rc%cion
A200 "RC W "i#$rc%cin con %c%rreo
A&00 CA'' W '(%)%*% % s$+r$tin%
CDIGO
HEXAD.
CDIGO
OPERACIN
OPERNDOS OPERACIN
,100 R-. Retorno *e /$+r$tin%
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
3qu se <a graficado el flujo de datos en una instruccin de suma (3**) con dos
operandos, uno de ellos se encuentra en un registro interno O1P y el otro operando
se encuentra en la posicin de memoria OKGKKP . .tese que la ejecucin de la
instruccin se inicia con el contador de programa direccionando a la posicin K&GK<,
lugar donde se encuentra la instruccin. El contador de programa se <a
incrementado y al final del proceso y apunta a la direccin de la pr+ima instruccin
que se debe ejecutar y el registro 1 contiene el resultado de la operacin.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
DIAGRAMA DE 0LU5O DE UNA INSTRUCCIN TIPO 6

/e intenta mostrar en un diagrama la lgica seguida por el microprocesador para


ejecutar una instruccin tipo OKP

El operando
fuente se
almacena en
un registro
temporario
!a direccin
que contiene
el registro se
transfiere a la
memoria.
El dato
contenido en
la memoria se
almacena en
un registro
temporario
El segundo
operando se
suma al
registro
temporario,
el resultado
se guarda
en el
registro */0
!a direccin que
contiene el registro
se transfiere a la
memoria.
El dato contenido
en la memoria se
suma al registro
temporario.
El resultado se
guarda en la
memoria
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
PROGRAMADO SOBRE EL MICROCONTROLADOR 8PIC9
%rograma fuente:
El programa fuente esta compuesto por una sucesin de lneas de programa. $ada
lnea de programa esta compuesta por ) campos separados por uno o m(s espacios
o tabulaciones. Estos campos son:
:Ei;3#$< Com$"do :Op#&$"do=(>< :?Com#"$&io<
!a etiqueta es opcional. El comando puede ser un mnemnico del conjunto de
instrucciones. El operando esta asociado al comando, si no <ay comando no <ay
operando, e inclusi,e algunos comandos no lle,an operando. El comentario es
opcional para el compilador aunque es buena pr(ctica considerarlo obligatorio para el
programador.
!a etiqueta, es el campo que empie"a en la primer posicin de la lnea. .o se
pueden insertar espacios o tabulaciones antes de la etiqueta sino ser( considerado
comando. -dentifica la lnea de programa <aciendo que el compilador le asigne un
,alor autom(ticamente. /i se trata de una lnea cuyo comando es una instruccin de
programa del microcontrolador, se le asigna el ,alor de la direccin de memoria
correspondiente a dic<a instruccin (location counter). En otros casos se le asigna un
,alor de una constante, o la direccin de una ,ariable, o ser( el nombre de una
macroinstruccin, etc.
El comando puede ser un cdigo mnemnico de instruccin del microcontrolador, o
una directi,a o pseudoinstruccin para el compilador. En el primer caso ser(
directamente traducido a cdigo de maquina, en el segundo caso ser( interpretado
por el compilador y reali"ara alguna accin en tiempo de compilacin como ser
asignar un ,alor a una etiqueta, etc.
El campo de par(metros puede contener uno o m(s par(metros separados por
comas. !os par(metros dependen de la instruccin o directi,a. %ueden ser n#meros
o literales que representen constantes o direcciones.
El campo de comentario debe comen"ar con un caracter punto y coma. .o necesita
tener espacios o tabulaciones separ(ndolo del campo anterior, e incluso puede
empe"ar en la primer posicin de la lnea. El compilador ignora todo el te+to que
contenga la lnea despu:s de un caracter punto y coma. *e esta manera pueden
incluirse lneas que contengan solo comentarios, y es muy buena pr(ctica <acer uso
y abuso de esta posibilidad para que los programas resulten autodocumentados.
Co"@3"o d# i"(&3ccio"#(
El conjunto de instrucciones de los microprocesadores %-$ H$G7 consiste en un
pequeo repertorio de solo '' instrucciones de & bits, que pueden ser agrupadas
para su estudio en tres a cinco grupos. En este curso se <a optado por clasificarlas,
desde el punto de ,ista del programador, en cinco categoras bien definidas de
acuerdo con la funcin y el tipo de operandos in,olucrados. En primer lugar se
agrupan las instrucciones que operan con bytes y que in,olucran alg#n registro de la
memoria interna. En segundo lugar se anali"aran las instrucciones que operan solo
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
sobre el registro M y que permiten cargarle una constante implcita o incluida
literalmente en la instruccin (literales). En tercer lugar se agrupan las instrucciones
que operan sobre bits indi,iduales de los registros de la memoria interna. En cuarto
lugar se clasifican las instrucciones de control de flujo del programa, es decir las que
permiten alterar la secuencia lineal de ejecucin de las instrucciones. %or #ltimo se
agrupan unas pocas instrucciones que llamaremos especiales, cuyas funciones o
tipos de operandos son muy especficos y no encajan en ninguna de las
clasificaciones anteriores.
I"(&3ccio"#( d# BA# ;3# op#&$" co" R#'i(&o(
Estas instrucciones pueden ser de simple o doble operando de origen. El primer
operando de origen ser( siempre el registro seleccionado en la instruccin, el
segundo, en caso de e+istir, ser( el registro M. El destino, es decir donde se
guardara el resultado, ser( el registro seleccionado o el M, seg#n se seleccione con
un bit de la instruccin.
El formato gen:rico de estas instrucciones es el siguiente :
K Q I J H G ) ' & bit K
* # # # # #
!os bits K a ) (G bits), denominados OfP permiten seleccionar uno de '& registros de la
memoria interna. El bit G, denominado OdP, permite especificar el destino del
resultado. /i d N el resultado se guardara en el registro seleccionado. /i d N K el
resultado se guardara en M. !os bits H a identifican la instruccin especifica a
reali"ar.
!as instrucciones siguientes son las tres operaciones lgicas de doble operando :
ANDWF f,d ;operacin AND lgica, destino = W f
IORWF f,d ;operacin OR lgica, destino = W f
XORWF f,d ;operacin XOR lgica, destino = W f
!os nombres mnemnicos de estas instrucciones pro,ienen de : 3.* M con 4,
-nclusi,e 21 M con 4 y 721 M con 4.
!as que siguen son las cuatro operaciones aritm:ticas y lgicas sencillas de simple
operando :
MOVF f,d ;moimiento de datos, destino = f
!OMF f,d ;complemento lgico, destino = NO" f
IN!F f,d ;incremento aritm#tico, destino = f $ %
D&!F f,d ;decremento aritm#tico, destino = f ' %
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
!os mnemnicos de estas instrucciones pro,ienen de : 526e 4ile, $25plement 4ile,
-.$rement 4ile y *E$rement 4ile.
En las siete instrucciones anteriores el #nico bit afectado de la palabra de estado del
procesador es el ?, que se pone en si el resultado de la operacin es KKKKKKKK, y
se pone en K si el resultado tiene cualquier otro ,alor.
3 continuacin siguen las dos instrucciones de rotacin de bits a tra,:s del $311R :
R(F f,d ;rotacin a la i)*+ierda, destino = f RO"
RRF f,d ;rotacin a la derec,a, destino = f RO"
En estas operaciones (1otate !eft 4ile y 1otate 1ig<t 4ile) los bits son despla"ados
de cada posicin a la siguiente, en sentido derec<o o i"quierdo. El despla"amiento es
cerrado, formando un anillo, con el bit $ ($311R) de la palabra de estado.
En estas dos instrucciones, el #nico bit afectado de la palabra de estado del
procesador es el bit $, que tomar( el ,alor que tenia el bit J o el bit K, seg#n sea el
sentido del despla"amiento.
Estas instrucciones son muy #tiles para la manipulacin de bits, y adem(s para
reali"ar operaciones aritm:ticas, ya que en numeracin binaria, despla"ar un n#mero
a la i"quierda es equi,alente a multiplicarlo por &, y <acia la derec<a, a di,idirlo por &.
!a instruccin siguiente reali"a el intercambio de posiciones entre los cuatro bits
menos significati,os y los cuatro m(s significati,os (nibble bajo y nibble alto).
-WA.F f,d ;intercam/ia ni//les, destino = -WA. f
Esta instruccin (/M3% 4ile) no afecta ninguno de los bits de la palabra de estado
del procesador.
Esta instruccin es muy #til para el manipuleo de n#meros ;$* empaquetados, en
los que en un solo byte se guardan dos dgitos ;$* (uno en cada nibble).

!as dos operaciones que siguen son la suma y la resta aritm:ticas :
ADDWF f,d ;s+ma aritm#tica, destino = f $ W
-01WF f,d ;resta aritm#tica, destino = f ' W
Estas operaciones (3** M a 4 y /U;stract M de 4) afectan a los tres bits de estado
$, *$ y ?.
El bit ? se pone en si el resultado de la operacin es KKKKKKKK, y se pone en K si el
resultado tiene cualquier otro ,alor.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
!a suma se reali"a en aritm:tica binaria pura sin signo. /i <ay un acarreo del bit J, es
decir que el resultado es mayor que &GG, el bit $ (carry) resulta , en caso contrario
resulta K. /i <ay un acarreo del bit ', es decir que la suma de las dos mitades
(nibbles) menos significati,as (bits K a ') resulta mayor que G, se pone en el bit
*$ (digit carry), en caso contrario se pone en K.
"#emplos $
!! ! !!!
% ! !!!! ! D! 2 % !! !!!! ! D! 2
!!!! ! ! !! !!!! !

!a resta se reali"a sumando, en binario puro sin signo, el registro f m(s el
complemento a dos de M (el complemento a , o complemento lgico, m(s )
Ejemplos :
f ! ! ! !
& ' ! ! ! D! 2 ' ! ! ! D! 2
! !! ! !!! ! !

equi(alente a $
f ! ! ! !
cmp)2 & % !!! ! ! D! 2 % !!! !! ! D! 2
! !! ! !!! ! !
!os bits de estado $ y *$ toman el ,alor normal correspondiente a la suma de f con
el complemento a & de M. *e esta manera el significado para la operacin de resta
resulta in,ertido, es decir que $ (carry) es si no <ubo desborde en la resta, o dic<o
de otra manera, si el contenido de M es menor que el de f. El bit *$ se comporta de
manera similar, es decir que *$ es si no <ubo desborde en la mitad menos
significati,a, lo que equi,ale a decir que el nibble bajo del contenido de M es menor
que el del registro f.
!as instrucciones que siguen son de simple operando, pero son casos especiales ya
que el destino es siempre el registro seleccionado :
!(RF f ;/orrado de contenido, f = 3
MOVWF f ;copia contenido W f, f = W
!a instruccin $!14 ($!ea1 4ile) afecta solo al bit ? que resulta siempre K.
!a instruccin 526M4 (526e M a 4) no afecta ning#n bit de la palabra de estado.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
I"(&3ccio"#( d# BA# ;3# op#&$" (oB&# 4 A Li#&$l#(
Estas instrucciones se refieren todas al registro M, es decir que uno de los
operandos de origen y el operando de destino son siempre el registro M. En las
instrucciones de este grupo que tienen un segundo operando de origen, este es
siempre una constante de programa literalmente incluida en la instruccin, llamada
constante literal o simplemente literal.
El formato gen:rico de estas instrucciones es el siguiente :
K Q I J H G ) ' & bit K
0 0 0 0 0 0 0 0
!os bits K a J especifican la constante literal de I bits que se utili"ara en la
operacin.
!as tres instrucciones que siguen son las operaciones lgicas tradicionales, similares
a las que ya ,imos anteriormente, pero reali"adas entre una constante de programa y
el registro M :
IOR(W 4 ; operacin OR lgica, W = W 4
AND(W 4 ; operacin AND lgica, W = W 4
XOR(W 4 ; operacin XOR lgica, W = W 4
En estas tres instrucciones (-nclusi,e 21 !iteral M, 3.* !iteral M y 721 !iteral M)
el #nico bit afectado de la palabra de estado del procesador es el ?, que se pone en
si el resultado de la operacin es KKKKKKKK, y se pone en K si el resultado tiene
cualquier otro ,alor.
!a instruccin que sigue sir,e para cargar una constante de programa en el registro
M :
MOV(W 4 ;carga constante en W, W = 5
Esta (526e !iteral M) instruccin no afecta ninguno de los bits de estado del
procesador.
!a instruccin que sigue ($!ea1 M) no correspondera incluirla en este grupo, y
pertenece en realidad al primero, el de las instrucciones que operan sobre registros,
ya que se trata de un caso especial de la instruccin $!14, con destino M, y f N K. !a
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
incluimos aqu porque como se le <a asignado un mnemnico particular referido
especficamente al registro M, creemos que, desde el punto de ,ista del
programador, es m(s #til ,erla dentro del grupo de instrucciones referidas a M.
!(RW ;/orra el contenido de W, W = 3
3l igual que en la instruccin $!14, el #nico bit de estado afectado es el ? que
resulta .
I"(&3ccio"#( d# Bi
El formato gen:rico de estas instrucciones es el siguiente :
K Q I J H G ) ' & bit K
+ + + # # # # #
!os bits K a ) (G bits), denominados OfP, permiten seleccionar uno de '& registros de
la memoria interna. !os bits G a J, denominados ObP, permiten especificar el numero
de bit (K a J) sobre el que se operara. Estas instrucciones operan solamente sobre el
bit especificado, el resto de los bits del registro no son alterados. Estas instrucciones
no tienen especificacin de destino, ya que el mismo es siempre el registro
seleccionado.
1!F f,/ ;/orra el /it / de f ;/it f6/7 = 3
1-F f,/ ;coloca en +no el /it / de f ;/it f6/7 = %
Estas instrucciones (;it $lear 4ile y ;it /et 4ile) no afectan ning#n bit de la palabra
de estado del procesador.
I"(&3ccio"#( d# Co"&ol
GOTO C ?($lo $ l$ po(ici1" C =D Bi(> d#l p&o'&$m$
Esta es la tpica instruccin de salto incondicional a cualquier posicin de la memoria
de programa (que en la mayora de los microprocesadores con,encionales se llama
>U5%). !a constante literal S es la direccin de destino del salto, es decir la nue,a
direccin de memoria de programa a partir de la cual comen"ar(n a leerse las
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
instrucciones despu:s de ejecutar la instruccin =202. Esta instruccin simplemente
carga la constante S en el registro %$ (contador de programa). !a #nica complicacin
de esta instruccin es que la constante S es de solo Q bits, mientras que el registro
%$ es de bits, ya que en el H$GJ debe permitir direccionar una memoria de
programa de & T. !os dos bits faltantes, bit Q y K del %$, son tomados
respecti,amente de los bits de seleccin de p(gina %3K y %3 de la palabra de
estado. Este comportamiento particular <ace que la memoria de programa apare"ca
como di,idida en paginas de G& posiciones como se ,era m(s adelante. El
programador debe tener en cuenta que antes de ejecutar una instruccin =202 es
posible que <aya que programar los bits %3K y %3.
!a que sigue es la instruccin de llamado a subrutina:
!A(( 4 ;salto a la s+/r+tina en la posicin 4 68 /its7
/u comportamiento es muy similar al de la instruccin =202, sal,o que adem(s de
saltar guarda en el stacS la direccin de retorno de la subrutina (para la instruccin
1E0!M). Esto lo <ace simplemente guardando en el stacS una copia del %$
incrementado, antes de que el mismo sea cargado con la nue,a direccin S. !a #nica
diferencia con la instruccin =202 respecto de la forma en la que se reali"a el salto,
es que en la instruccin $3!! la constante S tiene solo I bits en ,e" de Q. En este
caso tambi:n se utili"an %3K y %3 para cargar los bits Q y K del %$, pero adem(s
el bit I del %$ es cargado siempre con K. Esto <ace que los saltos a subrutina solo
puedan reali"arse a posiciones que est:n en las primeras mitades de las paginas
mencionadas. El programador debe tener en cuenta este comportamiento y
asegurarse de ubicar las posiciones de inicio de las subrutinas en las primeras
mitades de las paginas.
!a instruccin que aparece a continuacin es la de retorno de subrutina:
R&"(W 4 ;retorno de s+/r+tina con constante 4, W = 4
Esta (1E0urn con !iteral in M) instruccin produce el retorno de subrutina con una
constante literal S en el registro M. !a operacin que reali"a consiste simplemente en
sacar del stacS un ,alor y cargarlo en el %$. Ese ,alor es el %$ incrementado antes
de reali"ar el salto, de la ultima instruccin $3!! ejecutada, por lo tanto es la
direccin de la instruccin siguiente a dic<o $3!!.. *ado que el stacS es de bits,
el ,alor cargado en el %$ es una direccin completa, y por lo tanto se puede retornar
a cualquier posicin de la memoria de programa, sin importar como est:n los bits de
seleccin de pagina. Esta instruccin adem(s carga siempre una constante literal en
el registro M. Ra que esta es la #nica instruccin de retorno de subrutina de los
%-$H$G7, no <ay en estos microprocesadores forma de retornar de una subrutina
sin alterar el registro M. %or otro lado, y con una metodologa especial de
programacin, un conjunto de sucesi,as instrucciones 1E0!M puede ser usado
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
como una tabla de ,alores constantes incluida en el programa (Ej. : tablas ;$*UJ
seg., <e+aU3/$--, etc.).
3 continuacin se presentan las dos #nicas instrucciones de OsalteoP (sSip)
condicional. Estas instrucciones son los #nicos medios para implementar
bifurcaciones condicionales en un programa. /on muy generales y muy poderosas ya
que permiten al programa tomar decisiones en funcin de cualquier bit de cualquier
posicin de la memoria interna de datos, y eso incluye a los registros de perif:ricos,
los puertos de entradaUsalida e incluso la palabra de estado del procesador. Estas
dos instrucciones reempla"an y superan a todo el conjunto de instrucciones de salto
condicional que poseen los microprocesadores sencillos con,encionales (salto por
cero, por no cero, por carry, etc.).
1"F-! f,/ ;salteo si /it = 3, /it = f637 saltea
1"F-- f,/ ;salteo si /it = %, /it = f6%7 saltea
;04/$ (;it 0est 4ile and /Sip if $lear) saltea la pr+ima instruccin si el bit b del
registro f es cero. !a instruccin ;04// (;it 0est 4ile and /Sip if /et) saltea si el bit
es . Estas instrucciones pueden usarse para reali"ar o no una accin seg#n sea el
estado de un bit, o, en combinacin con =202, para reali"ar una bifurcacin
condicional.
&9emplo % :
- - - - - - - - - - - - -
- - - - - - - - - - - - -
btfsc fl!s"#$% &s' ( ##%c)* +l #+l*,
-%cf t-+./* &-%c#+.+%t* c*%t)*# )+ t-+./*
- - - - - - - - - - - - -
- - - - - - - - - - - - -

&9emplo ; :
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
V V V V V V V V V V V V V
V V V V V V V V V V V V V
mo,f tiempo,E Wtesteo por tiempo N HK
+orlE HK
btfss /030U/,?
goto accX& Wsalto si tiempo YZ HK
V V V V V V V V V V V V V Waccin
V V V V V V V V V V V V V
V V V V V V V V V V V V V
goto accXfin
accX&
V V V V V V V V V V V V V Waccin &
V V V V V V V V V V V V V
V V V V V V V V V V V V V
accXfin Wac( se unen los caminos
!as instrucciones que siguen son casos especiales de las de incremento y
decremento ,istas anteriormente. Estas instrucciones podran categori"arse dentro
del grupo de instrucciones orientadas a byte sobre registros (primer grupo), ya que
efecti,amente operan sobre los mismos, y el formato del cdigo de la instruccin
responde al de ese grupo, pero, a diferencia de las otras, pueden adem(s alterar el
flujo lineal del programa y por eso se les incluy en este grupo.
D&!F-2 f,d ;decrementa < saltea s= 3, destino= f ' %, = 3
saltea
IN!F-2 f,d ;incrementa < saltea s= 3, destino= f $ %, = 3
saltea
Estas dos instrucciones (*E$rement 4ile and /Sip if ?ero, e -.$rement 4ile and /Sip
if ?ero) se comportan de manera similar a *E$4 e -.$4, sal,o que no afectan a
ning#n bit de la palabra de estado. Una ,e" reali"ado el incremento o decremento, si
el resultado es KKKKKKKK, el microprocesador salteara la pr+ima instruccin del
programa. Estas instrucciones se utili"an generalmente en combinacin con una
instruccin de salto (=202), para el diseo de ciclos o la"os (loops) de instrucciones
que deben repetirse una cantidad determinada de ,eces.
E@#mplo:
clrf K Wpongo cero en la posicin K de la memoria interna
loop Wlo que sigue se ejecutar( &GH ,eces
.....................................
.....................................
.....................................
incfs" K, Wincremento la posicin K <asta que llegue a K
goto loop Wsi no llego a cero ,oy a repetir la secuencia
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
Wcuando llegue a cero salteo el goto
..................................... Wy sigue la continuacin del programa
.....................................
.....................................
I"(&3ccio"#( E(p#ci$l#(
En este grupo se reunieron las instrucciones que controlan funciones especficas del
microprocesador o que act#an sobre registros especiales no direccionados como
memoria interna normal.
!a instruccin que sigue es la tpica .2 2%E130-2., e+istente en casi todos los
microprocesadores.
NO. ;no ,ace nada, cons+me tiempo
Esta instruccin solo sir,e para introducir una demora en el programa, equi,alente al
tiempo de ejecucin de una instruccin. .o afecta ning#n bit de la palabra de estado.
!a siguiente es una instruccin especifica de control de los puertos de entradaUsalida.
"RI- f ;carga el tristate control, "RI-f = W
Esta instruccin (01-/tate) carga el registro de control de los buffers tristate de un
puerto de entrada salida (data direccin register), con el ,alor contenido en M. El
par(metro f debe ser la direccin de memoria interna del puerto, aunque el ,alor M
no ser( cargado en el puerto sino en el registro de tristate del mismo. !os ,alores
,alidos para f son ) y G en los H$G)UGH y ), G y H en los H$GGUGJ. Esta instruccin
no afecta ning#n bit de la palabra de estado.
!a siguiente instruccin sir,e para programar el registro 2%0-2. que controla el
10$$ y prescaler
O."ION ;carga el registro O."ION, O."ION = W
El registro 2%0-2. no es accesible como memoria interna y solo se lo puede
programar con esta instruccin. Esta instruccin no afecta ning#n bit de la palabra de
estado.
!a instruccin que sigue borra el contador del Eatc< dog timer. Este registro tampoco
esta accesible como memoria, y esta es la #nica instruccin que lo modifica.
!(RWD" ;/orra el >atc, dog timer, WD" = 3
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
Esta instruccin, adem(s, coloca en uno los bits %* (poEer doEn) y 02 (timeVout) de
la palabra de estado.
!a siguiente es una instruccin especial de control del microcontrolador que lo pone
en el modo poEer doEn. En este modo el microprocesador se detiene, el oscilador se
apaga, los registros y puertos conser,an su estado, y el consumo se reduce al
mnimo. !a #nica forma de salir de este estado es por medio de un reset o por timeV
out del Eatc< dog timer.
-(&&. ;coloca el ?! en modo sleep, WD" = 3
Esta instruccin, adem(s, borra el bit %* (poEer doEn) y setea el bit 02 (timeVout) de
la palabra de estado.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
R#(3m#" d# i"(&3ccio"#( =cl$(iEic$ci1" (#'F" #l E$B&ic$"# #" &#( '&3po(>:

Instrucciones orientadas a byte:
Instrucciones orientadas a bit:
Instrucciones orientadas a literal y control:
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
En esta tabla de resumen del conjunto de instrucciones se pueden obser,ar los
mnemnicos, la e+plicacin, el n#mero de ciclos, el cdigo de m(quina y los bits
afectados del registro /030U/ para cada una de las instrucciones.
Modo( d# di&#ccio"$mi#"o
Di&#ccio"$mi#"o d# l$ m#mo&i$ d# d$o( =RAM>
!a memoria interna se direcciona en forma directa por medio de los G bits OfP
contenidos en las instrucciones que operan sobre registros. *e esta manera se
puede direccionar cualquier posicin desde la KK a la 4. $omo se ,i en el captulo
correspondiente a los mapas de memoria, las direcciones K a 4 corresponden a
los bancos de registros, por lo tanto, en los microcontroladores que tengan m(s de
un banco, antes de acceder a alguna ,ariable que se encuentre en esta "ona, el
programador deber( asegurarse de <aber programado los bits de seleccin de banco
en el registro 4/1.
!os registros especiales y de uso general de la posicin KK a la Kf est(n presentes
en todos los %-$H$G7, al igual que el banco K de registros. !os bancos , & y ' de
registros est(n presentes solo en el H$GJ.

El registro 4/1, adem(s de ser,ir para seleccionar el banco acti,o, sir,e como
puntero para direccionamiento indirecto. !a posicin KK del mapa de 135 es la
llamada direccin indirecta. / en cualquier instruccin se opera con la direccin KK,
en realidad se estar( operando con la direccin a donde apunte el contenido del
4/1. %or ejemplo si el 4/1 contiene el ,alor ), una instruccin que opere sobre la
direccin K, operara en realidad sobre la direccin ). /e puede decir en este
ejemplo que la posicin ) de memoria fue direccionada en forma indirecta a tra,:s
del puntero 4/1.
E@#mplo :
W Esta porcin de programa borra G posiciones de memoria a partir de la direccin &
4/1 equ K) W(definicin al comien"o del programa)
.....................................
.....................................
mo,lE G Wprepara para repetir G ,eces
mo,Ef KI W(el registro KI es el contador del loop)
mo,lE &< Wapunta a la direccin &<
mo,Ef 4/1 W
loop:
clrf K Wborra una posicin de memoria
incf 4/1 Wapunta a la siguiente
decfs" KI Wsi toda,a no borra todas
goto loop Wsige borrando
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
.....................................
.....................................
El direccionamiento indirecto es muy #til para el procesamiento de posiciones
consecuti,as de memoria, como en el ejemplo, o para el direccionamiento de datos
en subrutinas.
Di&#ccio"$mi#"o d# l$ m#mo&i$ d# p&o'&$m$ =EPROM7 OTP>
!a instruccin =202 dispone solo de Q bits en el cdigo de operacin para
especificar la direccin de destino del salto. 3l ejecutar una instruccin =202 el
microprocesador toma los dos bits que restan para completar la direccin de bits,
de los bits G y H de la palabra de estado. Estos #ltimos son llamados bits de
seleccin de p(gina (%3K y %3). El programador deber( asegurarse de que estos
dos bits tengan el ,alor correcto antes de toda instruccin =202. 6er figura

Direccion%)iento *irecto con instr$ccin 12.2
*eber( tenerse en cuenta adem(s que es posible a,an"ar de una p(gina a otra en
forma autom(tica cuando el %$ se incrementa. Esto ocurre si el programa empie"a
en una p(gina y sigue en la siguiente. /in embargo, al incrementarse el %$ desde la
#ltima posicin de una p(gina a la primera de la siguiente, lo( Bi( PA6 A PA1 "o (#
modiEic$", y por lo tanto s se ejecuta una instruccin =202, $3!! o alguna que
act#e sobre el %$, esta producir( un salto a la p(gina anterior, a menos que el
programador tenga la precaucin de actuali"ar el ,alor de dic<os bits. %or este
moti,o es con,eniente di,idir el programa en mdulos o rutinas que est:n confinados
a una p(gina.
En el caso de la instruccin $3!!, el direccionamiento se complica un poco m(s, ya
que la misma solo dispone de I bits para especificar la direccin de destino salto. En
este caso tambi:n se utili"an los mismos bits de seleccin de p(gina para completar
los bits d:cimo y decimoprimero de la direccin, pero falta el no,eno bit. En estas
instrucciones este bit se carga siempre con K, lo que implica que solo se pueden
reali"ar saltos a subrutina a las mitades inferiores de cada p(gina. En este caso
tambi:n el programador deber( asegurarse que el estado de los bits %3K y %3 sea
el correcto al momento de ejecutarse la instruccin. 6er figura

Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
Direccion%)iento *irecto con instr$ccin CA''
!as instrucciones que operan sobre el %$ como registro y alteran su contenido
pro,ocando un salto, responden a un mecanismo muy similar al de las instrucciones
$3!! para la formacin de la direccin de destino. En este caso los bits K a J son el
resultado de la instruccin, el bit I es K y los bits restantes se toman de %3K y %3.
Este mecanismo se llama paginado, y a pesar de que representa una complicacin
bastante molesta para el programador, resulta muy #til ya que permite ampliar la
capacidad de direccionamiento de memoria de programa para las instrucciones de
salto.
GERRAMIENTAS DE DESARROLLO
H3I #( #l MPLAB J
E! 5%!3; es un OEntorno de *esarrollo -ntegrado O (-ntegrated *e,elopment
En,ironment, -*E) que corre en OMindoEs O, mediante el cual Usted puede
desarrollar aplicaciones para los microcontroladores de las familias %-$ HUJ.
E! 5%!3; le permite a Usted escribir, depurar y optimi"ar los programas (firmEare)
de sus diseos con %-$ HUJ. E! 5%!3; incluye un editor de te+to, un simulador y
un organi"ador de proyectos. 3dem(s, el 5%!3; soporta el emulador %-$53/0E1
y a otras <erramientas de desarrollo de 5icroc<ip como el %-$/0310 V %lus.
D# ;3# Eo&m$ l# $A3d$ #l MPLAB J
Co" #l MPLAB U(#d p3#d#:
*epurar sus programas fuente.
*etectar errores autom(ticamente en sus programas fuente para editarlos.
*epurar los programas utili"ando puntos de corte (breaSpoints) mediante
,alores de los registros internos.
2bser,ar el flujo del programa con el simulador 5%!3; V/-5, seguirlo en
tiempo real utili"ando el emulador %-$53/0E1.
1eali"ar medidas de tiempo utili"ando un cronmetro.
5irar ,ariables en las ,entanas de obser,acin.
Encontrar respuestas r(pidas a sus preguntas, utili"ando la 3yuda en lnea del
5%!3;.

Programacion Assembler Teoria Ingenieria en Sistemas de


Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
LAS GERRAMIENTAS DEL MPLAB
El 2rgani"ador de %royectos (%royect 5anager).
El organi"ador de proyectos (%royect 5anager) es parte fundamental de 5%!3;. /in
crear un proyecto Usted no puede reali"ar depuracin simblica. $on el 2rgani"ador
de %royectos (%royect manager) puede utili"ar las siguientes operaciones:
$rear un proyecto.
3gregar un arc<i,o de programa fuente de proyecto.
Ensamblar o compilar programas fuente.
Editar programas fuente.
1econstruir todos los arc<i,os fuente, o compilar un solo arc<i,o.
*epurar su programa fuente.
SoEK$&# #"($mBl$do&:
El softEare ensamblador que presenta 5icroc<ip ,iene en dos presentaciones, una,
para entorno *2/ llamado 5%3/5.E7E y la otra, para entorno MindoEs llamado
5%3/5M-..E7E
!as dos presentaciones soportan a 02*2/ los microcontroladores de la familia %-$
de 5icroc<ip.
El conjunto de instrucciones de los microcontroladores %-$ es en esencia la base del
lenguaje ensamblador soportado por este softEare.

Di&#ci-$( d# 3(o E&#c3#"#:
/on instrucciones para el compilador.
LDE0INE
ej. @define YnombreZ AY,alor a rempla"arZB
e+plicacin: declara una cadena de te+to como substituto de otra
END
ej. end
e+plicacin: indica fin de programa
EHU
ej. status equ KG
e+plicacin: define una constante de ensamble
INCLUDE
ej. include Y%-$H4I).<Z
e+plicacin: incluye en el programa un arc<i,o con cdigo fuente
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
ORG
ej. org K+KK
e+plicacin: ensambla a partir de la direccin especificada
%ara informacin m(s completa referirse a la gua r(pida del 5%3/5.
Una ,e" instalado adecuadamente el 5%!3;, para reali"ar la simulacin de un
programa deben seguirse los siguientes pasos:
Edite en un arc<i,o de te+to el siguiente programa:
?#@#mplo:
status equ K+K' W<ace equi,alencia entre el smbolo status indic(ndolo como ' en <e+adecimal
$ont equ K+&K
4 equ
org K Windica posicin de memoria desde donde se ensambla
-nicio
mo,lE K+K4 Wcarga de E con el ,alor constante G (literal)
mo,Ef $ont Wel contenido de E se pasa al reg. $2.0
!oop
decfs" $ont,4 Wdecremento de $ont y elude siguiente siNK
goto !oop Wsalto incondicional a !oop
goto C W/alto incondicional aqui mismo
end W4in del cdigo

!ista de pasos:
. 8aga doble clicS en el cono correspondiente a 5%!3;.
&. $rear el arc<i,o fuente correspondiente (men# 4ile....eE /ource).
'. /al,e el arc<i,o (con e+tensin .3/5) una ,e" terminada su edicin (men#
4-!E.../a,e).
). *ebe a continuacin crearse un nue,o proyecto (men# %roject....eE %roject).
G. $uando apare"ca la ,entana de .eE %roject editar las cajas de te+to:
%roject pat< and .ame y *e,elopment 5ode, <acer clicS en Y2TZ.
H. En la siguiente ,entana Edit %roject, <acer clicS en la seccin .onVproject files
sobre el nombre del arc<i,o fuente reali"ado en los pasos & y '.
J. 8aga clicS en el botn YNadd y luego de que :ste apare"ca en la seccin
%roject 4iles <aga clicS sobre el botn Y2TZ.
I. /al,ar el proyecto (en el men# %roject.../a,e project).
Q. 1eali"ar la [construccin de todo el proyecto[ (men# %roject...;uild 3ll).
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
K. En esta etapa se reali"a en forma autom(tica el ensamble de nuestro
programa fuente y el ,aciado de :ste en memoria de simulacin. El proceso
de ensamble generar( un arc<i,o de errores en caso de que estos e+istan, s
es as deben corregirse directamente sobre el arc<i,o fuente, sal,ar las
correcciones y reconstruir el proyecto (men# %roject...;uild 3ll).
YYYEn esta etapa del proceso ya se tiene el entorno listo para la simulacinZZZ
Mi($ pic$ d#l #"o&"o MPLAB
$omo en la mayora de las aplicaciones MindoEs la pantalla se di,ide en ,arias
secciones:
. ;arra de ttulo: /e obser,a el nombre del proyecto
&. ;arra de menus: 3cceso a las diferentes opciones del entorno
'. ;arra de <erramientas: $ada cono ejecuta las acciones correspondientes
). ;arra de estados: -ndica el estado del entorno y sus ,entanas
Sim3l$ci1":
. 1esetear el procesador (men# *ebug...1un...1eset) con 4H con el cono
correspondiente en la barra de <erramientas.
&. $rear una nue,a ,entana donde se incluyan las ,ariables que queremos tener en
cuenta (MindoE....eE Matc< MindoE)
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
'. Empe"ar a correr paso a paso el programa <aciendo el seguimiento detallado de
todos y cada uno de los pasos (men# *ebug...1un.../tep) con la tecla 4J con el
cono correspondiente en la barra de <erramientas.
El proceso de simulacin nos permite detectar y corregir problemas de lgica,
problemas de situaciones que no <ayamos tenido en cuenta que son errores que no
pueden ser detectados en el momento del ensamble del programa.
S3B&3i"$( A ll$m$do(
IMPORTANCIA DE LAS RUTINAS =N>
!a mayora de los microcontroladores incluyen en su repertorio de instrucciones
algunas que permiten saltar a una rutina y, cuando se complementa su ejecucin,
retornar al programa principal
El empleo de subrutinas aporta muc<as ,entajas entre las que se destacan las
siguientes:
. /e pueden escribir como subrutinas secciones de cdigo y ser empleadas en
muc<os programas ( por ejemplo, la subrutina de e+ploracin de un teclado ).
&. *an a los programas un car(cter modular, es decir, se pueden codificar
diferentes mdulos para usarlos en cualquier programa.
'. /e reduce notablemente el tiempo de programacin, la deteccin de errores,
usando repetidamente una subrutina.
). El cdigo es m(s f(cil de interpretar, dado que las instrucciones de las
subrutinas no aparecen en el programa principal. /olo figuran las llamadas $3!!s.

LAS INSTRUCCIONES CALL Y RETURN =N>
!a instruccin $3!! ( llamada la subrutina) consigue que la ejecucin del programa
contin#e en la direccin donde se encuentra la subrutina a la que <ace referencia. Es
similar a =202 pero coloca en la pila la direccin de la siguiente instruccin que se
debe ejecutar despu:s de la $3!!.
!a subrutina finali"a con la instruccin 1E0U1. (1etorno de la subrutina) que
retoma la direccin guardada en le pila y la coloca en el contador del programa %$
continuando el flujo de control con la instruccin que sigue a la $3!!.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
En la familia %-$ de gama media la pila tiene oc<o ni,eles de memoria del tipo 4-42
(primero en entrar, #ltimo en salir). /i se produce la llamada a una subrutina durante
la ejecucin de otra subrutina, la direccin de retorno de esta segunda es colocada
en la cima de la pila sobre la direccin anterior. Esta segunda direccin es la primera
en salir de la pila mediante la instruccin 1E0U1..
$on la pila de oc<o ni,eles, una subrutina puede llamar a otra y :sta, a su ,e", llamar
a otra <asta un m(+imo de oc<o. !a gama baja slo puede reali"ar dos llamadas de
este tipo al poseer una pila de slo dos ni,eles.
!as subrutinas deben colocarse al comien"o de las p(ginas debido a que el bit I del
contador del programa es puesto a K por la instruccin $3!! (o por cualquier
instruccin que modifica el %$). !as subrutinas deben colocarse en la mitad inicial de
las p(ginas (las &GH palabras).
Co"(3l$ $ $Bl$(
En muc<as ocasiones es necesario para un programador efectuar una coincidencia
entre alguna cantidad de ,alores conocidos y un n#mero desconocido que se tiene
como ndice, por ejemplo, basados en el contenido de una posicin de memoria 135
(ndice) se puede obtener de una serie consecuti,a de datos almacenados en
memoria de programa (a estos datos [conocidos[ almacenados se le denomina
tabla), el dato despla"ado n posiciones adelante del comien"o de esta tabla, este
n#mero n corresponde al contenido de la posicin de memoria 135 ndice.
%rograma ejemplo:
offset equ K$< Wposicin de memoria 135
E equ K Wdestino M
f equ Wdestino 4
................
................
................
mo,f offset,E Wtomamos a M el n#mero n utili"ado como ndice
call $Bl$ Wposicin en donde se encuentra la serie de datos
Wen este sitio luego del retorno de la subrutina se tiene en M el dato ledo
W de la tabla
................
................
ta/la
addEf %$!,f Wse suma al %$ el contenido de M obteniendo como resultado un salto inde+ado
retlE 'K< Ws el contenido de M sumado al %$! es K se retorna en esta posicin, MN'K<
retlE '< Ws el contenido de M sumado al %$! es se retorna en esta posicin, MN'<
retlE '&< Ws el contenido de M sumado al %$! es & se retorna en esta posicin, MN'&<
retlE ''< Ws el contenido de M sumado al %$! es ' se retorna en esta posicin, MN''<
retlE ')< Ws el contenido de M sumado al %$! es ) se retorna en esta posicin, MN')<
retlE 'G< Ws el contenido de M sumado al %$! es G se retorna en esta posicin, MN'G<
. ?...
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
.

4inalmente y luego de obser,ar el ejemplo anterior, podemos anotar que antes de
<acer el llamado a la subrutina $Bl$, se debe cargar en el registro de trabajo M el
,alor del ndice y una ,e" se retorne de dic<a subrutina, es en este mismo registro de
trabajo en donde se obtiene el resultado de la consulta a la tabla (,emos que la
sucesin de instrucciones &#lK C se encuentra en memoria de programa).
Co"-#&(i1" $ ASCII

El conjunto de car(cteres 3/$-- (American Standard Code for Information
Interc<ange) es el cdigo de representacin en <e+adecimal del alfabeto, los
n#meros del K al Q y los principales smbolos de puntuacin y algunos car(cteres de
control. 6er 0abla '.'.
Con3$nto *e c%r4cteres A/C
$omo se obser,a en la tabla '.'., podemos di,idir a cada caracter representado en
<e+adecimal como una parte alta de ' bits (Mo( (i'"iEic$" cO$&$c#&) y una parte
baja de ) bits (L#$( (i'"iEic$" cO$&$c#&), o sea, la representacin total se <ace
con solo J bits.
*e los problemas usuales en la programacin est( el con,ertir un n#mero
<e+adecimal representado en I bits a dos car(cteres 3/$-- los cuales sean la
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
representacin de dic<o n#mero para permitir la ,isuali"acin en terminales de datos
tales como 5onitores de ,ideo o -mpresoras entre otras.
Ejemplo:
/e quiere representar el n#mero <e+adecimal ,6O cuya representacin en binario es
61116666B como los dos car(cteres 3/$-- [J[ y [K[, gr(ficamente:

& 0 +% (+0)+c-.l 12 b-ts3

5&5 505 +% sc-- 114 b-ts3

3&6 306 sc-- +% (+0)+c-.l 114 b-ts3

0ransport(ndolo a un programa:
.um8e+ equ K$< W posicin donde se almacena el n#mero a con,ertir
3scii8 equ K*< W posicin donde se almacena el resultado parte alta
3scii! equ KE< W posicin donde se almacena el resultado parte baja
.......................
.......................
mo,lE K4< W dato para enmascarar parte alta
andEf .um8e+,K W se enmascara la parte alta del n#mero <e+a y pasa a M
iorlE 'K< W con,ierte el n#mero en ascii
mo,Ef 3scii! W el n#mero queda sal,ado en la ,ariable de salida
mo,lE K4K< W dato para enmascarar parte baja
andEf .um8e+, W se enmascara la parte baja del n#mero <e+a y queda all
sEapf .um8e+,K W se in,ierten parte alta y baja
iorlE 'K< W con,ierte el n#mero en ascii
mo,Ef 3scii! W el n#mero queda sal,ado en la ,ariable de salida.
.....................
.....................
/e debe tener en cuenta que el ejemplo anterior funciona en forma correcta siempre
y cuando lo nibbles del n#mero <+adecimal a con,ertir, est:n en el rango de K a Q,
debe reali"arse un tratamiento adicional a estos si se encuentran en el rango de 3< a
4<. 1ealice en un programa esta condicin.
R$miEic$ci1" mFlipl#

$uando se tiene que solucionar un diagrama de flujo como el de la figura '.). en el
cual tenemos tres posibles respuestas a una pregunta, se plantean las soluciones
aqu presentadas.

Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
.res 7osi+i(i*%*es 7%r% $n% 7reg$nt%8
Sol3ci1" L1
Una de las formas de solucionar en un programa este problema es:
*eterminando para la opcin , la opcin & y la opcin ' un ,alor consecuti,o como:

opcin equ K
opcin& equ
opcin' equ &

Uno de estos posibles ,alores lle,arlos a M y en una parte del programa tratarlos as:

*ecisin: Wsitio en donde la pregunta [J[ tendra solucin
addEf %$!,
goto 3ccin
goto 3ccin&
goto 3ccin'
3ccin:
............................... Winstrucciones correspondientes a la 3ccin
...............................
...............................
goto encuentro
3ccin&:
............................... Winstrucciones correspondientes a la 3ccin &
...............................
...............................
goto encuentro
3ccin':
............................... Winstrucciones correspondientes a la 3ccin '
...............................
...............................
encuentro: Wsitio de encuentro luego de una de las acciones
............................... Wcontinuacin del programa
...............................
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
-ol+cin @;
2tra forma posible es comparando una por una los ,alores de las diferentes opciones
almacenadas en memoria 135 en una ,ariable llamada OPCION
mo,lE 2pcin
+orEf 2%$-2.,K Wse reali"a la ,erificacin del contenido de 2%$-2. con respecto a M
btfsc /030U/,? W6erificando la bandera ?
goto 3ccin
mo,lE 2pcin&
+orEf 2%$-2.,K Wse reali"a la ,erificacin del contenido de 2%$-2. con respecto a M
btfsc /030U/,? W6erificando la bandera ?
goto 3ccin&
mo,lE 2pcin'
+orEf 2%$-2.,K Wse reali"a la ,erificacin del contenido de 2%$-2. con respecto a M
btfsc /030U/,? W6erificando la bandera ?
goto 3ccin'
3ccin:
............................... Winstrucciones correspondientes a la 3ccin
...............................
...............................
goto encuentro
3ccin&:
............................... Winstrucciones correspondientes a la 3ccin &
...............................
...............................
goto encuentro
3ccin':
............................... Winstrucciones correspondientes a la 3ccin '
...............................
...............................
encuentro: Wsitio de encuentro luego de una de las acciones
............................... Wcontinuacin del programa
...............................
3unque este #ltimo m:todo es m(s largo que el anterior, permite que los ,alores de
las diferentes opciones no sean consecuti,os entre si.
A&imIic$
*entro de los microcontroladores %-$ se cuenta con instrucciones aritm:ticas tales
como 3**M4 y 3**!M, /U;M4 y /U;M4, para efectuar operaciones de suma y
resta respecti,amente e instrucciones tales como 1!4 y 114 para reali"ar
operaciones de rotacin a tra,es del carry con las cuales se pueden reali"ar
di,isiones entre & y multiplicaciones por & respecti,amente, <asta este punto
podramos ,er el conjunto de instrucciones un poco limitado, sin embargo, utili"ando
t:cnicas a,an"adas de programacin podemos obtener operaciones m(s complejas.
Una buena cantidad de ellas la obtenemos de dos notas de aplicacin de 5icroc<ip
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
en formato %*4.
T#mpo&iP$ci1"
E+isten momentos dentro de la programacin en los que se necesita reali"ar un
retardo de tiempo. !os retardos de tiempo se pueden obtener mediante <ardEare o
por medio de ciclos repetiti,os
basados en softEare. !a precisin de los retardos generados por softEare depende
en esencia del
tipo de oscilador que se utilice como base de tiempo en el microcontrolador, la mayor
precisin se obtiene de los cristales de cuar"o.
!a ,elocidad a la que se ejecuta el cdigo (instrucciones) depende de la ,elocidad
del oscilador y del n#mero de ciclos de m(quina ejecutados. !as instrucciones
necesitan & ciclos de m(quina para ser ejecutadas. Un ciclo de m(quina es un
tiempo utili"ado por el microcontrolador para reali"ar sus operaciones internas y
equi,ale a cuatro ciclos del oscilador. %or tanto:
0
ciclo m(q.
N ) \ 0
osc
0
ciclo m(q
N ) U f
osc
El n#mero de ciclos de m(quina utili"ados por una instruccin para ser ejecutada
depende de la misma. !as instrucciones que modifican el contador de programa
necesitan dos (&) ciclos de m(quina, mientras que todas las dem(s necesitan tan
solo uno ().
El <ec<o de generar ciclos repetiti,os por medio del programa y calcular el tiempo
total de ejecucin nos puede ayudar a generar tiempos precisos.

Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
Cic(o re7etiti9o *e ret%r*o

El ciclo repetiti,o de retardo de la figura '.H. se tomar( un n#mero de ciclos as:

27er%cin : *e cic(os
l c#! )+ 5 +% 6 1
l c#! )+ 6 +% +l c*%t)*# 1
+l )+c#+.+%t* )+l c*%t)*# .-+%t#s %* ll+!$+ c+#* 5-1
+l )+c#+.+%t* )+l c*%t)*# c$%)* ll+!$+ c+#* 7
+l slt* 8**/ 7 9 15-13
.ot%(; 3<0+1

%or cada instruccin agregada debe incluirse en la cuenta total el n#mero de ciclos
correspondiente a dic<a instruccin.
0rabajando a ) 5<" y asumiendo que S se rempla"a por el ,alor G
d
en el ejemplo
tendramos un tiempo igual a:
.#mero de ciclos N ('\G) D N )H ciclos de m(quina,
0
ciclo m(q.
N ) U ) 5<" N ] segundo, el tiempo total del ejemplo entonces ser( )H
]segundos.
Programacion Assembler Teoria Ingenieria en Sistemas de
Informacin
Arquitectura de Computadoras UNCAUS
Ao 2!
BiBlio'&$Ei$
-ntroduccin a los microcontroladores, >os: 3dolfo =on"(le" 6., 5c=raE 8ill
/istemas *igitales, 1ui", Espino"a, 1oure, 5c=raE 8ill
Estructura de computadores y %erif:ricos, 5artine" *ura, =rau, /olano, 3lfaomera
5icroprocesadores 4undamentos, diseo y aplicaciones, 3ngulo, %araninfo
5icrocontroladores %-$, 0a,ernier, Editorial %araninfo
5icrocontroladores %-$, !a solucin en un solo c<ip, 3ngulo, Editorial %araninfo
5icrocontroladores %-$, *iseo de aplicaciones, 3ngulo y otros, 5c=raE 8ill
$ursos sobre 5icrocontroladores %-$, .i,eles ;(sico y 3,an"ado, 0eScien !tda.
%-$ HUJ microcontroller data ;ooS, 5icroc<ip
5%3/5 assembler. User^s =uide, 5icroc<ip
5%!3; -*E User^s =uide, 5icroc<ip.
EEE.microc<ip.com
$(tedra 3plicacin -ndustrial de 5icros, Uni,ersidad 3ntonio .ario