Sie sind auf Seite 1von 40

UNIVERSIDAD TECNICA DEL NORTE

Nombre: Andrés Gómez


Facultad: FICA
Carrera: CIME

INSTRUCCIONES DEL MICROCONTROLADOR ATMEGA 164P

Instrucciones Aritméticas y Lógicas

ADD Realiza la suma de los registros Rd y Rr sin acarreo

Sintaxis: ADD Rd, Rr


Operación: Rd ← Rd + Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplo:
Antes de la instrucción: R3=20 R10=17
ADD R3, R10
Después de la instrucción: R3=37 R10=17

ADC Suma dos registros con el contenido del flag C y deja el


resultado en el registro Rd.

Sintaxis: ADC Rd, Rr


Operación: Rd ← Rd + Rr + C
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplo:
Antes de la instrucción: R15=5 R12=7 C=2
ADC R15, R12
Después de la instrucción: R15=14 R12=7 C=2

ADIW Agrega un valor K (0-63) a un par de registros y deja el


resultado en el par de registros.

Sintaxis: ADIW Rdl, K


Operación: Rdh:Rdl ← Rdh:Rdl + K
Numero de ciclos: 2
Bits de estados que se afectan: Z, C, N, V, S
Operandos: dl ∈ {24, 26, 28, 30}, 0 ≤ K ≤ 63
Ejemplo:
Antes de la instrucción: R18=3 R28=9
ADIW R18, 3
Después de la instrucción: R18=6 R28=12
SUB Resta de dos registros sin Carry

Sintaxis: ADC Rd, Rr


Operación: Rd ← Rd - Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R5=17 R7=7
SUB R5, R17
Después de la instrucción: R5=10 R7=7

SUBI Resta una constante a un registro

Sintaxis: SUBI Rd, K


Operación: Rd ← Rd - K
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplo:
Antes de la instrucción: R20=30
SUBI R20, 17
Después de la instrucción: R20=13

SBC Resta de dos registros con Carry

Sintaxis: SBC Rd, Rr


Operación: Rd ← Rd - Rr - C
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R18=18 R8=9 C=0
ADC R18, R8
Después de la instrucción: R18=9 R8=9 C=0

SBCI Resta con Carry de una constante a un registro

Sintaxis: SBCI Rd, K


Operación: Rd ← Rd - K - C
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplo:
Antes de la instrucción: R10=14 C=0
ADC R10, 9
Después de la instrucción: R10=5 C=0
SBIW Resta un valor K (0-63) a un par de registros y deja el resultado
en el par de registros.

Sintaxis: SBIW Rdl, K


Operación: Rdh:Rdl ← Rdh:Rdl - K
Numero de ciclos: 2
Bits de estados que se afectan: Z, C, N, V, S
Operandos: dl ∈ {24, 26, 28, 30}, 0 ≤ K ≤ 63
Ejemplo:
Antes de la instrucción: R24=10 R25=5
SBIW R24, 1
Después de la instrucción: R24=9 R25=4

AND AND lógico entre registros

Sintaxis: AND Rd, Rr


Operación: Rd ← Rd ● Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R5=1 R7=1
AND R5, R7
Después de la instrucción: R5=1 R7=1

ANDI AND lógico entre un registro y una constante

Sintaxis: ANDI Rd, K


Operación: Rd ← Rd ● K
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R10=0
ANDI R10, 1
Después de la instrucción: R10=0

OR OR lógico entre registros

Sintaxis: OR Rd, Rr
Operación: Rd ← Rd v Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R10=1 R11=0
OR R11, R10
Después de la instrucción: R10=1 R11=1
ORI OR lógico entre un registro y una constante

Sintaxis: ORI Rd, K


Operación: Rd ← Rd v K
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R10=0
ORI R10, 0
Después de la instrucción: R10=0

EOR OR Exclusivo lógico entre registros

Sintaxis: EOR Rd, Rr


Operación: Rd ← Rd Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R10=1 R20=0
EOR R10, R20
Después de la instrucción: R10=1 R20=1

COM Realiza el complemento a uno de un registro

Sintaxis: COM Rd
Operación: Rd ← 0xFF - Rd
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R5=11100101
COM R5
Después de la instrucción: R5=00011010

NEG Realiza el complemento a dos de un registro

Sintaxis: NEG Rd
Operación: Rd ← 0x00 - Rd
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V, H
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R12=100101011
NEG R12
Después de la instrucción: R1=011010101
SBR Pone a set bit(s) del registro. SBR pone a set los bits del registro
Rd indicados. Realiza la ORI lógica entre el contenido del registro
Rd y una constante K, y deja el resultado en el registro destino
Rd.

Sintaxis: SBR Rd, K


Operación: Rd ← Rd v K
Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N,
Operandos: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplo:
Antes de la instrucción: R1=101100
SBR R1, 1
Después de la instrucción: R1=111111

CBR Borrar bit(s) del registro. CBR borra los bits indicados del
registro Rd. Realiza el AND lógico entre el contenido del registro
Rd y el complemento de la constante K. El resultado se deja en el
registro destino Rd.

Sintaxis: SBR Rd, K


Operación: Rd ← Rd ●(0x00 – K)
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplo:
Antes de la instrucción: R9=101100
SBR R9, 101101
Complemento de K: 011010
Después de la instrucción: R1=001000

INC Incrementar

Sintaxis: INC Rd
Operación: Rd ← Rd + 1
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R8=2
INC R8
Después de la instrucción: R8=2
DEC Decrementar

Sintaxis: DE Rd
Operación: Rd ← Rd - 1
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R5=10
DEC R5
Después de la instrucción: R1=9

TST Test para cero o negativo

Sintaxis: TST Rd
Operación: Rd ← Rd ● Rd
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R11=10011
TST R11
Después de la instrucción: R11=10011

CLR Borra un registro

Sintaxis: CLR Rd
Operación: Rd ← Rd Rd
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R16=11111
CLR R6
Después de la instrucción: R16=00000

SER Pone a set un registro

Sintaxis: SER Rd
Operación: Rd ← 0xFF
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
Antes de la instrucción: R12=00000000
SER R12
Después de la instrucción: R12=11111111
MUL Multiplicación sin signo

Sintaxis: MUL Rd, Rr


Operación: R1:R0 ← Rd x Rr

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R8=10000100 R9=11001101
MUL R8, R9
Después de la instrucción: R1=00110100 R0=10110100

MULS Multiplicación con signo

Sintaxis: MULS Rd, Rr


Operación: R1:R0 ← Rd x Rr

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 16 ≤ d ≤ 31, 16 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R2=11001100 R7=10101001
MULS R2, R7
Después de la instrucción: R1= 10000110 R0=10101100

MULSU Multiplicación con signo por sin signo

Sintaxis: MULS Rd, Rr


Operación: R1:R0 ← Rd x Rr

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 16 ≤ d ≤ 31, 16 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R2=11001100 R7=10101001
MULS R14, R15
Después de la instrucción: R1= 10000110 R0=10101100
FMUL Multiplicación fraccional sin signo

Sintaxis: FMUL Rd, Rr


Operación: R1:R0 ← (Rd x Rr) << 1

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 16 ≤ d ≤ 31, 16 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R2=1001.1110 R7=1101.1001
FMUL R2, R7
Después de la instrucción: R1=10000101 R0=11101110

FMUL S Multiplicación fraccional con signo

Sintaxis: FMULS Rd, Rr


Operación: R1:R0 ← (Rd x Rr) << 1

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 16 ≤ d ≤ 31,16 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R2=1001.1110 (+) R7=1101.1001 (-1)
FMULS R2, R7
Después de la instrucción: R1=10000101 R0=11101110) (-1)

FMUL SU Multiplicación fraccional con signo por sin signo

Sintaxis: FMULSU Rd, Rr


Operación: R1:R0 ← (Rd x Rr) << 1

Numero de ciclos: 2
Bits de estados que se afectan: Z, C
Operandos: 16 ≤ d ≤ 31,16 ≤ R ≤ 31
Ejemplo:
Antes de la instrucción: R2=1001.1110 R7=1101.1001 (-1)
FMULSU R2, R7
Después de la instrucción: R1=10000101 R0=11101110) (-1)
INSTRUCCIONES DE SALTO

RJMP Salto relativo

Sintaxis: RJMP k
Operación: Pc ← Pc + k + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: -2K < k < 2K
Ejemplo:
CPI r16,$42 ; Compara r16 con $42
BRNE error ; Desvío si r16 < > $42
RJMP ok ; Desvío incondicional
error: ADD r16,r17 ; Suma r17 a r16
INC r16 ; Incrementa r16
ok: NOP ; Destino de rjmp (no hacer nada)

IJMP Salto indirecto a Z

Sintaxis: IJMP
Operación: Pc ← Z
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

MOV r30, r0 ; Poner offset a la tabla de salto


IJMP ; Saltar a la rutina apuntada por r31:r30

JMP Salto directo

Sintaxis: JMP k
Operación: Pc ← k
Numero de ciclos: 3
Bits de estados que se afectan: Ninguno
Operandos: 0 < k < 4M
Ejemplo:

ADD R12, R15


JMP etiq1 ; salto incondicional a etiq1
SUB R12, R15
etiq1: ADD R12, R15
RCALL Llamada relativa a subrutina

Sintaxis: RCALL k
Operación: Pc ← Pc + k + 1
Numero de ciclos: 4
Bits de estados que se afectan: Ninguno
Operandos: -2K < k < 2K
Ejemplo:
RCALL routine ; Llamada a subrutina
...
routine: PUSH r14 ; Guardar r14 en la pila
...
POP r14 ; Restaurar r14
RET ; Retorno de subrutina

ICALL Llamada indirecta a Z

Sintaxis: ICALL
Operación: Pc ← Z
Numero de ciclos: 4
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

MOV r30,r0 ; Poner offset a la tabla de llamada


ICALL ; Rutina de llamada que apunta a r31:r30

CALL Llamada directa

Sintaxis: CALL k
Operación: Pc ← k
Numero de ciclos: 5
Bits de estados que se afectan: Ninguno
Operandos: 0 < k < 4M
Ejemplo:

MOV r16,r0 ; Copiar r0 to r16


CALL check ; Llamar a la subrutina
NOP ; Continuar (no hacer nada)
...
check: CPI r16,$42 ; Verificar si r16 tiene un valor especial
BREQ error ; Saltar si es igual
RET ; Regresar a la subrutina
...
error: RJMP error ; Ciclo infinito
RET Retorno de subrutina

Sintaxis: RET
Operación: Pc ← Stack
Numero de ciclos: 5
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

CALL routine ; Llamada a subrutina


...
routine: PUSH r14 ; Guardar r14 en la pila
...
POP r14 ; Restaurar r14
RET ; Retorno de subrutina

RETI Retorno de interrupción

Sintaxis: RETI
Operación: Pc ← Stack
Numero de ciclos: 5
Bits de estados que se afectan: I
Operandos: Ninguno
Ejemplo:

...
extint: PUSH r0 ; Guardar r0 en la pila
...
POP r0 ; Restaurar r0
RETI ; Retorno y habilitación de interrupciones

CPSE Comparar, saltar si es igual

Sintaxis: CPSE Rd, Rr


Operación: Si Rd = Rr entonces PC ← PC + 2(o 3) sino
PC ← PC + 1
Numero de ciclos: 1/2/3
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:

INC r2 ; Incrementar r2
CPSE r2,r0 ; Comparar r2 con r0
NEG r2 ; Sólo ejecutar si r2 < > r0
NOP ; Continuar (No hacer nada)
CP Comparar

Sintaxis: CP Rd, Rr
Operación: Rd - Rr
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V, C, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:

CP r4,r19 ; Comparar r4 con r19


BRNE noteq ; Desvío si r4 < > r19
...
noteq: NOP ; Destino de desvío (No hacer nada)

CPC Comparar con acarreo

Sintaxis: CPC Rd, Rr


Operación: Rd - Rr - C
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V, C, H
Operandos: 0 ≤ d ≤ 31, 0 ≤ R ≤ 31
Ejemplo:

Comparar r5:r6 con r1:r0


CP r5,r0 ; Compara el byte bajo
CPC r6,r1 ; Compara el byte alto
BRNE noteq ; Desvío si no son iguales
...
noteq: NOP ; Destino de desvío (No hacer nada)

CPI Comparación entre registro y constante

Sintaxis: CPI Rd, k


Operación: Rd - k
Numero de ciclos: 1
Bits de estados que se afectan: Z, N, V, C, H
Operandos: 0 ≤ k ≤ 255
Ejemplo:

CPI r19,3 ; Comparar r19 con 3


BRNE error ; Desvío si r19 < > 3
...
error: NOP ; Destino de desvío (No hacer nada)
SBRC Salto si el bit del registro esta borrado

Sintaxis: SBRC Rd, b


Operación: Si Rd (b) = 0 entonces PC ← PC + 2(o 3) sino
PC ← PC + 1
Numero de ciclos: 1/2/3
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ r ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

SUB r0,r1 ; Restar r1 de r0


SBRC r0,7 ; Saltar si el bit 7 en r0 está borrado
SUB r0,r1 ; Sólo ejecutar si el bit 7 en r0 no está borrado
NOP ; Continuar (No hacer nada)

SBRS Salto si el bit del registro está a set

Sintaxis: SBRS Rd, b


Operación: Si Rd (b) = 1 entonces PC ← PC + 2(o 3) sino
PC ← PC + 1
Numero de ciclos: 1/2/3
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ r ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

SUB r0,r1 ; Restar r1 de r0


SBRS r0,7 ; Saltar si el bit 7 en r0 está a set
NEG r0 ; Sólo ejecutar si el bit 7 en r0 no está a set
NOP ; Continuar (No hacer nada)

SBIC Salto si el bit del registro de I/O está borrado

Sintaxis: SBIC A, b
Operación: Si I/O(A,b) = 0 entonces PC ← PC + 2 (o 3) sino
PC ← PC + 1
Numero de ciclos: 1/2/3
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ A ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

e2wait: SBIC $1C,1 ; Saltar próxima instrucción si EEWE está borrado


RJMP e2wait ; Escritura de EEPROM no terminada
NOP ; Continuar (No hacer nada)
SBIS Salto si el bit del registro de I/O está a set

Sintaxis: SBIS A, b
Operación: Si I/O(A,b) = 1 entonces PC ← PC + 2 (o 3) sino
PC ← PC + 1
Numero de ciclos: 1/2/3
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ A ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

waitset: SBIS $10,0 ; Saltar la siguiente instrucción si el bit 0 en el


; Puerto D está a set
RJMP waitset ; Bit no set
NOP ; Continuar (No hacer nada)

BRBS Desvío si el flag de estado está a set

Sintaxis: BRBS s, k
Operación: Si SREG(s) = 1 entonces PC ← PC + k + 1, sino
PC ← PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ s ≤ 7, -64 ≤ k ≤ +63
Ejemplo:

BST r0,3 ; Carga el bit T con el bit 3 de r0


BRBS 6,bitset ; Desvío si el bit T estaba a set
...
bitset: NOP ; Destino de desvío (No hacer nada)

BRBC Desvío si el flag de estado está borrado

Sintaxis: BRBC s, k
Operación: Si SREG(s) = 0 entonces PC ← PC + k + 1, sino
PC ← PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ s ≤ 7, -64 ≤ k ≤ +63
Ejemplo:

CPI r20,5 ; Comparar r20 con el valor 5


BRBC 1,noteq ; Desvío si el flag zero está borrado
...
noteq: NOP ; Destino de desvío (No hacer nada)
BREQ Desvío si son iguales

Sintaxis: BREQ k
Operación: Si Z = 1 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

CP r1,r0 ; Comparar registros r1 y r0


BREQ equal ; Desvío si los registros son iguales
...
equal: NOP ; Destino de desvío (No hacer nada)

BRNE Desvío si son diferentes

Sintaxis: BRNE k
Operación: Si Z = 0 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

EOR r27,r27 ; Borrar r27


loop: INC r27 ; Incrementar r27
...
CPI r27,5 ; Comparar r27 con 5
BRNE loop ; Desvío si r27 < > 5
NOP ; Salida de Loop (No hacer nada)

BRCS Desvío si carry está a set

Sintaxis: BRCS k
Operación: Si C = 1 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

CPI r26,$56 ; Comparar r26 con $56


BRCS carry ; Desvio si carry está a set
...
carry: NOP ; Destino de desvío (No hacer nada)
BRCC Desvío si carry está borrado

Sintaxis: BRCC k
Operación: Si C = 0 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

ADD r22,r23 ; Suma r23 a r22


BRCC nocarry ; Desvío si carry borrado
...
nocarry: NOP ; Destino de desvío (No hacer nada)

BRSH Desvío si es igual o mayor

Sintaxis: BRSH k
Operación: Si C = 0 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

SUBI r19,4 ; Restar 4 de r19


BRSH highsm ; Desvío si r19 >= 4 (sin signo)
...
highsm: NOP ; Destino de desvío (No hacer nada)

BRLO Desvío si es menor

Sintaxis: BRLO k
Operación: Si C = 1 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

EOR r19,r19 ; Borrar r19


loop: INC r19 ; Incrementar r19
...
CPI r19,$10 ; Comparar r19 con $10
BRLO loop ; Desvío si r19 < $10 (Sin signo)
NOP ; Salida de loop (No hacer nada)
BRMI Desvío si es negativo

Sintaxis: BRMI k
Operación: Si N = 1 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

SUBI r18,4 ; Restar 4 de r18


BRMI negative ; Desvío si el resultado es negativo
...
negative: NOP ; Destino de desvío (No hacer nada)

BRPL Desvío si es positivo

Sintaxis: BRPL k
Operación: Si N = 0 entonces PC ← PC + k + 1, sino PC ←
PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

SUBI r26,$50 ; Restar $50 de r26


BRPL positive ; Desvío si r26 es positivo
...
positive: NOP ; Destino de desvío (No hacer nada)

BRGE Desvío si es mayor o igual (con signo)

Sintaxis: BRGE k
Operación:
← PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

CP r11,r12 ; Comparar los registros r11 y r12


BRGE greateq ; Desvío si r11 = r12 (con signo)
...
greateq: NOP ; Destino de desvío (No hacer nada)
BRLT Desvío si es menor (con signo)

Sintaxis: BRLT k
Operación: Si
← PC + 1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

CP r16,r1 ; Comparar r16 con r1


BRLT less ; Desvío si r16 < r1 (con signo)
...
less: NOP ; Destino de desvío (No hacer nada)

BRHS Desvío si el flag Half-carry está a set

Sintaxis: BRHS k
Operación: Si H= 1 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:
; Desvío si el flag Half-carry está a set
BRHS hset
...
hset: NOP ; Destino de desvío (No hacer nada)

BRHC Desvío si el flag Half-carry está borrado

Sintaxis: BRHC k
Operación: Si H= 0 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

BRHC hclear ; Desvío si el flag Half-carry está borrado


...
hclear: NOP ; Destino de desvío (no haver nada)
BRTS Desvío si el flag T está a set

Sintaxis: BRTS k
Operación: Si T = 1 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

BST r3,5 ; Almacenar el bit 5 de r3 en el flag T


BRTS tset ; Desvío si este bit estaba a set
...
tset: NOP ; Destino de desvío (No hacer nada)

BRTC Desvío si el flag T está borrado

Sintaxis: BRTC k
Operación: Si T = 0 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

BST r3,5 ; Almacenar el bit 5 de r3 en el flag T


BRTS tset ; Desvío si este bit estaba a set
...
tset: NOP ; Destino de desvío (No hacer nada)

BRVS Desvío si el flag de desbordamiento está a set

Sintaxis: BRVS k
Operación: Si V = 1 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

ADD r3,r4 ; Suma r4 a r3


BRVS overfl ; Desvío si hay desbordamiento
...
overfl: NOP ; Destino de desvío (No hacer nada)
BRVC Desvío si el flag de desbordamiento está borrado

Sintaxis: BRVC k
Operación: Si V = 0 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

ADD r3,r4 ; Suma r4 a r3


BRVC noover ; Desvío si no hay desbordamiento
...
noover: NOP ; Destino de desvío (No hacer nada)

BRIE Desvío si la interrupción está habilitada

Sintaxis: BRIE k
Operación: Si I = 1 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

BRIE inten ; Desvío si la interrupción está habilitada


...
inten: NOP ; Destino de desvío (No hacer nada)

BRID Desvío si la interrupción está deshabilitada

Sintaxis: BRID k
Operación: Si I = 0 entonces PC ←PC + k + 1 sino PC ← PC
+1
Numero de ciclos: 1/2
Bits de estados que se afectan: Ninguno
Operandos: -64 ≤ k ≤ +63
Ejemplo:

BRID intdis ; Desvío si la interrupción está deshabilitada


...
intdis: NOP ; Destino de desvío (No hacer nada)
INSTRUCCIONES ORIENTADAS A BITS

SBI Poner a set un bit del registro de I/O

Sintaxis: SBI A,b


Operación: I/O(A,b) ← 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ A ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

OUT 0x1E,r0 ; Escribir la dirección de EEPROM


SBI 0x1C,0 ; Poner a set el bit leído en EECR
IN r1,0x1D ; Leer datos de EEPROM

CBI Borrar un bit del registro de I/O

Sintaxis: CBI A,b


Operación: I/O(A,b) ← 0
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ A ≤ 31, 0 ≤ b ≤ 7
Ejemplo:

CBI 0x12,7 ; Borrar el bit 7 del Puerto D

LSL Desplazamiento lógico hacia la izquierda

Sintaxis: LSL Rd

Operación: C b7-------------------b0 0

Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:

ADD r0,r4 ; Sumar r4 a r0


LSL r0 ; Multiplicar r0 por 2
LSR Desplazamiento lógico hacia la izquierda

Sintaxis: LSR Rd

Operación: b7-------------------
0 C
b0
Numero de ciclos:
1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:

ADD r0,r4 ; Sumar r4 a r0


LSR r0 ; Dividir r0 por 2

ROL Rotar hacia la izquierda a través del carry

Sintaxis: ROL Rd

Operación: b7------------------
C C
-b0
Numero de ciclos:
1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:

LSL r18 ; Multiplicar r19:r18 por dos


ROL r19 ; r19:r18 es un entero de dos byte con o sin signo
BRCS oneenc ; Desvío si el carry está a set
...
oneenc: NOP ; Destino de desvío (No hacer nada)

ROR Rotar hacia la derecha a través del carry

Sintaxis: ROR Rd

Operación:
b7-------------------
C C
b0
Numero de ciclos:
1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:
LSR r19 ; Dividir r19:r18 por dos
ROR r18 ; r19:r18 es un entero sin signo de dos-byte
BRCC zeroenc1 ; Desvío si carry está borrado
asr r17 ; Dividir r17:r16 por dos
ror r16 ; r17:r16 es un entero con signo de dos-byte
brcc zeroenc2 ; Desvío si carry está borrado
...
zeroenc1: NOP ; Destino de desvío (No hacer nada)
...
zeroenc2: NOP ; Destino de desvío (No hacer nada)

ASR Desplazamiento aritmético hacia la derecha

Sintaxis: ROR Rd

Operación:

Numero de ciclos: 1
Bits de estados que se afectan: Z, C, N, V
Operandos: 0 ≤ d ≤ 31
Ejemplo:

LDI r12,0x10 ; Cargar 16 decimal en r16


ASR r12 ; r16 = r16 / 2

SWAP Cambia los nibbles (mitad de un byte)

Sintaxis: SWAP Rd
Operación: R(7:4) ← Rd(3:0), R(3:0) ← Rd(7:4)
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

INC r1 ; Incrementar r1
SWAP r1 ; Cambiar los nibbles alto y bajo de r1

BSET Pone a set un flag

Sintaxis: BSET s
Operación: SREG(s) ←1
Numero de ciclos: 1
Bits de estados que se afectan: SREG(s)
Operandos: 0≤s≤7
Ejemplo:

BSET 6 ; Poner a set el flag T


BSET 7 ; Interrupción habilitada
BCLR Borrar un flag

Sintaxis: BCLR s
Operación: SREG(s) ←0
Numero de ciclos: 1
Bits de estados que se afectan: SREG(s)
Operandos: 0≤s≤7
Ejemplo:

BCLR 0 ; Borrar el flag de carry


BCLR 7 ; Deshabilitar interrupciones

BST Guarda en T un bit de un registro

Sintaxis: BST Rd, b


Operación: T ←Rd(b)
Numero de ciclos: 1
Bits de estados que se afectan: T
Operandos: 0< d < 31, 0 ≤ b ≤ 7
Ejemplo:

bst r1,2 ; Guardar el bit 2 de r1 en el flag T


bld r0,4 ; Cargar T en el bit 4 de r0

BLD Carga un bit de T a un registro

Sintaxis: BLD Rd, b


Operación: Rd(b) ←T
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0< d < 31, 0 ≤ b ≤ 7
Ejemplo:

BST r1,2 ; Guardar el bit 2 de r1 en el flag T


BLD r0,4 ; Carga el flag T en el bit 4 de r0

SEC Pone a set el carry

Sintaxis: SEC
Operación: C ←1
Numero de ciclos: 1
Bits de estados que se afectan: C
Operandos: Ninguno
Ejemplo:

SEC ; Poner a set el flag de carry


ADC r0,r1 ; r0 = r0 + r1 + 1
CLC Borra el carry

Sintaxis: CLC
Operación: C ←0
Numero de ciclos: 1
Bits de estados que se afectan: C
Operandos: Ninguno
Ejemplo:

ADD r0,r0 ; Sumar r0 a sí mismo


CLC ; Borrar el flag de carry

SEN Pone a set el flag negativo (N)

Sintaxis: SEN
Operación: N ←1
Numero de ciclos: 1
Bits de estados que se afectan: N
Operandos: Ninguno
Ejemplo:

ADD r2,r19 ; Sumar r19 a r2


SEN ; Poner a set el flag negativo

CLN Borra el flag negativo (N)

Sintaxis: CLN
Operación: N ←0
Numero de ciclos: 1
Bits de estados que se afectan: N
Operandos: Ninguno
Ejemplo:

ADD r2,r3 ; Sumar r3 a r2


CLN ; Borrar el flag negativo

SEZ Pone a set el flag cero (Z)

Sintaxis: SEZ
Operación: Z ←1
Numero de ciclos: 1
Bits de estados que se afectan: Z
Operandos: Ninguno
Ejemplo:
ADD r2,r19 ; Sumar r19 a r2
SEZ ; Poner a set el flag cero

CLZ Borra el flag cero (Z)

Sintaxis: CLZ
Operación: Z ←0
Numero de ciclos: 1
Bits de estados que se afectan: Z
Operandos: Ninguno
Ejemplo:

ADD r2,r3 ; Suma r3 a r2


CLZ ; Borra el flag cero

SEI Interrupción global habilitada

Sintaxis: SEI
Operación: I ←1
Numero de ciclos: 1
Bits de estados que se afectan: I
Operandos: Ninguno
Ejemplo:

CLI ; Interrupciones deshabilitadas


IN r13,$16 ; Leer el Puerto B
SEI ; Interrupciones habilitadas

CLI Interrupción global deshabilitada

Sintaxis: CLI
Operación: I ←0
Numero de ciclos: 1
Bits de estados que se afectan: I
Operandos: Ninguno
Ejemplo:

CLI ; Interrupciones deshabilitadas


IN r11,$16 ; Leer el Puerto B
SEI ; Interrupciones habilitadas
SES Pone a set el flag de test de signo (S)

Sintaxis: SES
Operación: S ←1
Numero de ciclos: 1
Bits de estados que se afectan: S
Operandos: Ninguno
Ejemplo:

ADD r2,r19 ; Sumar r19 a r2


SES ; Poner a set el flag S

CLS Borra el flag de test de signo (S)

Sintaxis: CLS
Operación: S ←0
Numero de ciclos: 1
Bits de estados que se afectan: S
Operandos: Ninguno
Ejemplo:

ADD r2,r3 ; Sumar r3 a r2


CLS ; Borrar el flag de signo

SEV Pone a set el flag de desbordamiento de complemento a dos

Sintaxis: SEV
Operación: V ←1
Numero de ciclos: 1
Bits de estados que se afectan: V
Operandos: Ninguno
Ejemplo:

ADD r2,r19 ; Sumar r19 a r2


SEV ; Flag de desbordamiento a set

CLV Borra el flag de desbordamiento de complemento a dos

Sintaxis: CLV
Operación: V ←0
Numero de ciclos: 1
Bits de estados que se afectan: V
Operandos: Ninguno
Ejemplo:

ADD r2,r3 ; Sumar r3 a r2


CLV ; Borrar el flag de desbordamiento
SET Pone a set el flag T

Sintaxis: SET
Operación: T ←1
Numero de ciclos: 1
Bits de estados que se afectan: T
Operandos: Ninguno
Ejemplo:

SET ; Poner a set el flag T

CLT Pone a set el flag T

Sintaxis: CLT
Operación: T ←0
Numero de ciclos: 1
Bits de estados que se afectan: T
Operandos: Ninguno
Ejemplo:

CLT ; Borrar el flag T

SEH Pone a set el flag half-carry (H)

Sintaxis: SEH
Operación: H ←1
Numero de ciclos: 1
Bits de estados que se afectan: H
Operandos: Ninguno
Ejemplo:

SEH ; Poner a set el flag Half-Carry

CLH Borra set el flag half-carry (H)

Sintaxis: CLH
Operación: H ←0
Numero de ciclos: 1
Bits de estados que se afectan: H
Operandos: Ninguno
Ejemplo:

CLH ; Borrar el flag Half-Carry


INSTRUCCIONES DE TRANSFERENCIA DE DATOS

MOV Movimiento entre registros

Sintaxis: MOV Rd, Rr


Operación: Rd ←Rr
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ r ≤ 31
Ejemplo:

MOV r16,r0 ; Copiar r0 en r16

MOVW Hace una copia de un par de registros en otro par de registros

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


Operación: Rd+1:Rd ← Rr+1:Rr
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: d ∈ {0,2,...,30}, r ∈ {0,2,...,30}
Ejemplo:

MOVW r17:16,r1:r0 ; Copiar1:r0 a r17:r16

LDI Carga directa de una constante

Sintaxis: LDI Rd, k


Operación: Rd ← k
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 16 ≤ d ≤ 31, 0 ≤ K ≤ 255
Ejemplo:

CLR r31 ; Borra el byte alto de Z


LDI r30,0xF0 ; Pone el byte bajo de Z a 0xF0
LPM ; Carga una constante del programa
; de memoria apuntada por Z

LD Carga indirecta

Sintaxis: LD Rd, X
Operación: Rd ←(X)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r27 ; Borrar el byte alto de X
LDI r26,$60 ; Poner el byte bajo de X a $60
LD r0,X+ ; Cargar r0 con la posición del espacio de datos $60
; (X post-incrementado)
LD r1,X ; Cargar r1 con la posición del espacio de datos $61

LD Carga indirecta y post-incremento

Sintaxis: LD Rd, X+
Operación: Rd ←(X), X← X+1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r27 ; Borrar el byte alto de X
LDI r26,$60 ; Poner el byte bajo de X a $60
LD r0,X+ ; Cargar r0 con la posición del espacio de datos $60
; (X post-incrementado)
LD r1,X ; Cargar r1 con la posición del espacio de datos $61

LD Carga indirecta y pre-decremento

Sintaxis: LD Rd, - X
Operación: X← X – 1, Rd ←(X),
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r27 ; Borrar el byte alto de X
LDI r26,$60 ; Poner el byte bajo de X a $60
LD r0,X+ ; Cargar r0 con la posición del espacio de datos $60
; (X post-incrementado)
LD r1,X ; Cargar r1 con la posición del espacio de datos $61
LDI r26,$63 ; Poner el byte bajo de X a $63
LD r2,X ; Cargar r2 con la posición del espacio de datos $63
LD r3,-X ; Cargar r3 con la posición del espacio de datos $62
; (X pre-decremento)

LD Carga indirecta

Sintaxis: LD Rd, Y
Operación: Rd ←(Y)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r29 ; Borrar el byte alto de Y
LDI r28,$60 ; Poner el byte bajo de Y a $60
LD r0,Y+ ; Cargar r0 con la posición del espacio de datos $60
; (Y post-incrementado)
LD r1,Y ; Cargar r1 con la posición del espacio de datos $61

LD Carga indirecta y post-incremento

Sintaxis: LD Rd, Y+
Operación: Rd ←(Y), Y← Y + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r29 ; Borrar el byte alto de Y
LDI r28,$60 ; Poner el byte bajo de Y a $60
LD r0,Y+ ; Cargar r0 con la posición del espacio de datos $60
; (Y post-incrementado)
LD r1,Y ; Cargar r1 con la posición del espacio de datos $61

LD Carga indirecta y pre-decremento

Sintaxis: LD Rd, -Y
Operación: Y← Y – 1, Rd ←(Y)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r29 ; Borrar el byte alto de Y


LDI r28,$60 ; Poner el byte bajo de Y a $60
LD r0,Y+ ; Cargar r0 con la posición del espacio de datos $60
; (Y post-incrementado)
LD r1,Y ; Cargar r1 con la posición del espacio de datos $61
LDI r28,$63 ; Poner el byte bajo de Y a $63
LD r2,Y ; Cargar r2 con la posición del espacio de datos $63
LD r3,-Y ; Cargar r3 con la posición del espacio de datos $62
; (Y pre-decrementado)
LDD Carga indirecta con desplazamiento

Sintaxis: LDD Rd, Y + q


Operación: Rd ← (Y + q)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ q ≤ 63
Ejemplo:

CLR r29 ; Borrar el byte alto de Y


LDI r28,$60 ; Poner el byte bajo de Y a $60
LD r0,Y+ ; Cargar r0 con la posición del espacio de datos $60
; (Y post-incrementado)
LD r1,Y ; Cargar r1 con la posición del espacio de datos $61
LDI r28,$63 ; Poner el byte bajo de Y a $63
LD r2,Y ; Cargar r2 con la posición del espacio de datos $63
LD r3,-Y ; Cargar r3 con la posición del espacio de datos $62
; (Y pre-decrementado)
LDD r4,Y+2 ; Cargar r4 con la posición del espacio de datos $64

LD Carga indirecta

Sintaxis: LD Rd, Z
Operación: Rd ← (Z)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r31 ; Borrar el byte alto de Z


LDI r30,$60 ; Poner el byte bajo de Z a $60
LD r0,Z+ ; Cargar r0 con la posición del espacio de datos $60
; (Z post-incrementado)
LD r1,Z ; Cargar r1 con la posición del espacio de datos $61

LD Carga indirecta y post-incremento

Sintaxis: LD Rd, Z+
Operación: Rd ← (Z), Z ← Z + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r31 ; Borrar el byte alto de Z
LDI r30,$60 ; Poner el byte bajo de Z a $60
LD r0,Z+ ; Cargar r0 con la posición del espacio de datos $60
; (Z post-incrementado)
LD r1,Z ; Cargar r1 con la posición del espacio de datos $61
LD Carga indirecta y pre-decremento

Sintaxis: LD Rd, -Z
Operación: Z ← Z - 1, Rd ← (Z)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r31 ; Borrar el byte alto de Z
LDI r30,$60 ; Poner el byte bajo de Z a $60
LD r0,Z+ ; Cargar r0 con la posición del espacio de datos $60
; (Z post-incrementado)
LD r1,Z ; Cargar r1 con la posición del espacio de datos $61
LDI r30,$63 ; Poner el byte bajo de Z a $63
LD r2,Z ; Cargar r2 con la posición del espacio de datos $63
LD r3,-Z ; Cargar r3 con la posición del espacio de datos $62
; (Z pre-decremento)

LDD Carga indirecta con desplazamiento

Sintaxis: LDD Rd, Z + q


Operación: Rd ← (Z + q)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ q ≤ 63
Ejemplo:
CLR r31 ; Borrar el byte alto de Z
LDI r30,$60 ; Poner el byte bajo de Z a $60
LD r0,Z+ ; Cargar r0 con la posición del espacio de datos $60
; (Z post-incrementado)
LD r1,Z ; Cargar r1 con la posición del espacio de datos $61
LDI r30,$63 ; Poner el byte bajo de Z a $63
LD r2,Z ; Cargar r2 con la posición del espacio de datos $63
LD r3,-Z ; Cargar r3 con la posición del espacio de datos $62
; (Z pre-decremento)
LDD r4,Z+2 ; Cargar r4 con la posición del espacio de datos $64

LDS Carga directa desde SRAM

Sintaxis: LDS Rd, k


Operación: Rd ← (k)
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ k ≤ 65535
Ejemplo:
LDS r2,$FF00 ; Carga r2 con el contenido de la posición $FF00 del
; espacio de datos
ADD r2,r1 ; Sumar r1 a r2
STS $FF00,r2 ; Escribir en SRAM
ST Guardar directamente

Sintaxis: ST X, Rd
Operación: (X) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r27 ; Borra el byte alto de X


LDI r26,$60 ; Poner el byte bajo de X a $60
ST X+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (X post-incrementado)
ST X,r1 ; Guardar r1 en la posición del espacio de datos $61

ST Guardar directamente y post-incrementar

Sintaxis: ST X+, Rd
Operación: (X) ← Rd, X ← X + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r27 ; Borra el byte alto de X


LDI r26,$60 ; Poner el byte bajo de X a $60
ST X+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (X post-incrementado)

ST Guardar directamente y pre-decrementar

Sintaxis: ST X-, Rd
Operación: X ← X - 1, (X) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r27 ; Borra el byte alto de X


LDI r26,$60 ; Poner el byte bajo de X a $60
ST X+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (X post-incrementado)
ST X,r1 ; Guardar r1 en la posición del espacio de datos $61
LDI r26,$63 ; Poner el byte bajo de X a $63
ST X,r2 ; Guardar r2 en la posición del espacio de datos $63
ST -X,r3 ; Guardar r3 en la posición del espacio de datos $62
; (X pre-decrementado)
ST Guardar indirectamente

Sintaxis: ST Y, Rd
Operación: (Y) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r29 ; Borrar el byte alto de Y
LDI r28,$60 ; Poner el byte bajo de Y a $60
ST Y+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Y post-increentado)
ST Y,r1 ; Guardar r1 en la posición del espacio de datos $61

ST Guardar indirectamente y post-incrementar

Sintaxis: ST Y+, Rd
Operación: (Y) ← Rd, Y ← Y + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r29 ; Borrar el byte alto de Y
LDI r28,$60 ; Poner el byte bajo de Y a $60
ST Y+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Y post-increentado)
ST Y,r1 ; Guardar r1 en la posición del espacio de datos $61

ST Guardar indirectamente y pre-decrementar

Sintaxis: ST -Y, Rd
Operación: Y ← Y - 1 , (Y) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r29 ; Borrar el byte alto de Y


LDI r28,$60 ; Poner el byte bajo de Y a $60
ST Y+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Y post-increentado)
ST Y,r1 ; Guardar r1 en la posición del espacio de datos $61
LDI r28,$63 ; Poner el byte bajo de Y a $63
ST Y,r2 ; Guardar r2 en la posición del espacio de datos $63
ST -Y,r3 ; Guardar r3 en la posición del espacio de datos $62
; (Y pre-decrementado)
STD Guardar indirectamente con desplazamiento

Sintaxis: ST Y + q, Rd
Operación: (Y + q) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ q ≤ 63
Ejemplo:
CLR r29 ; Borrar el byte alto de Y
LDI r28,$60 ; Poner el byte bajo de Y a $60
ST Y+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Y post-increentado)
ST Y,r1 ; Guardar r1 en la posición del espacio de datos $61
LDI r28,$63 ; Poner el byte bajo de Y a $63
ST Y,r2 ; Guardar r2 en la posición del espacio de datos $63
ST -Y,r3 ; Guardar r3 en la posición del espacio de datos $62
; (Y pre-decrementado)
STD Y+2,r4 ; Guardar r4 en la posición del espacio de datos $64

ST Guardar indirectamente

Sintaxis: ST Z, Rd
Operación: (Z) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r31 ; Borrar el byte alto de Z


LDI r30,$60 ; Poner el byte bajo de Z a $60
ST Z+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Z post-increentado)
ST Z,r1 ; Guardar r1 en la posición del espacio de datos $61

ST Guardar indirectamente y post-incremento

Sintaxis: ST Z+, Rd
Operación: (Z) ← Rd, Z ← Z + 1
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:
CLR r31 ; Borrar el byte alto de Z
LDI r30,$60 ; Poner el byte bajo de Z a $60
ST Z+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Z post-increentado)
ST Z,r1 ; Guardar r1 en la posición del espacio de datos $61
ST Guardar indirectamente y pre-decremento

Sintaxis: ST -Z, Rd
Operación: Z ← Z - 1, (Z) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CLR r31 ; Borrar el byte alto de Z


LDI r30,$60 ; Poner el byte bajo de Z a $60
ST Z+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Z post-increentado)
ST Z,r1 ; Guardar r1 en la posición del espacio de datos $61
LDI r30,$63 ; Poner el byte bajo de Z a $63
ST Z,r2 ; Guardar r2 en la posición del espacio de datos $63
ST -Z,r3 ; Guardar r3 en la posición del espacio de datos $62
; (Z pre-decrementado)

STD Guardar indirectamente con desplazamiento

Sintaxis: ST Z + q, Rd
Operación: (Z + q) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ q ≤ 63
Ejemplo:

CLR r31 ; Borrar el byte alto de Z


LDI r30,$60 ; Poner el byte bajo de Z a $60
ST Z+,r0 ; Guardar r0 en la posición del espacio de datos $60
; (Z post-increentado)
ST Z,r1 ; Guardar r1 en la posición del espacio de datos $61
LDI r30,$63 ; Poner el byte bajo de Z a $63
ST Z,r2 ; Guardar r2 en la posición del espacio de datos $63
ST -Z,r3 ; Guardar r3 en la posición del espacio de datos $62
; (Z pre-decrementado)
STD Z+2,r4 ; Guardar r4 en la posición del espacio de datos $64

STS Guardar directamente a SRAM

Sintaxis: ST k, Rd
Operación: (k) ← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, 0 ≤ k ≤ 65535
Ejemplo:
LDS r2,$FF00 ; Cargar r2 con el contenido de la posición $FF00
; del espacio de datos
ADD r2,r1 ; Sumar r1 a r2
STS $FF00,r2 ; Escribir en SRAM

LPM Carga la memoria de programa

Sintaxis: LPM
Operación: R0← Z
Numero de ciclos: 3
Bits de estados que se afectan: Ninguno
Operandos: Ninguno, R0 implícito
Ejemplo:

CLR r31 ; Borrar el byte alto de Z


LDI r30,$F0 ; Poner a set el byte bajo de Z
LPM ; Cargar constante de la memoria
; de programa apuntada por Z (r31:r30)

IN Leer puerto

Sintaxis: IN Rd, P
Operación: R0← Z
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, P es la dirección de un puerto
Ejemplo:

IN r25,$16 ; Leer Puerto B


CPI r25,4 ; Comparar el valor leido con una constante
BREQ exit ; Desvío si r25 = 4
...
exit: NOP ; Destino de desvío (No hacer nada)

OUT Escribir Puerto

Sintaxis: OUT Rd, P


Operación: P← Rd
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31, P es la dirección de un puerto
Ejemplo:

CLR r16 ; Borrar r16


SER r17 ; Poner a set r17
OUT $18,r16 ; Escribir ceros en el Puerto B
NOP ; Esperar (No hacer nada)
OUT $18,r17 ; Escribir unos en el Puerto B
PUSH Guardar registro en la pila

Sintaxis: PUSH Rd
Operación: P← Rd
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CALL routine ; Llamar a subrutina


...
routine: PUSH r14 ; Guardar r14 en la pila
PUSH r13 ; Guardar r13 en la pila
...
POP r13 ; Restaurar r13
POP r14 ; Restaurar r14
RET ; Retorno de subrutina

POP Restaurar registro de la pila

Sintaxis: POP Rd
Operación: Rd← Stack
Numero de ciclos: 2
Bits de estados que se afectan: Ninguno
Operandos: 0 ≤ d ≤ 31
Ejemplo:

CALL routine ; Llamar a subrutina


...
routine: PUSH r14 ; Guardar r14 en la pila
PUSH r13 ; Guardar r13 en la pila
...
POP r13 ; Restaurar r13
POP r14 ; Restaurar r14
RET ; Retornar de la subrutina

INSTRUCCIONES DE CONTROL MCU

NOP No operar

Sintaxis: NOP
Operación: No opera
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

CLR r16 ; Borrar r16


SER r17 ; Pone a set r17
out $18,r16 ; Escribir ceros en el Puerto B
NOP ; Esperar (No hacer nada)
OUT $18,r17 ; Escribir unos en el Puerto B

SLEEPModo descanso (Sleep)

Sintaxis: SLEEP
Operación: Vea la documentación del dispositivo para obtener
una
Descripción detallada del uso de SLEEP.
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

MOV r0,r11 ; Copiar r11 en r0


LDI r16,(1<<SE) ; Modo descanso habilitado
OUT MCUCR, r16
SLEEP ; Poner el MCU en modo descanso

WDR Reset del Watchdog

Sintaxis: WDR
Operación: Resetea el Timer Watchdog
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

WDR ; Reset de Timer Watchdog

BREAK Lleva al CPU AVR a modo parado

Sintaxis: BREAK
Operación: Para al CPU
Numero de ciclos: 1
Bits de estados que se afectan: Ninguno
Operandos: Ninguno
Ejemplo:

BREAK ; Para la ejecución de las instrucciones

Das könnte Ihnen auch gefallen