Vous êtes sur la page 1sur 33

CONJUNTO DE INSTRUCCIONES AVR

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.

NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES


Registros y operandos
Rd

Registro destino (y fuente) del bloque de registros de trabajo

Rr

Registro fuente del bloque de registros de trabajo

Resultado despus de que una instruccin es ejecutada

Dato inmediato (constante)

Direccin de memoria

Bit de un registro I/O (7-0)

Bit en el registro de estado (SREG)

X,Y,Z Registros de direccionamiento indirecto o registros de palabra (X=R27:R26


Y=R29:R28 Z=R31:R30)
P
Registros del bloque I/O
q

Desplazamiento (6-bit) por direccionamiento directo

Banderas del registros de estado (SREG)


C: Bandera de acarreo

S: NV para pruebas de signo

Z: Bandera de resultado cero

H: Bandera de medio acarreo

N: Bandera de resultado negativo

T: Bit transferido por la instruccin BLD


o BST
I: Bandera de interrupciones globales

V: Indicador de complemento a dos


desbordado

RESUMEN DEL CONJUNTO DE INSTRUCCIONES


Instrucciones Aritmticas y Lgicas
Mnemnico
ADD
ADC
ADIW
SUB
SUBI
SBC
SBCI
AND
ANDI
OR
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
ADIW
SBIW
MUL
MULS
MULSU

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

Instrucciones de desvo (salto)


Descripcin
Salto relativo
Salto indirecto
Salto indirecto extendido
Salto
Llamada relativa a subrutina
Llamada indirecta a subrutina

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

Llamada indirecta a subrutina extendida


Llamada a subrutina
Regreso de subrutina
Regreso de interrupcin
Compare y salta si es igual
Compara
Compara con acarreo
Compara con inmediato
Salta si el bit del registro es cero
Salta si el bit del registro es uno
Salta si el bit del registro I/O es cero
Salta si el bit del registro I/O es uno
Salta si el bit de SREG es cero
Salta si el bit de SREG es uno
Salta si es igual
Salta si es diferente
Salta si C est a uno
Salta si C est a cero
Salta si es mayor o igual
Salta si es menor
Salta si es negativo
Salta si es mayor
Salta si es mayor o igual (con signo)
Salta si es menor (con signo)
Salta si H est a uno
Salta si H est a cero
Salta si T est a uno
Salta si T est a cero
Salta si V esta a uno
Salta si V est a cero
Salta si I est a uno
Salta si I est a cero

Instrucciones de Transferencia de Datos


Mnemnicos
MOV
MOVW
LDI
LDS
LD
LD
LD
LD
LD
LD
LDD
LD
LD
LD
LDD
STS

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

Instrucciones de Bit y prueba de Bit


Mnemnicos
LSL
LSR
ROL
ROR
ASR
SWAP
BSET
BCLR
SBI
CBI
BST
BLD
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLN
SEV
CLV
SET
CLT
SEH
CLH
NOP
SLEEP
WDR

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

ADC Suma de dos registros con acarreo

ADD Suma de dos registros sin acarreo

Sintaxis: ADC Rd, Rr

Sintaxis: ADD Rd, Rr

Operacin: Rd Rd + Rr + C

Operacin: Rd Rd + Rr

Operandos: 0 d 31, 0 r 31

Operandos: 0 d 31, 0 r 31

Descripcin: Suma dos registros y el contenido de la bandera C;


deja el resultado en el registro destino Rd.

Descripcin: Suma dos registros sin considerar la bandera C y


deja el resultado en el registro destino Rd.

Banderas afectadas:

Banderas afectadas:

H: Se activa si hay un acarreo 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 hay acarreo del bit MSB del resultado, de lo
contrario se borrar.

H: Se activa si hay un acarreo 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 hay acarreo del bit MSB del resultado, de lo
contrario se borrar.

Ejemplo:

Ejemplo:

ADC r1, r2

; Suma r1, r2 y C
; el resultado lo pone en r1

ADD r1, r2
ADD r28, r28

ADIW Suma un dato inmediato a un registro de


palabra

AND Funcin lgica AND entre registros


Sintaxis: AND Rd, Rr

Sintaxis: ADIW Rd+1:Rd,K

Operacin: Rd Rd (AND) Rr

Operacin: Rd +1: Rd Rd+1: Rd + K

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.

Descripcin: Se realiza el AND lgico entre el contenido del


registro Rd y del registro Rr; deja el resultado en el registro
destino Rd.
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.

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

S: Se activa slo si una de las banderas V o N est a uno.


V: Se activa si hay desbordamiento en el complemento a dos de
la operacin.
N: Se activa si el bit MSB est a uno.
Z: Se activa si el resultado es 0x00.
C: Se activa si hay acarreo del bit MSB.
Ejemplo:
ADIW

R25:R24, 1

; Suma r2 a r1 (r1=r1+r2)
; Suma r28 a s mismo (r28=r28+r28)

; Suma 1 a R24 y en caso de que haya


; acarreo se lo suma a R25

; AND lgico entre r2 y r3, resultado en r2


; Poner 0000 0001 en r16
; Aislar el bit 0 en r2

ANDI Funcin lgica AND entre un registro y


un dato inmediato

ASR Desplazamiento aritmtico a la derecha


Sintaxis: ASR Rd

Sintaxis: AND Rd, K


Operacin:

Operacin: Rd Rd (AND) K

Operandos: 0 d 31

Operandos: 0 d 31, 0 K 255

Descripcin: Desplaza todos los bits de Rd una posicin hacia la


derecha. El bit 7 se mantiene constante. El bit 0 se carga dentro
de la bandera C. Esta operacin divide entre dos un valor con
signo sin cambiar su signo. La bandera C puede usarse para
redondear el resultado.

Descripcin: Se realiza el AND lgico entre el contenido del


registro Rd y el valor K; deja el resultado en el registro destino
Rd.
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.

S: N C, para prueba de signo


V: N C (para N y C despus del desplazamiento)
N: Se pone a uno si el MSB de Rd esta a uno.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa antes del desplazamiento el LSB de Rd estaba a
uno.

Ejemplo:
ANDI r17, $0F
ANDI r18, $10
ANDI r19, $AA

; Borrar el nibble alto de r17


; Aislar el bit 4 en r18
; Borrar los bits impares de r19

Ejemplo:
LDI r16, $10
ASR r16
LDI r17, $FC
ASR r17

; Cargar 16 decimal en r16


; r16 = r16 / 2
; Cargar -4 en r17
; r17 = r17 / 2

BCLR Poner a cero el bit de una bandera

BLD Carga en un registro la bandera T

Sintaxis: BCLR s

Sintaxis: BLD Rd, b

Operacin: SREG(s) 0

Operacin: Rd(b) T

Operandos: 0 s 7

Operandos: 0 d 31, 0 b 7

Descripcin: Pone a cero un bit especfico del registro de


banderas SREG.

Descripcin: Carga la bandera T del registro SREG en el bit b


del registro Rd.

Banderas afectadas:

Banderas afectadas: Ninguna

I: 0 si s = 7; de lo contrario sin cambio


T: 0 si s = 6; de lo contrario sin cambio
H: 0 si s = 5; de lo contrario sin cambio
S: 0 si s = 4; de lo contrario sin cambio
V: 0 si s = 3; de lo contrario sin cambio
N: 0 si s = 2; de lo contrario sin cambio
Z: 0 si s = 1; de lo contrario sin cambio
C: 0 si s = 0; de lo contrario sin cambio

Ejemplo:
BST r1, 2
BLD r0, 4

Ejemplo:
BCLR 0
BCLR 7

; Borrar la bandera C
; Deshabilitar interrupciones

; Guardar el bit 2 de r1 en la bandera T


; Cargar T en el bit 4 de r0

BRBC Brinca si el bit de SREG es cero

BRBS Brinca si el bit de SREG est a set (uno)

Sintaxis: BRBC s, k

Sintaxis: BRBS s, k

Operacin: Si SREG(s) = 0 entonces PC PC + k +1


Si SREG(s) = 1 entonces PC PC + 1

Operacin: Si SREG(s) = 1 entonces PC PC + k +1


Si SREG(s) = 0 entonces PC PC + 1

Operandos: 0 s 7, -64 k 63

Operandos: 0 s 7, -64 k 63

Descripcin: Examina un bit del registro SREG y realiza un


salto relativo en el PC (contador de programa) si el bit est a
cero. La instruccin desva relativamente al PC 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.

Descripcin: Examina un bit del registro SREG y realiza un


salto relativo en el PC (contador de programa) si el bit est a uno
. La instruccin desva relativamente al PC 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.

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Ejemplo:

dife:

CPI r20, 5
BRBC 1, dife
...
NOP

; Comparar r20 con el valor 5


; Salta si la bandera Z es cero
; Destino de desvo (No hacer nada)

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)

BRCC Salta si la bandera C es cero

BRCS Salta si la bandera C est a set (uno)

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

Descripcin: Examina la bandera C y si es 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 0, k).

Descripcin: Examina la bandera C y si est a uno 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 0, k).

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Ejemplo:

desvo:

ADD r22, r23


BRCC desvo
...
NOP

; Suma r23 a r22


; Desva si C est borrado
desvo:

; Destino de desvo

10

CPI r26, $56


BRCS desvo
...
NOP

; Comparar r26 con $56


; Desva si C est a uno
; Destino de desvo

BREAK Pausa

BREQ Salta si es igual

Sintaxis: BREAK

Sintaxis: BREQ k

Operacin: Pausa en la depuracin

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.

Descripcin: Examina la bandera Z y ejecuta un salto relativo en


PC (contador de programa) si Z est a uno. Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con o
sin signo representado en Rd es igual al nmero binario con o sin
signo representado en Rr. Esta instruccin desva relativamente a
PC 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 1, k).

La instruccin no est disponible para todos los modelos de


AVRs.
Banderas afectadas: Ninguna

Banderas afectadas: Ninguna


Ejemplo:

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)

BRGE Salta si es mayor o igual (con signo)

BRHC Salta si la bandera H est a cero

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).

Descripcin: Examina la bandera S 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 BRBC 0, k). Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el
nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr.

Banderas afectadas: Ninguna


Ejemplo:

Banderas afectadas: Ninguna


desvio:
Ejemplo:

desvo:

CP r11, r12
BRGE desvo
...
NOP

; Comparar los registros r11 y r12


; Desva si r11 r12 (con signo)
; Destino de desvo

11

BRHC desvio
...
NOP

; Desvo si la bandera H est a cero


; Destino de desvo

BRHS Salta si la bandera H est a uno

BRID Salta si la bandera I est a cero

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

Descripcin: Examina la bandera H y si est a uno 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).

Descripcin: Examina la bandera I; 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 7, k).

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Ejemplo:

desvio:

BRHS desvio
...
NOP

; Desvo si la bandera H est a uno


; Destino de desvo

desvio:

BRIE desvio
...
NOP

; Desva si la bandera I est a cero


; Destino de desvo

BRIE Salta si la bandera I est a uno

BRLO Salta si es menor

Sintaxis: BRIE k

Sintaxis: BREQ k

Operacin: Si I = 1 entonces PC PC + k + 1
Si I = 0 entonces PC PC + 1

Operacin: Si Rd < Rr : C = 1 entonces PC PC + k + 1


Si Rd Rr : C = 0 entonces PC PC + 1

Operandos: -64 k 63

Operandos: -64 k 63

Descripcin: Examina la bandera I; si est a uno 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 7, k).

Descripcin: Examina la bandera C y si est a uno 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 BRBC 0, k). Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el
nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr.

Banderas afectadas: Ninguna


Ejemplo:

desvio:

BRIE desvio
...
NOP

; Desva si la bandera I est a uno

Banderas afectadas: Ninguna

; 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)

BRLT Salta si es menor (con signo)

BRMI Salta si es negativo

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).

Descripcin: Examina la bandera S y si est a uno 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 BRBC 0, k). Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el
nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr.

Banderas afectadas: Ninguna


Ejemplo:

Banderas afectadas: Ninguna


desvo:

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)

BRNE Salta si es diferente

BRPL Salta si es positivo

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

Descripcin: Examina la bandera Z y ejecuta un salto relativo en


PC (contador de programa) si Z est a cero. Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el salto ocurre si el nmero binario con o
sin signo representado en Rd es diferente al nmero binario con
o sin signo representado en Rr. Esta instruccin desva
relativamente a PC 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 1, k).

Descripcin: Examina la bandera N y si est a cero 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).
Banderas afectadas: Ninguna
Ejemplo:

Banderas afectadas: Ninguna


desvo:

Ejemplo:
loop:

EOR r27, r27


INC r27
...
CPI r27,5
BRNE loop
NOP

; Borrar r27
; Incrementar r27
; Comparar r27 con 5
; Desvo si r27 5
; Salida de Loop

13

SUBI r26, $50


BRPL desvo
...
NOP

; Restar $50 de r26


; Desva si r26 es positivo
; Destino de desvo

BRSH Salta si es mayor o igual (sin signo)

BRTC Salta si la bandera T est a cero

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

Descripcin: Examina la bandera C 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 BRBC 0, k). Si la instruccin se
ejecuta inmediatamente despus de alguna de las instrucciones
CP, CPI, SUB o SUBI, el desvo puede ocurrir si y slo si el
nmero binario con o sin signo representado en Rd es mayor o
igual al nmero binario con o sin signo representado en Rr.

Descripcin: Examina la bandera T 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).
Banderas afectadas: Ninguna
Ejemplo:

Banderas afectadas: Ninguna


Ejemplo:
desvio:

desvo:

SUBI r19, 4
BRSH desvo
...
NOP

BST r3, 5
BRTS desvio
...
NOP

; cargar el bit 5 de r3 en la bandera T


; Desva si ese bit est a cero
; Destino de desvo

; Restar 4 de r19
; Desva si r19 4 (sin signo)
; Destino de desvo

BRTS Salta si la bandera T est a uno

BRVC Salta si la bandera V est a cero

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

Descripcin: Examina la bandera T y si est a uno 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 6, k).

Descripcin: Examina la bandera V 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 6, k).

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Ejemplo:

desvio:

BST r3, 5
BRTS desvio
...
NOP

; cargar el bit 5 de r3 en la bandera T


; Desva si ese bit est a uno
; Destino de desvo

desvio:

14

ADD r3, r4
BRVS desvio
...
NOP

; Suma el registro r4 a r3
; Desva si no hay desbordamiento
; Destino de desvo

BRVS Salta si la bandera V est a uno

BSET Poner a uno el bit de una bandera

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.

Descripcin: Examina la bandera V y si est a uno 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 6, k).

Banderas afectadas:

; Suma el registro r4 a r3
; Desva si hay desbordamiento

I: 1 si s = 7; de lo contrario sin cambio


T: 1 si s = 6; de lo contrario sin cambio
H: 1 si s = 5; de lo contrario sin cambio
S: 1 si s = 4; de lo contrario sin cambio
V: 1 si s = 3; de lo contrario sin cambio
N: 1 si s = 2; de lo contrario sin cambio
Z: 1 si s = 1; de lo contrario sin cambio
C: 1 si s = 0; de lo contrario sin cambio

; Destino de desvo

Ejemplo:

Banderas afectadas: Ninguna


Ejemplo:

desvio:

ADD r3, r4
BRVS desvio
...
NOP

BSET 6
BSET 7

; Poner a uno la bandera T


; Interrupcin habilitada

BST Guarda en T el bit de un registro

CALL llamada larga a subrutina

Sintaxis: BST Rd, b

Sintaxis: CALL k

Operacin: T Rd(b)

Operacin: PC k Dispositivos con PC de 16 bits


PC k Dispositivos con PC de 22 bits

Operandos: 0 d 31, 0 b 7
Operandos: 0 k 64K
0 k 4M

Descripcin: Guarda el bit b del registro Rd en la bandera T del


registro de SREG.

Pila: Stack PC + 2 : SP SP -2 (2 Bytes)


Stack PC + 2 : SP SP -3 (3 Bytes)

Banderas afectadas:
T: Se pone a uno si el bit b del registro Rd est a uno, de lo
contrario se pone a cero.

Descripcin: Llama a una subrutina en cualquier lugar de la


memoria de programa. La direccin de retorno se almacena en la
pila. El puntero de pila SP es post-decrementado durante la
instruccin CALL.

Ejemplo:
BST r1, 2
BLD r0, 4

; Guardar el bit 2 de r1 en la bandera T


; Cargar T en el bit 4 de r0

Banderas afectadas: Ninguna


Ejemplo:

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

CBI Poner a cero un bit del registro I/O

CBR Pone a cero los bits del registro

Sintaxis: CBI P, b

Sintaxis: CBR Rd, K

Operacin: (P, b) 1

Operacin: Rd Rd AND ($FF K)

Operandos: 0 P 31, 0 b 7

Operandos: 16 d 31, 0 K 255

Descripcin: Pone a cero un bit especfico en un registro de I/O.


Esta operacin funciona en los 32 registros de I/O ms bajos, y
en los registros de trabajo de 0 a 31.

Descripcin: Pone a uno los bits del registro Rd indicados.


Realiza la operacin ORI lgica entre el contenido del registro
Rd y una constante K, y deja el resultado en el registro destino
Rd.

Banderas afectadas: Ninguna


Banderas afectadas:
Ejemplo:
CBI $12, 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.

; Poner a cero el bit 7 de Port D

Ejemplo:
CBR r16, $F0
CBR r18, 1

; Borra el nibble alto de r16


; Borra el bit 0 de r18

CLC Poner a cero la bandera C

CLH Poner a cero la bandera H

Sintaxis: CLC

Sintaxis: CLH

Operacin: C 0

Operacin: H 0

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a cero la bandera de acarreo C del registro de


estado SREG.

Descripcin: Pone a cero la bandera de medio acarreo H del


registro de estado SREG.

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

CLI Deshabilitar las interrupciones globales

CLN Poner a cero la bandera N

Sintaxis: CLI

Sintaxis: CLN

Operacin: N 0

Operacin: N 0

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a cero la bandera de habilitacin de


interrupciones globales I del registro de estado SREG.

Descripcin: Pone a cero la bandera de resultado negativo N del


registro de estado SREG.

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

CLR Borra un registro

CLS Poner a cero la bandera S

Sintaxis: CLR Rd

Sintaxis: CLS

Operacin: Rd Rd (XOR) Rd

Operacin: S 0

Operandos: 0 d 31

Operandos: Ninguno

Descripcin: Borra un registro. Esta instruccin realiza una OR


exclusiva entre un registro y en s mismo. Borrar todos los bits
del registro.

Descripcin: Pone a cero la bandera de signo S del registro de


estado SREG.
Banderas afectadas:

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

CLT Poner a cero la bandera T

CLV Poner a cero la bandera V

Sintaxis: CLT

Sintaxis: CLV

Operacin: T 0

Operacin: V 0

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a cero la bandera T del registro de estado


SREG.

Descripcin: Pone a cero la bandera de desbordamiento V del


registro de estado SREG.

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

CLZ Poner a cero la bandera Z

COM Complemento a uno

Sintaxis: CLZ

Sintaxis: COM Rd

Operacin: Z 0

Operacin: Rd $FF - Rd

Operandos: Ninguno

Operandos: 0 d 31

Descripcin: Pone a cero la bandera de resultado cero Z del


registro de estado SREG.

Descripcin: Realiza el complemento a uno del registro Rd.


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.
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

CPC Compara con acarreo

Sintaxis: CP Rd, Rr

Sintaxis: CPC Rd, Rr

Operacin: Rd -Rr

Operacin: Rd Rr -C

Operandos: 0 d 31, 0 r 31

Operandos: 0 d 31, 0 r 31

Descripcin: Efecta una comparacin entre dos registros Rd y


Rr. Ninguno de los registros es cambiado. Todos los desvos
condicionales pueden usarse despus de esta instruccin.

Descripcin: Realiza una comparacin entre dos registros Rd y


Rr y tambin se toma en cuenta el estado de la bandera C previo.
Ninguno de los registros es cambiado. Todos los desvos
condicionales pueden usarse despus de esta instruccin

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.

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: El valor previo permanece sin cambio cuando el resultado es
cero, de lo contrario se borrar.
C Estar a uno si el valor absoluto del contenido de Rr + C, es
mayor que el contenido de Rd, de lo contrario se borrar.

Ejemplo:

noteq:

CP r4, r19
BRNE noteq
...
NOP

; Comparar r4 con r19


; Desva si la bandera Z est activa.

Ejemplo:

; Destino de desvo (No hacer nada)

noteq:

CP r2, r0
CPC r3, r1
BRNE noteq
...
NOP

; Comparar r3:r2 con r1:r0


; Compara el byte bajo
; Compara el byte alto
; Desva si la bandera Z est activa
; Destino de desvo( no hacer nada)

CPI Compara un registro con dato inmediato

CPSE Compara y saltar si es igual

Sintaxis: CPI Rd, K

Sintaxis: CPSE Rd, Rr

Operacin: Rd -K

Operacin: Si Rd = Rr entonces PC PC + 2 ( o 3)
Si Rd Rr entonces PC PC + 1

Operandos: 16 d 31, 0 K 255


Operandos: 0 d 31, 0 r 31
Descripcin: Efecta una comparacin entre el registro Rd y un
dato inmediato. El registro no es cambiado. Todos los desvos
condicionales pueden usarse despus de esta instruccin.

Descripcin: Ejecuta una comparacin entre dos registros Rd y


Rr, y si Rd Rr entonces la siguiente instruccin se ejecuta de lo
contrario la siguiente instruccin es brincada.

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

; Comparar r19 con 3


; Desva si la bandera Z est activa
; Destino de desvo (No hacer nada)

19

; Incrementar r4
; Comparar r4 con r0
; Slo ejecutar si r4 r0
; Continuar (No hacer nada)

DEC Decrementar el registro

EOR Funcin lgica OR-exclusiva () entre


registros

Sintaxis: DEC Rd

Sintaxis: EOR Rd, Rr

Operacin: Rd Rd -1

Operacin: Rd Rd Rr

Operandos: 0 d 31

Operandos: 0 d 31, 0 r 31

Descripcin Se decrementa en uno al contenido del registro Rd y


deja el resultado en Rd. La bandera C de SREG no es afectada
por la operacin. Al funcionar con nmeros sin signo, slo se
puede esperar que funcionen de forma consistente las
instrucciones BREQ y BRNE. Al operar con valores en
complemento a dos todas las instrucciones de desvo estn
disponibles.

Descripcin: Se realiza el XOR lgico entre el contenido del


registro Rd y del registro Rr; deja el resultado en el registro
destino Rd.
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.

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:

LDI r17, $10


ADD r1, r2
DEC r17
BRNE loop
NOP

; Cargar constante en r17


; Sumar r2 a r1
; Decrementar r17
; Desvo si r17 0
; Continuar (No hacer nada)

ICALL llamada indirecta a subrutina

IJMP Salto indirecto

Sintaxis: ICALL

Sintaxis: IJMP

Operacin: PC (15:0) Z (15:0)

Operacin: PC Z(15:0)

Operandos: Ninguno

Operandos: Ninguno

Pila: Stack PC + 1 :

SP SP -2 (2 Bytes)

Descripcin: Efecta un salto indirecto a una direccin apuntada


por el registro puntero Z. El registro puntero Z es de 16 bits y
permite saltos hacia los 64K words (128K bytes) ms bajos de la
seccin de memoria de programa. La instruccin no est
disponible para todos los modelos de AVRs.

Descripcin: Realiza una llamada indirecta a una subrutina


apuntada por el registro puntero Z. El registro puntero Z es de 16
bit y permite la llamada a subrutina dentro de los 64K words
(128K bytes) ms bajos de la seccin de espacio de memoria de
programa. El SP (puntero de pila) utiliza durante el ICALL un
esquema de post-decremento.

Banderas afectadas: Ninguna


Ejemplo:

Banderas afectadas: Ninguna


MOV r30, r0
IJMP

Ejemplo:
MOV r30, r0
ICALL

; Poner offset a la tabla de llamada


; Rutina de llamada que apunta a r31:r30

20

; Poner offset a la tabla de salto


; Saltar a la rutina apuntada por r31:r30

IN Cargar un registro de trabajo con I/O

INC Incrementar el registro

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

Descripcin: Carga un dato proveniente del bloque de registros


I/O (Puertos, Timers, registros de configuracin, etc.) en el
registro de trabajo Rd.

Descripcin Se incrementa en uno al contenido del registro Rd y


deja el resultado en el registro Rd. La bandera C de SREG no es
afectada por la operacin. Al funcionar con nmeros sin signo,
slo se puede esperar que funcionen de forma consistente las
instrucciones BREQ y BRNE. Al operar con valores en
complemento a dos todas las instrucciones de desvo estn
disponibles.

Banderas afectadas: Ninguna


Ejemplo:
IN r25, $16
CPI r25,4

exit:

BREQ exit
...
NOP

; Carga en r25 el ;dato


;contenido en Puerto B
; Comparar el valor de r25 con
; un dato inmediato
; Desva si r25 = 4

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

LDI Carga de un dato inmediato

Sintaxis: JMP k

Sintaxis: LDI Rd, K

Operacin: PC k

Operacin: Rd K

Operandos: 0 k 4M

Operandos: 16 Rd 31, 0 K 255

Descripcin: Ejecuta un salto a cualquier posicin de la


memoria de programa. La instruccin no es disponible para todos
los modelos de AVRs.

Descripcin: Carga un dato inmediato de 8-bits en cualquiera de


los registros de trabajo a partir de R16 hasta R31.
Banderas afectadas: Ninguna

Banderas afectadas: Ninguna


Ejemplo:
Ejemplo:

lejos:

MOV r1, r0
JMP lejos

nop

CLR r31
LDI r30, $F0
LPM

; Copia r0 en r1
; Salto incondicional
; Destino de salto

21

; Borra el byte alto de Z


; Pone el byte bajo de Z a $F0
; Carga una constante de la memoria
; de programa apuntada por Z

LD Carga indirecta usando X


El resultado de estas combinaciones es indefinido:

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

Algunas variantes de esta instruccin no son disponibles para


todos los modelos de AVRs.

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.

Banderas afectadas: Ninguna


Ejemplo:
CLR r27
LDI r26, $60
LD r0, X+

La direccin de los datos es apuntado por el registro puntero X


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPX tiene que ser correctamente configurado.

LD r1, X
LDI r26, $63
LD r2, X
LD r3, -X

El registro puntero X puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila con el registro puntero X. Slo el byte
bajo del puntero X se ocupa para dispositivos sin ms de 256
bytes de espacio de datos. Para tales dispositivos, el byte alto del
puntero no es usado por esta instruccin y puede usarse para
otros propsitos.

; Borra el byte alto de X


; Pone el byte bajo de X a $60
; Carga en r0 el dato de la localidad $60
;(X post-incrementado)
; Carga en r1 el dato contenido en la
; localidad $61
; Pone el byte bajo de X a $63
; Carga en r2 el dato de la localidad $63
; Cargar en r3 el dato de la localidad $62
;(X pre-decremento)

LD (LDD) Carga indirecta usando Y


El resultado de estas combinaciones es indefinido:

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.

Banderas afectadas: Ninguna

La direccin de los datos es apuntado por el registro puntero Y


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPY tiene que ser correctamente configurado.

LD r1, Y
LDI r28, $63
LD r2, Y
LD r3,-Y

Ejemplo:
CLR r29
LDI r28, $60
LD r0, Y+

LDD r4, Y+2

El registro puntero Y puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila con el registro puntero Y. Slo el byte
bajo del puntero Y se ocupa para dispositivos sin ms de 256
bytes de espacio de datos. Para tales dispositivos, el byte alto del
puntero no es usado por esta instruccin y puede usarse para
otros propsitos.

22

; Borra el byte alto de Y


; Pone el byte bajo de Y a $60
; Carga en r0 el dato de la localidad $60
; (Y post-incrementado)
; Carga en r1 el dato de la localidad $61
; Pone el byte bajo de Y a $63
; Carga en r0 el dato de la localidad $63
; Carga en r0 el dato de la localidad $62
; (Y pre-decrementado)
; Carga en r4 el dato de la localidad $64

LD (LDD) Carga indirecta usando Z


Slo el byte bajo del puntero Z se ocupa para dispositivos sin
ms de 256 bytes de espacio de datos. Para tales dispositivos, el
byte alto del puntero no es usado por esta instruccin y puede
usarse para otros propsitos.

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)

El resultado de estas combinaciones es indefinido:

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

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 r31, -Z
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Banderas afectadas: Ninguna
Ejemplo:

La direccin de los datos es apuntado por el registro puntero Z


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPX tiene que ser correctamente configurado.

CLR r31
LDI r30, $60
LD r0, Z+
LD r1, Z
LDI r30, $63
LD r2, Z
LD r3,-Z

El registro puntero Z puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila; Sin embargo, debido a que este puntero
puede usarse para las llamadas indirectas a subrutinas y los saltos
indirectos, es mejor usar a los punteros X o Y para direccionar al
puntero de pila.
.

LDD r4, Z+2

; Borra el byte alto de Z


; Pone el byte bajo de Z a $60
; Carga en r0 el dato de la localidad $60
; (Z post-incrementado)
; Carga en r1 el dato de la localidad $61
; Pone el byte bajo de Z a $63
; Carga en r0 el dato de la localidad $63
; Carga en r0 el dato de la localidad $62
; (Z pre-decrementado)
; Carga en r4 el dato de la localidad $64

LDS Carga directa desde SRAM

LPM Carga memoria de programa

Sintaxis: LDS Rd, k

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

Descripcin: Carga un byte del espacio de memoria de datos a


un registro de trabajo. Para los dispositivos con SRAM, el
espacio de datos est compuesto por los registros de trabajo,
memoria de I/O y SRAM interna (y SRAM externa si es
aplicable). Para los dispositivos sin SRAM, el espacio de datos
est compuesto slo por los registros de trabajo. La EEPROM
tiene un espacio de direcciones separado. Debe proporcionarse
una direccin de 16-bit. Se limita el acceso de memoria al
segmento de datos de 64K bytes. Para acceder a otro segmento
de datos en dispositivos con ms de 64K bytes de datos de
espacio, el registro I/O RAMPD tiene que ser correctamente
configurado.

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

Banderas afectadas: Ninguna


Esta instruccin no es disponible para todos los modelos de
AVRs.

Esta instruccin no es disponible para todos los modelos de


AVRs.

Ejemplo:
Ejemplo:
LDS r2, $FF00
ADD r2, r1
STS $FF00, r2

CLR r31
LDI r30, $F0
LPM

; Carga r2 con el contenido de la localidad


; $FF00 de la memoria de datos
; Sumar r1 a r2
; Escribir en SRAM el contenido de r2

23

; Borrar el byte alto de Z


; Poner a cero el byte bajo de Z
; Cargar la constante de la
;memoria de programa
;apuntada por Z (r31:r30)

LSL Desplazamiento a la izquierda

LSR Desplazamiento a la derecha

Sintaxis: LSL Rd

Sintaxis: LSR Rd

Operacin:

Operacin:

Operandos: 0 d 31

Operandos: 0 d 31

Descripcin: Desplaza todos los bits de Rd una posicin hacia la


izquierda. El bit 7 se carga en la bandera C de SREG.
Prcticamente esta operacin multiplica por dos al contenido de
Rd.

Descripcin: Desplaza todos los bits de Rd una posicin hacia la


derecha. En el bit 7 se carga un cero, en la bandera C se carga el
LSB de Rd. Prcticamente esta operacin divide entre dos al
contenido de Rd.

Banderas afectadas:

Banderas afectadas:

H: Se activa si hay un acarreo del bit 3, de lo contrario se


borrar.
S: N C, para prueba de signo
V: N C (para N y C despus del desplazamiento)
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 antes del desplazamiento el MSB del Rd est a
uno, de lo contrario se borrar.

S: N C, para prueba de signo


V: N C (para N y C despus del desplazamiento)
N: Se pone a cero
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa si el LSB de Rd antes del desplazamiento estaba a
uno.
Ejemplo:
ADD r0, r4
LSR r0

Ejemplo:
ADD r0, r4
LSL r0

; Sumar r4 a r0
; Dividir a r0 entre 2

; Sumar r4 a r0
; Multiplicar r0 por 2

MOV Copia de registros

MOVW Copia de registros de palabra

Sintaxis: MOV Rd, Rr

Sintaxis: MOVW Rd + 1: Rd, Rr + 1: Rr

Operacin: Rd Rr

Operacin: Rd + 1: Rd Rr + 1: Rr

Operandos: 0 d 31, 0 r 31

Operandos: d {0,2,,30}

Descripcin: Efecta una copia de un registro en otro registro.


El registro fuente Rr permanece sin cambiar, mientras el registro
destino Rd es cargado con una copia de Rr.

Descripcin: Efecta una copia de un par de registros en otro par


de registros. Los registros fuente Rr permanecen sin cambiar,
mientras los registros destino Rd son cargados con una copia de
Rr.

r {0,2,,30}

Banderas afectadas: Ninguna


Banderas afectadas: Ninguna
Ejemplo:

check:

MOV r16,r0
CALL check
...
CPI r16,$11
...
RET

Esta instruccin no es disponible para todos los modelos de


AVRs.

; Copiar r0 en r16
; Llamada a subrutina

Ejemplo:
; Comparar r16 con $11
; Retorno de subrutina
check:

24

MOVW r17:r16,r1:r0 ; Copiar r1:r0 en r17:r16


CALL check
; Llamada a subrutina
...
CPI r16, $11
; Comparar r16 con $11
...
RET
; Retorno de subrutina

MUL Multiplicacin sin signo

MULS Multiplicacin con signo

Sintaxis: MUL Rd, Rr

Sintaxis: MULS Rd, Rr

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

Descripcin: El multiplicando Rd y el multiplicador Rr son


registros con nmeros sin signo. El resultado sin signo es de 16bit y se coloca la parte ms significativa del resultado en registro
R1 y la menos significativa en R0. Si el multiplicando y el
multiplicador son R1 y R0 el resultado se sobrescribir en ellos.

Descripcin: El multiplicando Rd y el multiplicador Rr son


registros con nmeros signados. El resultado con signo es de 16bit y se coloca la parte ms significativa del resultado en registro
R1 y la menos significativa en R0.

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.

C: Se pone a uno si el bit 15 del resultado est a uno.


Z: Se pone a uno si el resultado es cero.

Esta instruccin no es disponible para todos los modelos de


AVRs.

Esta instruccin no es disponible para todos los modelos de


AVRs.

Ejemplo:
Ejemplo:
MUL r5, r4
MOVW r4, r0

MUL r21 r20


MOVW r20, r0

; Multiplica R5 con R4
; Copia el resultado en R5: R4

; Multiplica R21 con R20


; Copia el resultado en R21: R20

NEG Complemento a dos

NOP No operacin

Sintaxis: NEG Rd

Sintaxis: NOP

Operacin: Rd $00 - Rd

Operacin: Ninguna

Operandos: 0 d 31

Operandos: Ninguno

Descripcin: Cambia el contenido del registro Rd con su


complemento a dos; el valor $80 se deja sin cambiar.

Descripcin: Consume un ciclo sin realizar operaciones.


Banderas afectadas: Ninguna

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:

SUB r11, r0 ; Restar r0 de r11


BRPL prueba ; Desvo si la bandera N est a cero.
NEG r11
; Realizar el complemento a dos de r11
NOP
; Destino de desvo (No hacer nada)

25

; Borrar r16
; Poner a uno r17
; Escribir ceros en el Puerto B
; Esperar (No hacer nada)
; Escribir unos en el Puerto B

OR Funcin lgica OR entre registros

ORI Funcin lgica OR entre un registro y un


dato inmediato

Sintaxis: OR Rd, Rr

Sintaxis: ORI Rd, K

Operacin: Rd Rd (OR) Rr

Operacin: Rd Rd (OR) K

Operandos: 0 d 31, 0 r 31

Operandos: 0 d 31, 0 K 255

Descripcin: Se realiza el OR lgico entre el contenido del


registro Rd y del registro Rr; deja el resultado en el registro
destino Rd.

Descripcin: Se realiza el OR lgico entre el contenido del


registro Rd y el valor K; deja el resultado en el registro destino
Rd.

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

; Hacer OR lgico entre registros


; Almacena el bit 6 de r15 en el flag T
; Desvo si el flag T est a uno

NOP

; Destino de desvo (No hacer nada)

Ejemplo:
ORI r16, $F0
ORI r17, 1

...
ok:

; Poner a uno el nibble alto de r16


; Poner a uno el bit 0 de r17

OUT Cargar en I/O un registro de trabajo

POP Sacar registro de la pila

Sintaxis: OUT P, Rr

Sintaxis: POP Rr

Operacin: P Rr

Operacin: Rr STACK

Operandos: 0 r 31, 0 P 63

Operandos: 0 r 31

Descripcin: Carga en un registro del bloque I/O el contenido de


un registro trabajo.

Descripcin: Carga el registro Rd con un byte de la pila. El


puntero de pila es incrementado en uno antes del POP

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Esta instruccin no es disponible para todos los modelos de


AVRs.

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

PUSH Guardar registro en la pila

RCALL llamada relativa a subrutina

Sintaxis: PUSH Rr

Sintaxis: RCALL k

Operacin: STACK Rr

Operacin: PC PC + k + 1

Operandos: 0 r 31

Operandos: -2K k 2K

Descripcin: Guarda el contenido del registro Rr en la pila. El


puntero de pila es post-decrementado en uno despus del PUSH

Pila: Stack PC + 1 :

Descripcin: Realiza una llamada relativa a una direccin que se


encuentra dentro de PC - 2K + 1 y PC +2K (words, palabra). En
ensamblador, se usan etiquetas en lugar de operadores relativos.
Para los microcontroladores AVR con memoria de programa que
no excede 4K words (8K bytes) esta instruccin puede
direccionar a toda la memoria desde cualquier posicin. El SP
(puntero de pila) utiliza durante el RCALL un esquema de postdecremento.

Banderas afectadas: Ninguna


Esta instruccin no es disponible para todos los modelos de
AVRs.
Ejemplo:

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

RET Retorno de subrutina

RETI Retorno de interrupcin

Sintaxis: RET

Sintaxis: RETI

Operacin: PC Stack

Operacin: PC Stack

Operandos: Ninguno

Operandos: Ninguno

Pila: SP SP + 2 (bytes)

Pila: SP SP + 2 (bytes)

Descripcin: Efecta un retorno de subrutina. La direccin de


retorno es cargada de la pila. El SP (puntero de pila) utiliza
durante el RET un esquema de post-incremento.

Descripcin: Realiza un retorno de una interrupcin. La


direccin de retorno es cargada desde la pila; la bandera I de
SREG (interrupcin global) se pone a uno. El registro de estado
no se guarda automticamente al entrar en una rutina de
interrupcin, y no se restaura al volver de la rutina interrupcin.
De ser necesario el programa debe incluir una rutina para
manejar adecuadamente esta situacin. El puntero de pila usa un
esquema de pre-incremento durante el RETI.

Banderas afectadas: Ninguna


Ejemplo:

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

PUSH r0 ; Guardar r0 en la pila


...
POP r0
; Restaurar r0
RETI
; Retorno y habilitacin de interrupciones

RJMP Salto relativo

ROL Desplazamiento a la izquierdo con acarreo

Sintaxis: RJMP k

Sintaxis: ROL Rd

Operacin: PC PC + k + 1

Operacin:

Operandos: -2K k 2K

Operandos: 0 d 31

Descripcin: Ejecuta un salto relativo a una direccin que se


encuentra dentro de PC - 2K + 1 y PC +2K. En ensamblador, se
usan etiquetas en lugar de operadores relativos. Para los
microcontroladores AVR con memoria de programa que no
excede 4K words (8K bytes) esta instruccin puede dirigirse a
toda la memoria desde cualquier posicin de direccin.

Descripcin: Desplaza todos los bits de Rd una posicin hacia la


izquierda. La bandera C se desplaza al bit 0 de Rd. El bit 7 se
desplaza hacia la bandera C. Esta operacin combinada con LSL,
multiplica por dos a valores multi-byte con o sin signo.

Banderas afectadas: Ninguna

H: Se activa si hay un acarreo del bit 3, de lo contrario se


borrar.
S: N C, para prueba de signo
V: N C (para N y C despus del desplazamiento)
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 antes del desplazamiento el MSB del Rd est a
uno, de lo contrario se borrar.

Banderas afectadas:

Ejemplo:

error:
ok:

CPI r16, $42


BRNE error
RJMP ok
ADD r16, r17
INC r16
NOP

; Compara r16 con $42


; Desvo si r16 $42
; Salto incondicional
; Suma r17 a r16
; Incrementa r16
; Destino de RJMP

Ejemplo:
LSL r18
ROL r19
BRCS oneenc

; Multiplica r19:r18 por dos


; r19:r18 es un entero de dos
;bytes -con o sin signo; Desva si C est a uno

NOP

; Destino de desvo

...
oneenc:

ROR Desplazamiento a la derecha con acarreo

SBC Resta de dos registros con acarreo

Sintaxis: ROR Rd

Sintaxis: SBC Rd, Rr

Operacin:

Operacin: Rd Rd Rr - C

Operandos: 0 d 31

Operandos: 0 d 31, 0 r 31

Descripcin: Desplaza todos los bits de Rd una posicin hacia la


derecha. La bandera C se desplaza al bit 7 de Rd. El bit 0 se
desplaza hacia la bandera C. Esta operacin combinada con LSR
divide entre dos a valores multi-byte con o sin signo.

Descripcin: Resta dos registros y resta la bandera C; deja el


resultado en el registro Rd.

Banderas afectadas:

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
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: El estado anterior permanece sin cambio cuando el resultado
es cero, de lo contrario se borrar.
C: Se activa si el valor absoluto del contenido de Rr + el acarreo
previo es mayor que el valor absoluto de Rd, de lo contrario se
borrar.

Banderas afectadas:

S: N C, para prueba de signo


V: N C (para N y C despus del desplazamiento)
N: Se pone a uno si el MSB de Rd esta a uno.
Z: Se activa si el resultado es $00, de lo contrario se borrar.
C: Se activa antes del desplazamiento el LSB de Rd estaba a
uno.
Ejemplo:
ADD r0, r4
LSL r0

; Sumar r4 a r0
; Multiplicar r0 por 2

Ejemplo:
SUB r2, r0
SBC r3, r1

28

; Restar r1:r0 de r3:r2


; Restar el byte bajo
; Restar con acarreo el byte alto

SBCI Resta a un registro una constante y el


acarreo

SBI Poner a uno un bit del registro I/O


Sintaxis: SBI P, b

Sintaxis: ADD Rd, Rr

Operacin: (P, b) 1

Operacin: Rd Rd K - C

Operandos: 0 P 31, 0 b 7

Operandos: 16 d 31, 0 K 255

Descripcin: Pone a uno un bit especfico de un registro del


bloque I/O. Esta operacin funciona en los 32 registros de I/O
ms bajos. Direcciones de $00 a $1F.

Descripcin: Resta una constante con un registro y con la


bandera C; deja el resultado en el registro destino Rd.
.
Banderas afectadas:

Banderas afectadas: Ninguna


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
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: El estado anterior permanece sin cambio cuando el resultado
es cero, de lo contrario se borrar.
C: Se activa si el valor absoluto del contenido de Rr + el acarreo
previo es mayor que el valor absoluto de Rd, de lo contrario se
borrar.

OUT $1E, r0
SBI $1C, 0
IN r1, $1D

; Escribir la direccin de EEPROM


; Poner a uno el bit 0 de EECR
; Leer datos de EEPROM

Ejemplo:
SUBI r16, $23
SBCI r17, $4F

; Resta $4F23 de r17:r16


; Restar el byte bajo
; Restar con acarreo el byte alto

SBIC Salta si el bit del registro I/O es cero

SBIS Salta si el bit del registro I/O es uno

Sintaxis: SBCI P, b

Sintaxis: SBIS P, b

Operacin: Si I/O(P,b) = 0 entonces PC PC + 2 ( o 3)


Si I/O(P,b) 0 entonces PC PC + 1

Operacin: Si I/O(P,b) = 1 entonces PC PC + 2 ( o 3)


Si I/O(P,b) 1 entonces PC PC + 1

Operandos: 0 P 31, 0 b 7

Operandos: 0 P 31, 0 b 7

Descripcin: Examina un bit del registro de I/O seleccionado y


salta la siguiente instruccin si el bit est en cero. Est operacin
funciona en los 32 registros de I/O ms bajos, direcciones 0-31).

Descripcin: Examina un bit del registro de I/O seleccionado y


salta la siguiente instruccin si el bit est en uno. Est operacin
funciona en los 32 registros de I/O ms bajos, direcciones 0-31).

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

Ejemplo:

Ejemplo:

espera:

SBIC $1C, 1
RJMP espera
NOP

; Saltar prxima instruccin si


; EEWE* est borrado
; Escritura de EEPROM no
; terminada
; Continuar (No hacer nada)

espera:

SBIS $10, 0
RJMP espera
NOP

* EEWE es el bit 1 del registro EECR (Registro de Control de la


memoria EEprom) mapaeado en la localidad $1C de la memoria
RAM.

29

; Saltar la siguiente instruccin


; si el bit 0 en el Puerto D est a uno
; Bit 0 borrado
; Continuar (No hacer nada)

SBIW Resta un dato inmediato a un registro de


palabra

SBR Pone a uno los bits del registro


Sintaxis: SBR Rd, K

Sintaxis: SBIW Rd+1:Rd,K

Operacin: Rd Rd v K

Operacin: Rd +1: Rd Rd+1 : Rd - K

Operandos: 16 d 31, 0 K 255

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.

Descripcin: Pone a uno los bits del registro Rd indicados.


Realiza la operacin ORI lgica entre el contenido del registro
Rd y una constante K, y deja el resultado en el registro destino
Rd.
Banderas afectadas:

Descripcin: SBIW resta un valor K a un par de registros y deja


el resultado en el par de registros

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:

S: Se activa slo si una de las banderas V o N est a uno.


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 $0000, de lo contrario se borrar.
C: Se activa si el valor absoluto de K es mayor que el valor
absoluto de Rd, de lo contrario se borrar.

SBR r16, 3
SBR r17, $F0

Operando2: 0 K 63

; Poner a uno los bits 0 y 1 de r16


; Poner a uno los 4 MSB en r17

Ejemplo:
SBIW r24, 1
SBIW r28, 63

; Restar 1 de r25:r24
; Restar 63 del puntero Y (r29:r28)

SBRC Salta si el bit del registro es cero

SBRS Salta si el bit del registro es uno

Sintaxis: SBRC Rr, b

Sintaxis: SBRC Rr, b

Operacin: Si Rr(b) = 0 entonces PC PC + 2 ( o 3)


Si Rr(b) 0 entonces PC PC + 1

Operacin: Si Rr(b) = 1 entonces PC PC + 2 ( o 3)


Si Rr(b) 1 entonces PC PC + 1

Operandos: 0 r 31, 0 b 7

Operandos: 0 r 31, 0 b 7

Descripcin: Examina un bit del registro seleccionado y salta la


siguiente instruccin si el bit est borrado (cero).

Descripcin: Examina un bit del registro seleccionado y salta la


siguiente instruccin si el bit est a uno.

Banderas afectadas: Ninguna

Banderas afectadas: Ninguna

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)

SEC Poner a uno la bandera C

SEH Pone a uno la bandera H

Sintaxis: SEC

Sintaxis: SEH

Operacin: C 1

Operacin: H 1

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a uno la bandera de acarreo C del registro de


estado SREG.

Descripcin: Pone a uno la bandera de medio acarreo H del


registro de estado SREG.

Banderas afectadas:

Banderas afectadas:

C: Se pone a uno

H: Se pone a uno

Ejemplo:

Ejemplo:

SEC
ADC r0, 1

; Poner a uno la bandera de acarreo


; r0 = r0 + r1 + 1

SEH

; Poner a uno la bandera H

SEI Habilitar las interrupciones globales

SEN Poner a uno la bandera N

Sintaxis: SEI

Sintaxis: SEN

Operacin: I 1

Operacin: N 1

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a uno la bandera de habilitacin de


interrupciones globales I del registro de estado SREG.

Descripcin: Pone a uno la bandera de resultado negativo N del


registro de estado SREG.

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

ADD r2, r19


SEN

31

; Sumar r19 a r2
; Poner a uno la bandera N

SER Carga todos los bits de un registro

SES Pone a uno la bandera S

Sintaxis: SER Rd

Sintaxis: SES

Operacin: Rd $FF

Operacin: S 1

Operandos: 16 d 31

Operandos: Ninguno

Descripcin: SER Carga directamente $FF al registro


seleccionado.

Descripcin: Pone a uno la bandera de signo S del registro de


estado SREG.

Banderas afectadas: Ninguna

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

SET Pone a uno la bandera T

SEV Pone a uno la bandera V

Sintaxis: SET

Sintaxis: SEV

Operacin: T 1

Operacin: V 1

Operandos: Ninguno

Operandos: Ninguno

Descripcin: Pone a uno la bandera T del registro de estado


SREG.

Descripcin: Pone a uno la bandera de desbordamiento V del


registro de estado SREG.

Banderas afectadas:

Banderas afectadas:

T: Se pone a uno

V: Se pone a uno

Ejemplo:

Ejemplo:

SET

ADD r2, r19


SEV

; Poner a uno la bandera T

32

; Sumar r19 a r2
; Poner a uno la bandera V

SEZ Poner a uno la bandera Z

SLEEP Activar modo sleep

Sintaxis: SEZ

Sintaxis: SLEEP

Operacin: Z 1

Operacin: Consulta el manual del dispositivo para obtener una


informacin detalla acerca de este modo de operacin.

Operandos: Ninguno
Operandos: Ninguno
Descripcin: Pone a uno la bandera de resultado cero Z del
registro de estado SREG.

Descripcin: Pone en modo Sleep al microcontrolador

Banderas afectadas:

Banderas afectadas: Ninguna

Z: Se pone a uno

Ejemplo:

Ejemplo:

MOV r0, r11


LDI r16, (1<<SE)
OUT MCUCR, r16
SLEEP

ADD r2, r19


SEZ

; Suma r19 a r2
; Poner a uno la bandera Z

; Copiar r11 en r0
; Modo sleep habilitado
; Poner el MCU en modo descanso

ST Almacenar indirectamente usando X

El resultado de estas combinaciones es indefinido:

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.

Banderas afectadas: Ninguna


Ejemplo:
CLR r27
LDI r26, $60
ST X+, r0

La direccin de los datos es apuntado por el registro puntero X


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPX tiene que ser correctamente configurado.

ST X, r1
LDI r26, $63
ST X, r2
ST X, r3

El registro puntero X puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila con el registro puntero X. Slo el byte
bajo del puntero X se ocupa para dispositivos sin ms de 256
bytes de espacio de datos. Para tales dispositivos, el byte alto del
puntero no es usado por esta instruccin y puede usarse para
otros propsitos.

33

; Borra el byte alto de X


; Pone el byte bajo de X a $60
; Almacena r0 en la localidad $60 (X post; incrementado)
; Almacenar r1 en la localidad $61
; Pone el byte bajo de X a $63
; Almacena r2 en la localidad $63
; Almacena r3 en la localidad $62 (X pre; decrementado)

ST (STD) Almacenar indirectamente usando Y


El resultado de estas combinaciones es indefinido:

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.

Banderas afectadas: Ninguna

La direccin de los datos es apuntado por el registro puntero Y


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPY tiene que ser correctamente configurado.

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

El registro puntero Y puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila con el registro puntero Y. Slo el byte
bajo del puntero Y se ocupa para dispositivos sin ms de 256
bytes de espacio de datos. Para tales dispositivos, el byte alto del
puntero no es usado por esta instruccin y puede usarse para
otros propsitos.

; Borra el byte alto de Y


; Pone el byte bajo de Y a $60
; Almacena r0 en la localidad $60
; (Y post-incrementado)
; Almacena r1 en la localidad $61
; Pone el byte bajo de Y a $63
; Almacena r0 en la localidad $63
; Almacena r0 en la localidad $62
; (Y pre-decrementado)
; Almacena r4 en la localidad $64

ST (STD) Almacenar indirectamente usando Z


Slo el byte bajo del puntero Z se ocupa para dispositivos sin
ms de 256 bytes de espacio de datos. Para tales dispositivos, el
byte alto del puntero no es usado por esta instruccin y puede
usarse para otros propsitos.

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

El resultado de estas combinaciones es indefinido:

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

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 -Z, r31
Algunas variantes de esta instruccin no son disponibles para
todos los modelos de AVRs.
Banderas afectadas: Ninguna
Ejemplo:

La direccin de los datos es apuntado por el registro puntero Z


(16 bits). Se limita el acceso de memoria al segmento de datos de
64K bytes. Para acceder a otro segmento de datos en dispositivos
con ms de 64K bytes de datos de espacio, el registro I/O
RAMPZ tiene que ser correctamente configurado.

CLR r31
LDI r30, $60
ST Z+, r0
ST Z, r1
LDI r30, $63
ST Z, r2
ST Z, r3

El registro puntero Z puede permanecer sin cambios por la


operacin, puede post-incrementarse o pre-decrementarse. Estas
caractersticas son apropiadas para acceder a matrices, tablas y
uso del puntero de pila; Sin embargo, debido a que este puntero
puede usarse para las llamadas indirectas a subrutinas y los saltos
indirectos, es mejor usar a los punteros X o Y para direccionar al
puntero de pila.

STD Z+2, r4

34

; Borra el byte alto de Z


; Pone el byte bajo de Z a $60
; Almacena r0 en la localidad $60
; (Z post-incrementado)
; Almacena r1 en la localidad $61
; Pone el byte bajo de Z a $63
; Almacena r0 en la localidad $63
; Almacena r0 en la localidad $62
; (Z pre-decrementado)
; Almacena r4 en la localidad $64

STS Almacena directamente en SRAM

SUB

Sintaxis: STS (k), Rr

Sintaxis: SUB Rd, Rr

Operacin: (k) Rd

Operacin: Rd Rd - Rr

Operandos: 0 r 31, 0 k 65535

Operandos: 0 d 31, 0 r 31

Descripcin: Almacena un byte de un registro de trabajo en la


memoria de datos. Para los dispositivos con SRAM, el espacio
de datos est compuesto por los registros de trabajo, memoria de
I/O y SRAM interna (y SRAM externa si es aplicable). Para los
dispositivos sin SRAM, el espacio de datos est compuesto slo
por los registros de trabajo. La EEPROM tiene un espacio de
direcciones separado. Debe proporcionarse una direccin de 16bit. Se limita el acceso de memoria al segmento de datos de 64K
bytes. Para acceder a otro segmento de datos en dispositivos con
ms de 64K bytes de datos de espacio, el registro I/O RAMPD
tiene que ser correctamente configurado.

Descripcin: Resta dos registros sin considerar la bandera C y


deja el resultado en el registro destino Rd.
Banderas afectadas:
H: Se activa si hay un acarreo negativo (Borrow) 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 valor absoluto de Rd, de lo contrario se borrar.
Ejemplo:

Banderas afectadas: Ninguna


Esta instruccin no es disponible para todos los modelos de
AVRs.

ADD r1, r2
ADD r28, r28

Ejemplo:
LDS r2, $FF00
ADD r2, r1
STS $FF00, r2

Resta de dos registros sin acarreo

; Suma r2 a r1 (r1=r1+r2)
; Suma r28 a s mismo (r28=r28+r28)

; Carga r2 con el contenido de la localidad


; $FF00 de la memoria de datos
; Sumar r1 a r2
; Escribir en SRAM el contenido de r2

SUBI Resta un dato inmediato a un registro

SWAP Intercambia los nibbles

Sintaxis: SUBI Rd,Rr

Sintaxis: SWAP Rd

Operacin: Rd Rd - K

Operacin: R(7:4) Rd(3:0), R(3:0) Rd(7:4)

Operandos: 16 d 31, 0 K 255

Operandos: 0 d 31

Descripcin: Resta un registro con una constante y deja el


resultado en el registro Rd. Esta instruccin trabaja con los
registros R16 a R31 y es ideal para utilizarla con los punteros X,
Y y Z.

Descripcin: Intercambia al nibble bajo con el nibble alto del


Rd.

Banderas afectadas:

Ejemplo:

H: Se activa si hay un acarreo negativo (Borrow) del bit 3, de lo


contrario se borrar (cero).
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 de K es mayor que el valor
absoluto de Rd, de lo contrario se borrar.

INC r1
SWAP r1
INC r1
SWAP r1

Banderas afectadas: Ninguna

Ejemplo:
SUBI r22, $11

; Resta la constante (dato inmediato) $11 al


;registro de trabajo r22

35

; Incrementar r1
; Intercambiar los nibbles alto y bajo de r1
; Incrementar r1
; Intercambiar otra vez

TST revisa si es cero o menor

WDR Reinicio del Watchdog

Sintaxis: TST Rd

Sintaxis: WDR

Operacin: Rd Rd (AND) Rd

Operacin: Reinicio del temporizador Watchdog

Operandos: 0 d 31

Operandos: Ninguno

Descripcin: Prueba si el registro es cero o negativo. Realiza un


AND lgico entre el registro y l mismo. El registro permanece
sin cambios.

Descripcin: Hace un Reinicio del Temporizador Watchdog. La


instruccin debe ejecutarse en un tiempo limitado por el
prescaler del Watchdog. Consulta las especificaciones del
Watchdog en el manual del dispositivo.

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

; Reinicializa el temporizador del Watchdog

Vous aimerez peut-être aussi