Conjunto de instrucciones de Atmel AVR

Ir a: navegación, búsqueda de
Artículo principal: Atmel AVR

El Conjunto de instrucciones de Atmel AVR es el lenguaje máquina para el Atmel AVR, un Arquitectura Harvard modificada 8-bit RISC solo chip microcontrolador que fue desarrollado por Atmel en 1996. El AVR fue una de las primeras familias de microcontroladores para usar la en-viruta memoria Flash para el almacenaje de programa.

Contenido

  • 1 Registros de procesador
  • 2 Direccionamiento
  • 3 Tiempo de instrucción
  • 4 Lista de instrucciones
  • 5 Conjunto de instrucciones herencia
  • 6 Instrucciones de codificación
  • 7 Enlaces externos

Registros de procesador

Hay 32 registros de 8 bits para fines generales, R0 – R31. Todas las operaciones de aritmética y lógica operan en esos registros; Sólo cargar y almacenar acceso instrucciones RAM.

Un número limitado de instrucciones operar con registro de 16 bits pares. El número menor registro de las Bodegas par los bits menos significativos y debe ser impares. Los tres registro pares se utilizan como puntero de registros para el direccionamiento de memoria. Son conocidos como X (R27:R26), (R29:R28), Y y Z (R31:R30). Coma y predecrement modos de direccionamiento son compatibles con los tres. Y y Z también admiten un desplazamiento positivo de seis bits.

Las instrucciones que permiten un valor inmediato se limitan a registros R16 – R31 (8-bit operaciones) o registrar los pares R25:R24 – R31:R30 (16-bit operaciones ADIW y SBIW). Algunas variantes de la operación de MUL se limitan a ocho registros, R16 a través R23.

Además de estos 32 registros de propósito generales, la CPU tiene unos registros especiales:

  • PC: contador de programa 16 o 22 bits
  • SP: puntero de pila 8 o 16 bits
  • SREG: registro del estado de 8 bits
  • RAMPX, RAMPY, RAMPZ, RAMPD y EIND: registros de segmento de 8 bits que se antepone a direcciones de 16 bits en orden de direcciones de 24 bits de forma; Sólo disponible en partes con espacios de direcciones grandes.

Los bits de registro de estado son:

  1. C Llevar bandera. Esta es una bandera pida prestado por resta.
  2. Z Señal de cero. Ajuste a 1 cuando un resultado aritmético es cero.
  3. N Bandera negativo. Establezca una copia del bit más significativo de un resultado aritmético.
  4. V Bandera de desbordamiento. Ajuste en caso de desbordamiento de complemento de dos.
  5. Bandera de signo S. Único en AVR, esto siempre es N⊕V y muestra el verdadero signo de una comparación.
  6. Llevan H media. Este es un transporte interno de adiciones y se utiliza para apoyar BCD aritmética.
  7. Copia T Bit. Carga poco especial y poco tienda instrucciones utilizan este bit.
  8. I Bandera de interrupción. Conjunto cuando se activan las interrupciones.

Direccionamiento

Los espacios de direcciones siguientes están disponibles:

  • los registros de propósito general son tratados por sus números (0-31), aunque el número total de 5 bits no se almacena en las instrucciones que sólo pueden operar en un subconjunto de los registros
  • I/O registros tienen un espacio dedicado de 6 bits de dirección, la mitad inferior de las cuales es poco-direccionable; algunas partes tienen I/O registros fuera de este espacio de direcciones, que se denomina "extended I/O" y sólo son accesibles como I/O asignados a la memoria en el espacio de direcciones de datos
  • el espacio de direcciones de datos mapas los 32 registros de propósito generales, todos los registros de I/O (incluidos los también accesible a través del espacio de direcciones de I/O) y la memoria RAM; se pueda abordarla directamente o indirectamente a través de los registros de puntero X, Y y Z, antepone si es necesario por RAMPY, RAMPX y RAMPZ respectivamente
  • (memoria de programaFlash) dispone de un espacio de Dirección separada, dirigido como palabras de 16 bits con el fin de obtener instrucciones
  • con el fin de obtener datos constantes, memoria de programa se dirige bytewise a través del registro de puntero Z, antepone si es necesario por RAMPZ
  • el EEPROM es asignado a la memoria en algunos dispositivos; en otros, no es directamente direccionable y en su lugar se accede a través de la dirección, datos y registros de control de I/O
  • el propósito general registros, el registro del estado y algunos registros de I/O son poco direccionables, con poco 0 siendo el menos significativo y poco 7 los más significativos.

Los primeros 64 registros I/O son accesibles a través de la entrada-salida y el espacio de direcciones de datos. Por lo tanto tienen dos direcciones diferentes. Estos generalmente se escriben como "0 x 00 (0 x 20)" a través "0x3F (0x5F)", donde el primer elemento es la dirección de E/S y el segundo, entre paréntesis, la dirección de datos.

Los registros de CPU especial, con la excepción de PC, pueden tener acceso como I/O registra. Por ejemplo: SREG (0x3F (0x5F)), SP (0x3E:0x3D (0x5E:0x5D)), EIND (0x3C (0x5C)) o RAMPZ (0x3B (0x5B)).

Puede verse un mapa de memoria del ATmega típico como:

Dirección de datos Dirección de la entrada-salida contenido
0 x 0000 – 0x001f registra R0 – R31
0x0020 – 0x003f 0 x 00-0x1f Registros de I/O (bit-direccionable)
0x0040 – 0x005f 0 x 20 – 0x3f Registros de I/O (no poco-direccionable)
0x0060 – 0x00ff I/O extendida registra (entrada-salida asignados a la memoria solamente)
0100 – RAMEND SRAM interno

donde RAMEND es la última dirección de RAM. En las partes carecen de I/O extendida el RAM comenzaría en 0x0060.

Tiempo de instrucción

Operaciones aritméticas trabajan en registros R0-R31 pero no directamente en RAM y tomar un ciclo de reloj, con excepción de multiplicación y adición de nivel mundial (ADIW y SBIW) que tienen dos ciclos.

Espacio de memoria RAM y de la entrada-salida puede accederse sólo copiando o de registros. Acceso indirecto (incluyendo desplazamiento constante, predecrement o postincrement opcional) es posible a través de registros de X, Y y Z. Todos los accesos a la RAM lleva dos ciclos de reloj. Moviéndose entre los registros y de la entrada-salida es un ciclo. Mover ocho o 16 bit de datos entre registros o constante para registrar también es un ciclo. Lectura de memoria de programa (LPM) lleva tres ciclos.

Lista de instrucciones

Las instrucciones son una palabra de 16 bits larga, excepto para aquellos incluyendo una dirección de 16 bits o 22 bits, que tienen dos palabras.

Existen dos tipos de ramas condicionales: Salta a la dirección y salta. Ramas condicionales (BRxx) pueden probar una bandera ALU y saltar a la dirección especificada. Salta (SBxx) prueba un poco arbitrario en un registro o I/O y omitir la instrucción siguiente si la prueba era cierto.

En el siguiente:

  • es un número de bits en el registro del estado (0 = C, 1 = Z, etc., ver la lista de arriba)
  • b es un número de bits en un propósito general o I/O registro (0 = menos significativo, 7 = más importante)
  • K6 es un inmediato 6-bit unsigned constante (rango: 0 – 63)
  • K8 es una constante inmediata de 8 bits; puesto que se utiliza sólo en las operaciones de 8 bits, su signo es irrelevante
  • IO5 es una dirección de la entrada-salida 5 bits cubriendo la parte poco direccionable del espacio de direcciones I/O, es decir, la mitad inferior (rango: 0 – 31)
  • IO6 es una dirección de la entrada-salida de 6 bits cubriendo el espacio de direcciones completo de I/O (rango: 0 – 63)
  • D16 es una dirección de 16 bits de datos abarca 64Hola!; en lugares con espacio de datos de más de 64 KiB, se antepone el contenido del registro de segmento RAMPD
  • P22 es una dirección de programa de 22 bits cubriendo 222 palabras de 16 bits (es decir, 8MiB)
  • ΔD6 es un 6-bit unsigned desplazamiento con respecto a la dirección de datos almacenada en el puntero Y o Z
  • ΔP7 y δP12 son 7 bits (Resp. 12-bit) firmado desplazamientos en relación con la dirección de programa almacenado en el contador del programa
Conjunto de instrucciones AVR
Aritmética Bit & otros Transferencia Salto Rama Llamada
ADD Rd, Rr

ADC Rd, Rr
ADIW Rd + 1:Rd, K6

SUB Rd, Rr
SUBI Rd, K8
SBC Rd, Rr
SBCI Rd, K8
SBIW Rd + 1:Rd, K6

INC Rd
DEC Rd

Y Rd, Rr
ANDI Rd, K8
O Rd, Rr
ORI Rd, K8
EOR Rd, Rr

COM Rd
NEG Rd
CP Rd, Rr
CPC Rd, Rr
CPI Rd, K8
INTERCAMBIO Rd

LSR Rd
ROR Rd
ASR Rd

MUL Rd, Rr
MUL Rd, Rr
MULSU Rd, Rr
FMUL Rd, Rr
FMULS Rd, Rr
FMULSU Rd, Rr

BSET s

BCLR s
OSE IO5, b
CBI IO5, b
BST Rd, b
BLD Rd, b

NOP
DESCANSO
DORMIR
WDR

MOV Rd, Rr

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

EN Rd, IO6
CABO IO6, Rr

EMPUJE Rr
POP Rr

LDI Rd, K8
LDS Rd, D16

LD Rd, X
LD Rd, -X
LD Rd, X +

LDD Rd, Y + δD6
LD Rd, -Y
LD Rd, Y +

LDD Rd, Z + δD6
LD Rd, -Z
LD Rd, Z +

STS D16, Rr

X ST, Rr
ST - X, Rr
ST X +, Rr

STD Y + δD6, Rr
ST -Y, Rr
ST Y +, Rr

STD Z + δD6, Rr
ST - Z, Rr
ST Z +, Rr

LPM
LPM Rd, Z
LPM Rd, Z +
ELPM
ELPM Rd, Z
ELPM Rd, Z +

SPM

RJMP ΔP12

IJMP
EIJMP
JMP P22

CPSE Rd, Rr


SBRC Rr, b
SBR Rr, b

SBIC IO5, b
SBIS IO5, b

BRBC s, δP7
BRBS s, δP7

RCALL ΔP12

ICALL
EICALL
LLAMADA P22

RET
RETI

Conjunto de instrucciones herencia

No todas las instrucciones se implementan en todo Atmel AVR Controladores. Éste es el caso de las instrucciones de realizar multiplicaciones, cargas/salta/llamadas extendidas, saltos largo y control de la alimentación.

Familia Miembros Aritmética Sucursales Transferencias Bit-Wise
Base mínima AT90S1200
ATtiny11
ATtiny12
ATtiny15
ATtiny28
AÑADIR
ADC
SUB
SUBI
SBC
SBCI
Y
ANDI
O
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
RJMP
RCALL
RET
RETI
CPSE
CP
CPC
IPC
SBRC
SBR
SBIC
SBIS
BRBS
BRBC
BREQ
BRNE
BRCS
BRCC
BRSH
BRLO
BRMI
BRPL
BRGE
BRLT
BRHS
BRHC
BRT
BRTC
BRVS
BRVC
BRIE
BRID
LD
ST
MOV
LDI
EN
HACIA FUERA
LPM (no en AT90S1200)
OSE
CBI
LSL
LSR
ROL
ROR
ASR
SWAP
BSET
BCLR
BST
BLD
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLS
SEV
CLV
CONJUNTO
CLT
SEH
CLH
NOP
DORMIR
WDR
Núcleo clásico hasta 8 K programa espacial AT90S2313
AT90S2323
ATtiny22
AT90S2333
AT90S2343
AT90S4414
AT90S4433
AT90S4434
AT90S8515
AT90C8534
AT90S8535
ATtiny26
nuevas instrucciones:
ADIW
SBIW
nuevas instrucciones:
IJMP
ICALL
nuevas instrucciones:
LD (ahora 9 modos)
LDD
LDS
ST (9 modos)
STD
STS
EMPUJE
POP
(nada nuevo)
Base clásica con hasta 128K ATmega103
ATmega603
AT43USB320
AT76C711
(nada nuevo) nuevas instrucciones:
JMP
LLAMADA
nuevas instrucciones:
ELPM
(nada nuevo)
Base mejorada con hasta 8K ATmega8
ATmega83
ATmega85
ATmega8515
nuevas instrucciones:
MUL
MUL
MULSU
FMUL
FMULS
FMULSU
(nada nuevo) nuevas instrucciones:
MOVW
LPM (3 modos)
SPM
(nada nuevo)
Base mejorada con hasta 128K ATmega16
ATmega161
ATmega163
ATmega32
ATmega323
ATmega64
ATmega128
AT43USB355
AT94 (FPSLIC)
Serie AT90CAN
Serie AT90PWM
ATmega48
ATmega88
ATmega168
ATmega162
ATtiny13
ATtiny25
ATtiny45
ATtiny85
ATtiny2313
ATmega164
ATmega324
ATmega328
ATmega644
ATmega165
ATmega169
ATmega325
ATmega3250
ATmega645
ATmega6450
ATmega406
(nada nuevo) (nada nuevo) (nada nuevo) nuevas instrucciones:
DESCANSO
Base mejorada con hasta 4M ATmega640
ATmega1280
ATmega1281
ATmega2560
ATmega2561
(nada nuevo) nuevas instrucciones:
EIJMP
EICALL
(nada nuevo) (nada nuevo)
Núcleo XMEGA Serie ATxmega nuevas instrucciones:
DES
(nada nuevo) nuevas instrucciones:
(del segundo silicio revisión - AU, B, C piezas)
XCH
LAS
LAC
LAT
(nada nuevo)
Núcleo reducido ATtiny10
ATtiny9
ATtiny5
ATtiny4
(Idéntico al núcleo mínimo, excepto CPU registro conjunto reducido) (Idéntico al clásico núcleo con hasta 8K, excepto CPU registro conjunto reducido) Idéntico al clásico núcleo con hasta 8K, con las excepciones siguientes:
LPM (eliminado)
LDD (eliminado)
STD (eliminado)
LD (también memoria de programa de accesos)
LDS (patrón de bits diferentes)
STS (patrón de bits diferentes)
Conjunto de registro de CPU reducido
(Idéntico al núcleo mejorado con hasta 128K, excepto CPU registro conjunto reducido)

Instrucciones de codificación

Asignaciones de bit:

  • Rrrrr = registro fuente
  • Rrrr = par de registro fuente
  • ddddd = registro de destino
  • dddd = par de registro destino
  • HHHH = alto registro, R16 – R31
  • PP = registro par, W, X, Y o Z
  • y = par de registro Y/Z poco (0 = Z, 1 = Y)
  • s = tienda/carga un poco (0 = load, 1 = tienda)
  • c = llamada/salto (0 = saltar, 1 = llamada)
  • AAAAAA = dirección de espacio de la entrada-salida
  • aaaaa = dirección de espacio la entrada-salida (primera 32 solamente)
  • BBB = número de bits
  • B = valor
  • kkkkkk = 6 bits sin signo constante
  • KKKKKKKK = constante de 8 bits

El Atmel AVR utiliza muchos campos de split, donde los bits no son contiguos en la palabra de instrucción. La carga/tienda con instrucciones de desplazamiento son el ejemplo más extremo donde un desplazamiento de 6 bits se divide en tres partes.

Conjunto de instrucciones de Atmel AVR Resumen
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Instrucción
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 NOP
0 0 0 0 0 0 0 1 d d d r r r r MOVW mover registro par
0 0 0 0 0 0 1 d d r r r Firmado y fraccionarios se multiplican (R16 – R23)
0 0 0 0 0 1 r d d d d r r r r 2-operando instrucciones
CPC, SBC, ADD, CPSE, CP,
SUB. ADC Y, EOR O MOV
0 0 0 0 1
0 0 0 1
0 0 1 0
0 0 1 1 K K K K h h h h K K K K Instrucciones de registro inmediato
IPC SBCI, SUBI, ORI, ANDI
0 1
1 0 k 0 k k s d d d d y k k k LDD/STD a Z o Y + k, k
1 0 0 1 0 0 s d d d d LD/ST otro
1 0 0 1 0 1 0 d d d d 0 1-operando instrucciones (COM, NEG, SWAP, etc.).
1 0 0 1 0 1 0 0 b b b 1 0 0 0 Registro del sexo/CLx estado poco claro/set
1 0 0 1 0 1 0 1 1 0 0 0 Misc instrucciones (RET, RETI, sueño, etc.).
1 0 0 1 0 1 0 c 0 0 0 1 0 0 1 Salto indirecto/llamada a Z o EIND:Z
1 0 0 1 0 1 0 d d d d 1 0 1 0 DEC Rd
1 0 0 1 0 1 0 0 k k k k 1 0 1 1 DES redondo k
1 0 0 1 0 1 0 k k k k k 1 1 c k JMP/CALL abs22
1 0 0 1 0 1 1 k k p p k k k k ADIW/SBIW Rp, uimm6
1 0 0 1 1 0 B un un un un un b b b Operaciones de E/S espacio poco
1 0 0 1 1 1 r d d d d r r r r MUL, sin firmar: R1:R0 = Rr × Rd
1 0 k 0 k k s d d d d y k k k Ver 10k 0 por encima de
1 0 1 1 s un un d d d d un un un un OUT/en el espacio a I/O
1 1 0 c desplazamiento firmado 12 bit Salto/llamada relativa a PC ± 2 × simm12
1 1 1 0 K K K K h h h h K K K K LDI Rh, K
1 1 1 1 0 7-bit firmado offset b b b Rama condicional en bits de registro de estado
1 1 1 1 1 0 s d d d d 0 b b b BLD/BST registro poco al estado.T
1 1 1 1 1 1 B d d d d 0 b b b Skip SBRC/SBR si registro un poco es igual a B

Enlaces externos

  • Entorno de desarrollo de GNU
    • Programando el microcontrolador AVR con GCC por Guido Socher
    • Un entorno de desarrollo de GNU para el microcontrolador AVR por Rich Neswold
    • Opciones de AVR AVR-GCC
  • Conjunto de instrucciones de Atmel AVR PDF(149 pages)

Otras Páginas

Obtenido de"https://en.copro.org/w/index.php?title=Atmel_AVR_instruction_set&oldid=622310624"