Académique Documents
Professionnel Documents
Culture Documents
En este apartado se comentan las instrucciones de ensamblador que poseen los C AVR
de 8-BIT. Se explica la funcin de cada una de ellas, su sintaxis, operandos utilizados y
una descripcin con ejemplos.
El conjunto de instrucciones para estos microcontroladores se puede dividir en el
siguiente orden de grupos:
Instrucciones Aritmticas y Lgicas
Instrucciones de Desvo (salto)
Instrucciones de Transferencia de Datos
Instrucciones de Bit y prueba de Bit
Una lnea tpica en lenguaje ensamblador est dada de la siguiente forma:
[Mnemnico] operando1, operando2
Los Mnemnicos son las instrucciones en lenguaje ensamblador que puede reconocer el
microprocesador. Dependiendo de la instruccin, puede haber uno o dos operandos,
incluso pueden no existir; su contenido consiste en un nmero, una variable o una
direccin; normalmente el resultado de una operacin lgica, aritmtica o de carga es
almacenado en operando1.
Rr
Direccin de memoria
Operandos
Rd,Rr
Rd,Rr
Rd, K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd
Rd
Rd,K
Rd,K
Rd
Rd
Rd
Rd
Rd
Rd+1:Rd,K
Rd+1:Rd,K
Rd,Rr
Rd,Rr
Rd,Rr
Mnemnicos
RJMP
IJMP
EIJMP
JMP
RCALL
ICALL
Operandos
k
Ninguno
Ninguno
k
k
Ninguno
Descripcin
Suma sin acarreo
Suma sin acarreo
Suma un inmediato a un registro de palabra
Resta sin acarreo
Resta un inmediato
Resta con acarreo
Resta un inmediato con acarreo
AND lgico
AND lgico con inmediato
OR lgico
OR lgico con inmediato
OR exclusivo
Complemento a uno
Complemento a dos
Pon a uno los bits de un registro
Pon a cero los bits de un registro
Incrementa al registro
Decrementa al registro
Revisa si es cero o menor
Borra el registro
Carga los bits de un registro
Suma un inmediato a un registro de palabra
Resta un inmediato a un registro de palabra
Multiplica sin signo
Multiplica con signo
Multiplica signado con no signado
EICALL
CALL
RET
RETI
CPSE
CP
CPC
CPI
SBRC
SBRS
SBIC
SBIS
BRBC
BRBS
BREQ
BRNE
BRCS
BRCC
BRSH
BRLO
BRMI
BRPL
BRGE
BRLT
BRHS
BRHC
BRTS
BRTC
BRVS
BRVC
BRIE
BRID
Ninguno
k
Ninguno
Ninguno
Rd,Rr
Rd,Rr
Rd,Rr
Rd,K
Rr,b
Rr,b
P,b
P,b
s,k
s,k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
k
Operandos
Rd,Rr
Rd,Rr
Rd,K
Rd,k
Rd,X
Rd,X+
Rd,-X
Rd,Y
Rd,Y+
Rd,-Y
Rd,Y+q
Rd,Z
Rd,Z+
Rd,-Z
Rd,Z+q
k,Rr
Descripcin
Copia de registros
Copia registros de palabra
Carga de un inmediato
Carga directa
Carga indirecta
Carga indirecta con Post-Incremento
Carga indirecta con Pre-Decremento
Carga indirecta
Carga indirecta con Post-Incremento
Carga indirecta con Pre-Decremento
Carga indirecta con desplazamiento
Carga indirecta con
Carga indirecta con Post-Incremento
Carga indirecta con Pre-Decremento
Carga indirecta con desplazamiento
Almacena directamente
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
LPM
SPM
IN
OUT
PUSH
POP
X,Rr
X+,Rr
-X,Rr
Y,Rr
Y+,Rr
-Y,Rr
Y+q,Rr
Z,Rr
Z+,Rr
-Z,Rr
Z+q,Rr
Ninguno
Ninguno
Rd,P
P,Rr
Rr
Rd
Almacena indirectamente
Almacena indirectamente con Post-Incremento
Almacena indirectamente con Pre-Decremento
Almacena indirectamente
Almacena indirectamente con Post-Incremento
Almacena indirectamente con Pre-Decremento
Almacena indirectamente con desplazamiento
Almacena indirectamente
Almacena indirectamente con Post-Incremento
Almacena indirectamente con Pre-Decremento
Almacena indirectamente con desplazamiento
Carga memoria de programa
Almacena memoria de programa
Cargar un registro con un I/O
Cargar un I/O con un registro
Cargar registro en la pila
Sacar dato de la pila
Operandos
Rd
Rd
Rd
Rd
Rd
Rd
s
s
P,b
P,b
Rr,b
Rd,b
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Ninguno
Descripcin
Desplazamiento a la izquierda
Desplazamiento a la derecha
Rotacin a la izquierda con acarreo
Rotacin a la derecha con acarreo
Desplazamiento aritmtico
Intercambio de nibbles
Poner a uno la bandera
Poner a cero la bandera
Poner a uno el bit de un registro I/O
Poner a cero el bit de un registro I/O
Guarda en T el bit de un registro
Carga T en el bit de un registro
Poner a uno la bandera C
Poner a cero la bandera C
Poner a uno la bandera N
Poner a cero la bandera N
Poner a uno la bandera Z
Poner a cero la bandera Z
Poner a uno la bandera I
Poner a cero la bandera I
Poner a uno la bandera S
Poner a cero la bandera S
Poner a uno la bandera V
Poner a cero la bandera V
Poner a uno la bandera T
Poner a cero la bandera T
Poner a uno la bandera H
Poner a cero la bandera H
No operacin
Modo Sleep
Reiniciar el Watchdog
Operacin: Rd Rd + Rr + C
Operacin: Rd Rd + Rr
Operandos: 0 d 31, 0 r 31
Operandos: 0 d 31, 0 r 31
Banderas afectadas:
Banderas afectadas:
Ejemplo:
Ejemplo:
ADC r1, r2
; Suma r1, r2 y C
; el resultado lo pone en r1
ADD r1, r2
ADD r28, r28
Operacin: Rd Rd (AND) Rr
Operandos: 0 d 31, 0 r 31
Operandos:
Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos
indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL
o slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar
R27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo a
R30. Tambin podemos usar el registro de 16 bits compuesto por
R25:R24 al que tambin podemos indicar como R24.
Operando2: 0 K 63
Descripcin: Agrega un valor K a un par de registros y deja el
resultado en el par de registros
Ejemplo:
Banderas afectadas:
AND r2, r3
LDI r16, 1
AND r2, r16
R25:R24, 1
; Suma r2 a r1 (r1=r1+r2)
; Suma r28 a s mismo (r28=r28+r28)
Operacin: Rd Rd (AND) K
Operandos: 0 d 31
Banderas afectadas:
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
ANDI r17, $0F
ANDI r18, $10
ANDI r19, $AA
Ejemplo:
LDI r16, $10
ASR r16
LDI r17, $FC
ASR r17
Sintaxis: BCLR s
Operacin: SREG(s) 0
Operacin: Rd(b) T
Operandos: 0 s 7
Operandos: 0 d 31, 0 b 7
Banderas afectadas:
Ejemplo:
BST r1, 2
BLD r0, 4
Ejemplo:
BCLR 0
BCLR 7
; Borrar la bandera C
; Deshabilitar interrupciones
Sintaxis: BRBC s, k
Sintaxis: BRBS s, k
Operandos: 0 s 7, -64 k 63
Operandos: 0 s 7, -64 k 63
Ejemplo:
Ejemplo:
dife:
CPI r20, 5
BRBC 1, dife
...
NOP
salto:
BST r0, 3
; Carga la bandera T con el bit 3 de r0
BRBS 6, salto ; Salta si el bit T est a uno
...
NOP
; Destino de desvo (No hacer nada)
Sintaxis: BRCS k
Sintaxis: BRCS k
Operacin: Si C = 0 entonces PC PC + k + 1
Si C = 1 entonces PC PC + 1
Operacin: Si C = 1 entonces PC PC + k + 1
Si C = 0 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Ejemplo:
Ejemplo:
desvo:
; Destino de desvo
10
BREAK Pausa
Sintaxis: BREAK
Sintaxis: BREQ k
Operacin: Si Rd = Rr : Z = 1 entonces PC PC + k + 1
Si Rd Rr : Z = 0 entonces PC PC + 1
Operandos: Ninguno
Operandos: -64 k 63
Descripcin: Se utiliza para la depuracin y normalmente no se
utiliza en el programa de la aplicacin. Cuando la instruccin es
ejecutada el CPU del AVR se pone en modo de inactividad. Esto
le da al depurador acceso a los recursos internos.
igual:
CP r1, r0
BREQ igual
...
NOP
; Comparar registros r1 y r0
; Salta si Z=0 (los registros son iguales)
; Destino de desvo (No hacer nada)
Sintaxis: BRGE k
Sintaxis: BRHS k
Operacin: Si Rd Rr : (N V = 0) entonces PC PC + k + 1
Operacin: Si H = 0 entonces PC PC + k + 1
Si H = 1 entonces PC PC + 1
Si Rd < Rr entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Descripcin: Examina la bandera H y si est a cero desva
relativamente al PC (contador de programa) en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el
offset de PC y es representado en forma de complemento a dos.
(Equivalente a la instruccin BRBS 5, k).
desvo:
CP r11, r12
BRGE desvo
...
NOP
11
BRHC desvio
...
NOP
Sintaxis: BRHS k
Sintaxis: BRID k
Operacin: Si H = 1 entonces PC PC + k + 1
Si H = 0 entonces PC PC + 1
Operacin: Si T = 0 entonces PC PC + k + 1
Si T = 1 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Ejemplo:
Ejemplo:
desvio:
BRHS desvio
...
NOP
desvio:
BRIE desvio
...
NOP
Sintaxis: BRIE k
Sintaxis: BREQ k
Operacin: Si I = 1 entonces PC PC + k + 1
Si I = 0 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
desvio:
BRIE desvio
...
NOP
; Destino de desvo
Ejemplo:
igual:
12
CP r1, r0
BREQ igual
...
NOP
; Comparar registros r1 y r0
; Salta si Z=0 (los registros son iguales)
; Destino de desvo (No hacer nada)
Sintaxis: BRLT k
Sintaxis: BRMI k
Operacin: Si Rd Rr : (N V = 1) entonces PC PC + k + 1
Operacin: Si N = 1 entonces PC PC + k + 1
Si N = 0 entonces PC PC + 1
Si Rd < Rr entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Descripcin: Examina la bandera N y si est a uno se desva
relativamente al PC (contador de programa en cualquier
direccin (PC - 63 destino PC + 64). El parmetro k es el
offset de PC y es representado en forma de complemento a dos.
(Equivalente a la instruccin BRBS 2, k).
Ejemplo:
desvo:
SUBI r18, 4
BRMI desvo
...
NOP
; Restar 4 de r18
; Desva si la bandera N=1
; Destino de desvo
CP r16, r1
; Comparar los registros r16 con r1
BRLT desvo ; Desva si r16 < r1 (con signo)
...
NOP
; Destino de desvo (No hacer nada)
Sintaxis: BRNE k
Sintaxis: BRPL k
Operacin: Si Rd = Rr : Z = 0 entonces PC PC + k + 1
Si Rd Rr : Z = 1 entonces PC PC + 1
Operacin: Si N = 0 entonces PC PC + k + 1
Si N = 1 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Ejemplo:
loop:
; Borrar r27
; Incrementar r27
; Comparar r27 con 5
; Desvo si r27 5
; Salida de Loop
13
Sintaxis: BRSH k
Sintaxis: BRTC k
Operacin: Si Rd Rr : C = 0 entonces PC PC + k + 1
Si Rd < Rr : C = 1 entonces PC PC + 1
Operacin: Si T = 0 entonces PC PC + k + 1
Si T = 1 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
desvo:
SUBI r19, 4
BRSH desvo
...
NOP
BST r3, 5
BRTS desvio
...
NOP
; Restar 4 de r19
; Desva si r19 4 (sin signo)
; Destino de desvo
Sintaxis: BRTS k
Sintaxis: BRTC k
Operacin: Si T = 1 entonces PC PC + k + 1
Si T = 0 entonces PC PC + 1
Operacin: Si V = 1 entonces PC PC + k + 1
Si V = 0 entonces PC PC + 1
Operandos: -64 k 63
Operandos: -64 k 63
Ejemplo:
Ejemplo:
desvio:
BST r3, 5
BRTS desvio
...
NOP
desvio:
14
ADD r3, r4
BRVS desvio
...
NOP
; Suma el registro r4 a r3
; Desva si no hay desbordamiento
; Destino de desvo
Sintaxis: BRVS k
Sintaxis: BSET s
Operacin: Si V = 1 entonces PC PC + k + 1
Si V = 0 entonces PC PC + 1
Operacin: SREG(s) 1
Operandos: 0 s 7
Operandos: -64 k 63
Descripcin: Pone a uno un bit especfico del registro de
banderas SREG.
Banderas afectadas:
; Suma el registro r4 a r3
; Desva si hay desbordamiento
; Destino de desvo
Ejemplo:
desvio:
ADD r3, r4
BRVS desvio
...
NOP
BSET 6
BSET 7
Sintaxis: CALL k
Operacin: T Rd(b)
Operandos: 0 d 31, 0 b 7
Operandos: 0 k 64K
0 k 4M
Banderas afectadas:
T: Se pone a uno si el bit b del registro Rd est a uno, de lo
contrario se pone a cero.
Ejemplo:
BST r1, 2
BLD r0, 4
15
check:
MOV r16, r0
CALL check
...
CPI r16, $42
error:
...
BREQ error
RET
RJMP error
; Copiar r0 en r16
; Llamado a subrutina
; Compara r16 con un valor
; especfico
; Salta si son iguales
; Retorno de subrutina
; Ciclo infinito
Sintaxis: CBI P, b
Operacin: (P, b) 1
Operandos: 0 P 31, 0 b 7
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
CBR r16, $F0
CBR r18, 1
Sintaxis: CLC
Sintaxis: CLH
Operacin: C 0
Operacin: H 0
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
C: Se pone a cero
H: Se pone a cero
Ejemplo:
Ejemplo:
ADD r0, r0
CLC
; Sumar r0 a s mismo
; Borrar la bandera de acarreo
CLH
16
; Borrar la bandera H
Sintaxis: CLI
Sintaxis: CLN
Operacin: N 0
Operacin: N 0
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
I: Se pone a cero
C: Se pone a cero
Ejemplo:
Ejemplo:
CLI
IN r11, $16
SEI
; Interrupciones deshabilitadas
; Leer el Puerto B
; Interrupciones habilitadas
ADD r2, r3
CLN
; Sumar r3 a r2
; Borrar la bandera N
Sintaxis: CLR Rd
Sintaxis: CLS
Operacin: Rd Rd (XOR) Rd
Operacin: S 0
Operandos: 0 d 31
Operandos: Ninguno
Banderas afectadas:
S: Se pone a cero
V: Se pone a cero.
N: Se pone a cero
Z: Se pone a uno.
Ejemplo:
ADD r2, r3
CLS
Ejemplo:
loop:
CLR r18
; Borrar r18
INC r18
; Incrementar r18
...
CPI r18, $50 ; Comparar r18 con $50
BRNE loop
17
; Sumar r3 a r2
; Borrar la bandera S
Sintaxis: CLT
Sintaxis: CLV
Operacin: T 0
Operacin: V 0
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
T: Se pone a cero
V: Se pone a cero
Ejemplo:
Ejemplo:
CLT
ADD r2, r3
CLV
; Borrar la bandera T
; Sumar r3 a r2
; Borrar la bandera V
Sintaxis: CLZ
Sintaxis: COM Rd
Operacin: Z 0
Operacin: Rd $FF - Rd
Operandos: Ninguno
Operandos: 0 d 31
Banderas afectadas:
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: se pone a uno.
Z: Se pone a cero
Ejemplo:
ADD r2, r3
CLZ
; Suma r3 a r2
; Borra la bandera Z
Ejemplo:
prueba:
18
COM r4
; Realiza el complemento a uno de r4
BREQ prueba ; brinca si la bandera Z est en uno.
...
NOP
; Destino de desvo (No hacer nada)
CP Compara
Sintaxis: CP Rd, Rr
Operacin: Rd -Rr
Operacin: Rd Rr -C
Operandos: 0 d 31, 0 r 31
Operandos: 0 d 31, 0 r 31
Banderas afectadas:
Banderas afectadas:
H: Se activa si hay un acarreo negativo del bit 3, de lo contrario
se borrar.
V: Se activa si ocurre un desbordamiento del complemento a dos
como resultado de la operacin, de lo contrario se borrar.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa si el valor absoluto del contenido de Rr es mayor
que el contenido de Rd, de lo contrario se borrar.
Ejemplo:
noteq:
CP r4, r19
BRNE noteq
...
NOP
Ejemplo:
noteq:
CP r2, r0
CPC r3, r1
BRNE noteq
...
NOP
Operacin: Rd -K
Operacin: Si Rd = Rr entonces PC PC + 2 ( o 3)
Si Rd Rr entonces PC PC + 1
Banderas afectadas:
Banderas afectadas: Ninguna
H: Se activa si hay un acarreo negativo del bit 3, de lo contrario
se borrar.
V: Se activa si ocurre un desbordamiento del complemento a dos
como resultado de la operacin, de lo contrario se borrar.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa si el valor absoluto del contenido de K es mayor que
el contenido de Rd, de lo contrario se borrar.
Ejemplo:
INC r4
CPSE r4, r0
NEG r4
NOP
Ejemplo:
error:
CPI r19,3
BRNE error
...
NOP
19
; Incrementar r4
; Comparar r4 con r0
; Slo ejecutar si r4 r0
; Continuar (No hacer nada)
Sintaxis: DEC Rd
Operacin: Rd Rd -1
Operacin: Rd Rd Rr
Operandos: 0 d 31
Operandos: 0 d 31, 0 r 31
Banderas afectadas:
V: Se activa si ocurre un desbordamiento del complemento a dos
como resultado de la operacin, de lo contrario se borrar. Un
desbordamiento del complemento a dos ocurrir si y slo si Rd
era $80 antes de la operacin.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
EOR r4, r4
EOR r0, r22
; Borrar r4
; OR exclusiva entre r0 y r22
Ejemplo:
Loop:
Sintaxis: ICALL
Sintaxis: IJMP
Operacin: PC Z(15:0)
Operandos: Ninguno
Operandos: Ninguno
Pila: Stack PC + 1 :
SP SP -2 (2 Bytes)
Ejemplo:
MOV r30, r0
ICALL
20
Sintaxis: IN Rd, P
Sintaxis: INC Rd
Operacin: Rd P
Operacin: Rd Rd +1
Operandos: 0 d 31, 0 P 63
Operandos: 0 d 31
exit:
BREQ exit
...
NOP
Banderas afectadas:
V: Se activa si ocurre un desbordamiento del complemento a dos
como resultado de la operacin, de lo contrario se borrar. Un
desbordamiento del complemento a dos ocurrir si y slo si Rd
era $7F antes de la operacin.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
; Destino de desvo
Ejemplo:
loop:
CLR r22
INC r22
...
CPI r22, $4F
BRNE loop
NOP
; Borrar r22
; Incrementar r22
; Comparar r22 con $4f
; Desvo si no son iguales
; Continuar (No hacer nada)
JMP Salto
Sintaxis: JMP k
Operacin: PC k
Operacin: Rd K
Operandos: 0 k 4M
lejos:
MOV r1, r0
JMP lejos
nop
CLR r31
LDI r30, $F0
LPM
; Copia r0 en r1
; Salto incondicional
; Destino de salto
21
Sintaxis: LD Rd, X
LD Rd, X+
LD Rd, -X
Operacin: Rd (X)
Rd (X), X X+1
X X1, Rd (X)
LD r26, X+
LD r27, X+
X: Sin cambios
X: Con post-incremento
X: Con pre-decremento
LD r26, -X
LD r27, -X
Operandos: 0 d 31
LD r1, X
LDI r26, $63
LD r2, X
LD r3, -X
Sintaxis: LD Rd, Y
LD Rd, Y+
LD Rd, -Y
LDD Rd, Y+q
Operacin: Rd (Y)
Rd (Y), Y Y+1
Y Y1, Rd (Y)
Rd (Y+q)
LD r28, Y+
LD r29, Y+
Y: Sin cambios
Y: Con post-incremento
Y: Con pre-decremento
Y: Sin cambios,
q: Desplazamiento
LD r28, -Y
LD r29, -Y
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Operandos: 0 d 31, 0 q 63
Descripcin Se carga un byte de manera indirecta procedente del
rea de datos hacia un registro de trabajo. Para los dispositivos
con SRAM, el rea de datos se compone de los registros de:
trabajo, I/O y SRAM interna (y SRAM externa si es aplicable).
Para los dispositivos sin SRAM, el espacio de datos se compone
slo por los registros de trabajo. La EEPROM tiene un espacio
de direccin separado.
LD r1, Y
LDI r28, $63
LD r2, Y
LD r3,-Y
Ejemplo:
CLR r29
LDI r28, $60
LD r0, Y+
22
Sintaxis: LD Rd, Z
LD Rd, Z+
LD Rd, -Z
LDD Rd, Z+q
Operacin: Rd (Z)
Rd (Z), Z Z+1
Z Z 1, Rd (Z)
Rd (Z+q)
Z: Sin cambios
Z: Con post-incremento
Z: Con pre-decremento
Z: Sin cambios,
q: Desplazamiento
LD r30, Z+
LD r31, Z+
Operandos: 0 d 31, 0 q 63
LD r30, -Z
LD r31, -Z
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Banderas afectadas: Ninguna
Ejemplo:
CLR r31
LDI r30, $60
LD r0, Z+
LD r1, Z
LDI r30, $63
LD r2, Z
LD r3,-Z
Sintaxis: LPM
LPM Rd, Z
LPM Rd, Z+
Operacin: Rd (k)
Operandos: 0 d 31, 0 k 65535
Operacin: R0 (Z)
Z: Sin cambio, R0 implcito
Rd (Z)
Z: Sin cambio
Rd (Z), Z Z + 1 Z: Post-incrementado
Operandos: 0 d 31
Descripcin: Se carga un byte apuntado por el registro Z en el
registro R0. La memoria de programa est organizada en palabra
(word) de 16-bits; el bit menos significativo del puntero Z
selecciona el byte bajo (0) o el byte alto (1). Esta instruccin
puede dirigirse a los primeros 64K bytes (32K words) de
memoria de programa. El registro puntero Z queda inalterado por
el funcionamiento.
Banderas afectadas: Ninguna
Ejemplo:
Ejemplo:
LDS r2, $FF00
ADD r2, r1
STS $FF00, r2
CLR r31
LDI r30, $F0
LPM
23
Sintaxis: LSL Rd
Sintaxis: LSR Rd
Operacin:
Operacin:
Operandos: 0 d 31
Operandos: 0 d 31
Banderas afectadas:
Banderas afectadas:
Ejemplo:
ADD r0, r4
LSL r0
; Sumar r4 a r0
; Dividir a r0 entre 2
; Sumar r4 a r0
; Multiplicar r0 por 2
Operacin: Rd Rr
Operacin: Rd + 1: Rd Rr + 1: Rr
Operandos: 0 d 31, 0 r 31
Operandos: d {0,2,,30}
r {0,2,,30}
check:
MOV r16,r0
CALL check
...
CPI r16,$11
...
RET
; Copiar r0 en r16
; Llamada a subrutina
Ejemplo:
; Comparar r16 con $11
; Retorno de subrutina
check:
24
Operacin: R1:R0 Rd x Rr
Operacin: R1:R0 Rd x Rr
Operandos: 0 d 31, 0 r 31
Operandos: 16 d 31, 0 r 16
Banderas afectadas:
Banderas afectadas:
C: Se pone a uno si el bit 15 del resultado est a uno.
Z: Se pone a uno si el resultado es cero.
Ejemplo:
Ejemplo:
MUL r5, r4
MOVW r4, r0
; Multiplica R5 con R4
; Copia el resultado en R5: R4
NOP No operacin
Sintaxis: NEG Rd
Sintaxis: NOP
Operacin: Rd $00 - Rd
Operacin: Ninguna
Operandos: 0 d 31
Operandos: Ninguno
Banderas afectadas:
Ejemplo:
H: Se activa si haba un acarreo negativo (Borrow) del bit 3, de
lo contrario se borrar (cero).
V: Se activa si ocurre un desbordamiento del complemento a dos
de la resta implcita de cero, de lo contrario se borrar. Un
desbordamiento del complemento a dos ocurrir si y slo si el
contenido del registro despus de la operacin es $80.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa si hay un acarreo negativo (borrow) en la resta
implcita de cero, de lo contrario se borrar. La bandera C se
activa en todos los casos excepto cuando el contenido del
registro despus de la operacin es $00.
CLR r16
SER r17
OUT $18, r16
NOP
OUT $18, r17
Ejemplo:
prueba:
25
; Borrar r16
; Poner a uno r17
; Escribir ceros en el Puerto B
; Esperar (No hacer nada)
; Escribir unos en el Puerto B
Sintaxis: OR Rd, Rr
Operacin: Rd Rd (OR) Rr
Operacin: Rd Rd (OR) K
Operandos: 0 d 31, 0 r 31
Banderas afectadas:
Banderas afectadas:
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
OR r15, r16
BST r15, 6
BRTS ok
NOP
Ejemplo:
ORI r16, $F0
ORI r17, 1
...
ok:
Sintaxis: OUT P, Rr
Sintaxis: POP Rr
Operacin: P Rr
Operacin: Rr STACK
Operandos: 0 r 31, 0 P 63
Operandos: 0 r 31
Ejemplo:
CLR r16
SER r17
OUT $18, r16
NOP
OUT $18, r17
; Borrar r16
; Poner a unos r17
; Escribir ceros en el Puerto B
; Esperar (No hacer nada)
; Escribir unos en el Puerto B
Ejemplo:
routine:
26
CALL routine
...
PUSH r14
PUSH r13
...
POP r13
POP r14
RET
; Llamar a subrutina
; Guardar r14 en la pila
; Guardar r13 en la pila
; Restaurar r13
; Restaurar r14
; Retorno de subrutina
Sintaxis: PUSH Rr
Sintaxis: RCALL k
Operacin: STACK Rr
Operacin: PC PC + k + 1
Operandos: 0 r 31
Operandos: -2K k 2K
Pila: Stack PC + 1 :
routine:
CALL routine
...
PUSH r14
PUSH r13
...
POP r13
POP r14
RET
SP SP -2 (2 Bytes)
; Llamar a subrutina
Banderas afectadas: Ninguna
; Guardar r14 en la pila
; Guardar r13 en la pila
Ejemplo:
; Restaurar r13
; Restaurar r14
; Retorno de subrutina
routine:
RCALL routine
...
PUSH r14
...
POP r14
RET
; Llamada a subrutina
; Guardar r14 en la pila
; Restaurar r14
; Retorno de subrutina
Sintaxis: RET
Sintaxis: RETI
Operacin: PC Stack
Operacin: PC Stack
Operandos: Ninguno
Operandos: Ninguno
Pila: SP SP + 2 (bytes)
Pila: SP SP + 2 (bytes)
routine:
CALL routine
...
PUSH r14
...
POP r14
RET
; Llamada a subrutina
Banderas afectadas:
; Guardar r14 en la pila
I: Se pone a uno.
; Restaurar r14
; Retorno de subrutina
Ejemplo:
...
extint:
27
Sintaxis: RJMP k
Sintaxis: ROL Rd
Operacin: PC PC + k + 1
Operacin:
Operandos: -2K k 2K
Operandos: 0 d 31
Banderas afectadas:
Ejemplo:
error:
ok:
Ejemplo:
LSL r18
ROL r19
BRCS oneenc
NOP
; Destino de desvo
...
oneenc:
Sintaxis: ROR Rd
Operacin:
Operacin: Rd Rd Rr - C
Operandos: 0 d 31
Operandos: 0 d 31, 0 r 31
Banderas afectadas:
Banderas afectadas:
; Sumar r4 a r0
; Multiplicar r0 por 2
Ejemplo:
SUB r2, r0
SBC r3, r1
28
Operacin: (P, b) 1
Operacin: Rd Rd K - C
Operandos: 0 P 31, 0 b 7
OUT $1E, r0
SBI $1C, 0
IN r1, $1D
Ejemplo:
SUBI r16, $23
SBCI r17, $4F
Sintaxis: SBCI P, b
Sintaxis: SBIS P, b
Operandos: 0 P 31, 0 b 7
Operandos: 0 P 31, 0 b 7
Ejemplo:
Ejemplo:
espera:
SBIC $1C, 1
RJMP espera
NOP
espera:
SBIS $10, 0
RJMP espera
NOP
29
Operacin: Rd Rd v K
Operandos:
Operando1: Puede ser uno de los 3 registros de 16 bits. Podemos
indicarlo de las siguientes maneras: XH:XL o slo a XL; YH:YL
o slo a YL; ZH:ZL o slo es a ZL. Tambin podemos utilizar
R27:R26 o slo a R26; R29:R28 o slo a R28; R31:R30 o slo a
R30. Tambin podemos usar el registro de 16 bits compuesto por
R25:R24 al que tambin podemos indicar como R24.
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Banderas afectadas:
Ejemplo:
SBR r16, 3
SBR r17, $F0
Operando2: 0 K 63
Ejemplo:
SBIW r24, 1
SBIW r28, 63
; Restar 1 de r25:r24
; Restar 63 del puntero Y (r29:r28)
Operandos: 0 r 31, 0 b 7
Operandos: 0 r 31, 0 b 7
Ejemplo:
Ejemplo:
SUB r0, r1
SBRC r0, 7
SUB r0, r1
NOP
; Restar r1 de r0
; Saltar si el bit 7 en r0 est borrado
; Slo se ejecuta si el bit 7 en r0 es uno
; Continuar (No hacer nada)
SUB r0, r1
SBRS r0, 7
SUB r0, r1
NOP
30
; Restar r1 de r0
; Saltar si el bit 7 en r0 est a uno
; Slo se ejecuta si el bit 7 en r0 es cero
; Continuar (No hacer nada)
Sintaxis: SEC
Sintaxis: SEH
Operacin: C 1
Operacin: H 1
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
C: Se pone a uno
H: Se pone a uno
Ejemplo:
Ejemplo:
SEC
ADC r0, 1
SEH
Sintaxis: SEI
Sintaxis: SEN
Operacin: I 1
Operacin: N 1
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
I: Se pone a uno
N: Se pone a uno
Ejemplo:
Ejemplo:
SEI
SLEEP
; Interrupciones habilitadas
; Activacin de modo SLEEP, esperando
; alguna interrupcin
31
; Sumar r19 a r2
; Poner a uno la bandera N
Sintaxis: SER Rd
Sintaxis: SES
Operacin: Rd $FF
Operacin: S 1
Operandos: 16 d 31
Operandos: Ninguno
Banderas afectadas:
Ejemplo:
S: Se pone a uno
CLR r16
SER r17
OUT $18, r16
NOP
OUT PORTB, r17
; Borrar r16
; Poner a uno r17
; Escribir ceros al Puerto B
; Retardo (No hacer nada)
; Escribir unos en el Puerto B
Ejemplo:
ADD r2, r19
SES
; Sumar r19 a r2
; Poner a uno la bandera S
Sintaxis: SET
Sintaxis: SEV
Operacin: T 1
Operacin: V 1
Operandos: Ninguno
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas:
T: Se pone a uno
V: Se pone a uno
Ejemplo:
Ejemplo:
SET
32
; Sumar r19 a r2
; Poner a uno la bandera V
Sintaxis: SEZ
Sintaxis: SLEEP
Operacin: Z 1
Operandos: Ninguno
Operandos: Ninguno
Descripcin: Pone a uno la bandera de resultado cero Z del
registro de estado SREG.
Banderas afectadas:
Z: Se pone a uno
Ejemplo:
Ejemplo:
; Suma r19 a r2
; Poner a uno la bandera Z
; Copiar r11 en r0
; Modo sleep habilitado
; Poner el MCU en modo descanso
Sintaxis: LD X, Rr
LD X+, Rr
LD -X , Rr
LD X+, r26
Operacin: (X) Rr
(X) Rr, X X+1
X X1, (X) Rd
LD X+, r27
LD X, r26
X: Sin cambios
X: Con post-incremento
X: Con pre-decremento
LD -X, r27
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Operandos: 0 r 31
Descripcin Se almacena un byte de manera indirecta
procedente de un registro de trabajo hacia el rea de datos. Para
los dispositivos con SRAM, el rea de datos se compone de los
registros de: trabajo, I/O y SRAM interna (y SRAM externa si
es aplicable). Para los dispositivos sin SRAM, el espacio de
datos se compone slo por los registros de trabajo. La EEPROM
tiene un espacio de direccin separado.
ST X, r1
LDI r26, $63
ST X, r2
ST X, r3
33
Sintaxis: LD Y, Rr
LD Y+, Rr
LD -Y, Rr
STD Y+q, Rr
Operacin: (Y) Rr
(Y) Rr, Y Y+1
Y Y1, (Y) Rr
(Y+q) Rr
ST Y+, r28
ST Y+, r29
Y: Sin cambios
Y: Con post-incremento
Y: Con pre-decremento
Y: Sin cambios,
q: Desplazamiento
ST -Y, r28
ST -Y, r29
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Operandos: 0 r 31, 0 q 63
Descripcin Se almacena un byte de manera indirecta
procedente de un registro de trabajo hacia el rea de datos. Para
los dispositivos con SRAM, el rea de datos se compone de los
registros de: trabajo, I/O y SRAM interna (y SRAM externa si
es aplicable). Para los dispositivos sin SRAM, el espacio de
datos se compone slo por los registros de trabajo. La EEPROM
tiene un espacio de direccin separado.
ST Y, R1
LDI r28, $63
ST Y, r2
ST -Y, r3
Ejemplo:
CLR r29
LDI r28, $60
ST Y+, r0
STD Y+2, r4
Sintaxis: LD Z, Rr
LD Z+, Rr
LD -Z, Rr
STD Z+q, Rr
Operacin: (Z) Rr
(Z) Rr, Z Z+1
Z Z1, (Z) Rr
(Z+q) Rr
Z: Sin cambios
Z: Con post-incremento
Z: Con pre-decremento
Z: Sin cambios,
q: Desplazamiento
ST Z+, r30
ST Z+, r31
Operandos: 0 r 31, 0 q 63
ST -Z, r30
ST -Z, r31
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Banderas afectadas: Ninguna
Ejemplo:
CLR r31
LDI r30, $60
ST Z+, r0
ST Z, r1
LDI r30, $63
ST Z, r2
ST Z, r3
STD Z+2, r4
34
SUB
Operacin: (k) Rd
Operacin: Rd Rd - Rr
Operandos: 0 d 31, 0 r 31
ADD r1, r2
ADD r28, r28
Ejemplo:
LDS r2, $FF00
ADD r2, r1
STS $FF00, r2
; Suma r2 a r1 (r1=r1+r2)
; Suma r28 a s mismo (r28=r28+r28)
Sintaxis: SWAP Rd
Operacin: Rd Rd - K
Operandos: 0 d 31
Banderas afectadas:
Ejemplo:
INC r1
SWAP r1
INC r1
SWAP r1
Ejemplo:
SUBI r22, $11
35
; Incrementar r1
; Intercambiar los nibbles alto y bajo de r1
; Incrementar r1
; Intercambiar otra vez
Sintaxis: TST Rd
Sintaxis: WDR
Operacin: Rd Rd (AND) Rd
Operandos: 0 d 31
Operandos: Ninguno
Banderas afectadas:
Banderas afectadas: Ninguna
V: Se pone a cero.
N: Se activa si el bit MSB del resultado est a uno, de lo
contrario se borrar.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
Ejemplo:
WDR
Ejemplo:
TST r0
; Prueba r0
BREQ prueba ; Brinca si r0 = 0
...
prueba: NOP
; Destino de desvo (No hacer nada)
36