Beruflich Dokumente
Kultur Dokumente
El siguiente ejemplo no tiene alguna utilidad, pero nos servir para entender
cmo el ensamblador analiza el programa y que acciones toma con cada
sentencia.
Cuando el ensamblador en inicializado sus tres contadores internos son
inicializados tambin. El valor inicial de cloc y eloc es 0, mientras que el valor
de dloc vara dependiendo al microcontrolador que se est usando.
Interpretaremos el cdigo, asumiendo que dloc inicia con 0060.
Por defecto el segmento designado en cseg, as que si queremos iniciar con
cualquier otro segmento, debemos indicarlo.
.dseg selecciona a la SRAM como memoria de almacenamiento. El primer label,
total, indica la posicin actual de dloc, 0060. Dos bytes son separadas en este
segmento 0060 y 0061, dejando a dloc en 0062.
La directiva .cseg nos lleva a la memoria FLASH. RJMP es una instruccin de 16
bites, recordando que la memoria FLASH almacena Words (2 bytes), cloc ahora
yace en la direccin 0001. La siguiente sentencia, .org, cambia la localizacin
de cloc a 0002A, entonces el siguiente label, startup, indica a dicha direccin,
002A. La siguiente instruccin, rjmp PC, es transformada a lenguaje mquina y
almacenada en la direccin 002Ade la memoria FLASH.
.eseg selecciona la memoria EEPROM, en dnde .db separa e inicializa 4 bytes.
Despus, .dseg nos dirige a la memoria SRAM. En donde el label sum toma el
valor del valor actual de dloc, 0062 y el byte que se encuentra en esa misma
direccin es guardado para su futuro uso.
EXPRESIONES
Existen muchas tareas que haciendo en lenguaje mquina seran muy tediosas,
assembly nos ayuda a realizarlas, simplificndonos el trabajo. A continuacin
mostraremos algunas de las expresiones de sintaxis usadas en el campo de
operandos de muchas instrucciones y directivas.
El ensamblador realiza todas las operaciones usando data de 64 bites. El
resultado es luego interpretado como un byte o Word (u otro tamao de data)
como se necesite.
Smbolos y Literales
Los smbolos son definidos cuando aparecen al inicio de una lnea de cdigo
seguidos de dos puntos (:) o, tambin pueden definirse, usando la directiva .set
o .equ. Cuando un smbolo es definido con dos puntos, se le conoce como
label, a cada label se refiere a un espacio de memoria.
Literales son patrones expresados en decimal, hexadecimal, octal, o binario,
string o formato de caracter. Los literales usualmente representan nmeros,
aunque tambin pueden representar slo patrones de bits. Los caracteres
literales representan el valor numrico de cdigos ASII. Literales string
representan un array o una cadena de caracteres. En Assembly un array es
slo un bloque de bytes continuos.
En los procesadores AVR, los nmeros hexadecimales deben ser expresados
son 0x o $. Los literales binarios son indicados con el prefijo 0b, literales
octales inician con un cero. Estos literales representan un entero sin signo.
Nmero que inician con un valor diferente de cero son asumidos como
decimales. El smbolo PC es usado para representar el valor actual de contador
del segmento de cdigo (FLASH) independientemente de que segmento se
encuentre actualmente activo.
Los caracteres literales corresponden a un nico byte y son especificados
dentro de comillas. Hay secuencias de escape usadas para representar valores
de bytes especiales.
Es comn definir un label en conjunto con las directivas .db, .dw, .dd, .dq, y
.byte. labels definidas de esta forma tendrn una valor igual a una direccin de
byte asociada (o primer byte de una directiva multibyte). No confundir el valor
del label con el contenido de la localizacin de memoria que el label
representa. En lenguaje assembly, los labels siempre representan una
direccin, nunca el valor almacenado en la direccin. As,
INSTRUCCIONES
Los programas en lenguaje assembly se componen de dos partes principales:
data, definida como reservada, e instrucciones mquina que son ejecutadas
por el procesador. Las instrucciones que son ejecutadas son cdigos binarios,
pero en lenguaje assembly con usualmente expresadas con una instruccin
mnemonic. Cada instruccin mquina es representada por al menos un
nmnemonic. En algunos casos, dos diferente mnemocis representan la misma
instruccin mquinam y ambas pueden ser usadas, pero en diferentes
contextos una representada mejor la accin del programador. Mnemonics
pueden requerir operandos que permiten al ensamblador llenar los detalles
requeridos por la instruccin.
El propsito de cada instruccin mquina, cuando es ejecutada, es causar
algn cambio en el estado de uno de los recursos controlados por el
procesador. Nosotros ha hemos discutido el hecho de que los
microcontroladores AVR tienen 32 registros de 8 bits y alguna cantidad de RAM
donde la data puede ser almacenada durante la ejecucin. El procesador AVR
tiene muchas instrucciones que pueden establecer o cambiar la data en estos
registros o la RAM.
Veremos el significado de las siguientes instrucciones en ms detalle en los
siguientes captulos donde ellas son agrupadas por funcionalidad. Aqu
nosotros simplemente vemos un pequeo ejemplo de sentencias comunes en
assembly y sus correspondientes instrucciones mquina. Usando estas
sentencias en un programa causar que el ensamblador ensamble el cdigo
mquina de 16 o 32 bits por cada instruccin y los mostrar a la salida del hex
y object file. Puedes encontrar una completa lista de todas las instrucciones de
AVR en documentacin del fabricante. Esta lista est tambin disponible en el
men help de Atmel Studio.
Cuando lees un programa en lenguaje assembly, puedes notar que hay dos
convenciones por definir labels. Una es poner cada definicin de label en una
misma lnea.