Tabla 3.1.
La instruccin ADD, suma dos registros sin la bandera de acarreo y el resultado lo
coloca en el registro destino (Rd).
P. 1
Ejemplo:
add
add
r1,r2
r28,r28
;Suma r2 a r1 (r1=r1+r2)
;Se suma el r28 el mismo (r28=r28+r28)
La instruccin EOR, ejecuta la operacin lgica X-OR al contenido del registro destino
y el registro fuente colocando el resultado en el registro destino (Rd).
Ejemplo:
eor
eor
r4,r4
r0,r22
;Se limpia r4
;Se realiza una OR exclusiva entre r0 y r22
;Resta r0 de r11
;Salta si el resultado es positivo
;Toma el complemento a 2 de r11
;Destino del salto (no hace nada)
La instruccin MULS, realiza la misma operacin que la instruccin MUL solo que se
toma en cuenta el bit de signo.
Ejemplo:
muls r21,r20 ;multiplica r21 y r20 nmeros con signo
movw r20,r0
;Copia el resultado de nuevo a r21:r20
P. 2
Instrucciones de Salto
En la tabla 3.2, se muestra el men de las instrucciones de Salto.
Tabla 3.2.
Existen dos tipos de salto: los saltos condicionales, que son aquellos que antes de
saltar requieren verificar una de las banderas del Registro de Estado (SREG), mientras
que los saltos incondicionales no requieren verificar ninguna bandera, en cuanto el
micro los encuentre este saltar a la nueva posicin marcada con la etiqueta.
La instruccin RJMP, es un salto incondicional. Salto relativo a una direccin ubicada
en el rango de PC 2K + 1 a PC + 2K.
La instruccin IJMP, es un salto incondicional. Salto indirecto, ya que brincara a una
direccin apuntada por el registro Z de 16 bits.
P. 3
r16,$42
error
ok
r16,r17
r16
P. 4
Tabla 3.3
La instruccin MOV, hace una copia de un registro a otro. El registro fuente, Rr, no sufre
ningn cambio, mientras que el registro destino, Rd, se carga con una copia de Rr.
La instruccin MOVW, hace una copia de un par de registros a otro par de registros. El
par de registros fuente, Rr+1:Rr, no sufren ningn cambio, mientras que el par de
registros destino, Rd+1:Rd, se cargan con una copia de Rr+1:Rr.
La instruccin LD, carga un byte indirecto con o sin desplazamiento de un espacio de
memoria a un registro. El espacio de memoria es direccionado por los registros
apuntadores de 16 bits X, Y o Z.
P. 5
La instruccin LDI, carga una constante de 8 bits directamente a los registros de r16 a
r31.
Ejemplo:
clr
ldi
ld
ld
ldi
ld
ld
r27
r26,$60
r0,X+
r1,X
r26,$63
r2,X
r3,-X
La instruccin IN, carga datos desde un espacio de I/O (Puertos, Timers, Registros de
Configuracin, etc.) al registro destino, Rd.
Ejemplo:
in
cpi
breq
...
exit: nop
La instruccin OUT, enva los datos desde un registro fuente, Rr, a un espacio de I/O
(Puertos, Timers, Registros de Configuracin, etc.).
Ejemplo:
clr
ser
out
nop
out
r16
;Limpia el registro r16
r17
;Coloca unos en r17
$18,r16 ;Enva ceros al puerto B
;Espera (no hace nada)
$18,r17 ;Enva unos al puerto B
P. 6
Tabla 3.4.
La instruccin SBI, pone un uno en el bit del registro especificado.
Ejemplo:
out
sbi
in
$1E,r0
$1C,0
r1,$1D
$12,7
La instruccin LSL, recorre todos los bits a la izquierda en un bit. El Bit 0 se limpia. El
Bit 7 se carga en la bandera de acarreo, C, del registro SREG. Esta instruccin efecta
multiplicaciones de nmeros con signo y sin signo por 2.
Ejemplo:
add
lsl
r0,r4
r0
;Suma r4 a r0
;Multiplica r0 por 2
P. 7
La instruccin LSR, recorre todos los bits a la derecha en un bit. El Bit 7 se limpia. El Bit
0 se carga en la bandera de acarreo, C, del registro SREG. Esta instruccin efecta
divisiones de nmeros sin signo entre 2.
Ejemplo:
add
lsr
r0,r4
r0
;Suma r4 a r0
;Divide r0 entre 2
La instruccin ROL, recorre todos los bits del registro destino a la izquierda. La bandera
del acarreo se pasa al Bit 0 del registro. El Bit 7 se pasa a la bandera del acarreo, C.
Esta instruccin combinada con LSL, efecta multiplicaciones de varios bytes con
valores con signo y sin signo por 2.
La instruccin SWAP, intercambia los nibbles en un registro, el alto por el bajo y
viceversa.
La instruccin SEC, pone a uno el bit de la bandera de acarreo, C, en el registro SREG.
Mientras que la instruccin CLC, limpia esta bandera.
P. 8
Tabla 3.5.
La instruccin NOP, se ejecuta en un solo ciclo de instruccin, y no realiza nada.
La instruccin SLEEP, coloca al circuito en modo dormido definido por el modo de
control del MCU.
La instruccin BREAK, se usa para un sistema de debug interno. Cuando se ejecuta
esta instruccin el CPU del AVR se coloca en modo de Stop. Esto ayuda a accesar a
los recursos internos del micro a travs de software.
P. 9