Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Departamento de Electrónica
1
Introducción
Primer ARM desarrollado por Acorn RISC Machine entre 1983-85
Creado a partir de un desarrollo de unos estudiantes de Berkeley (Berkeley RISC I)
Microprocesador RISC
6 o 7 modos de operación
Estructura simple
Alta velocidad
Bajo consumo de potencia
Arquitectura RISC
Alimentación: 3.3 V y 5 V
Tecnología CMOS
D: Debug-interface
3-stage pipeline
Efficient footprint
Thumb extension
Lower power
Buffer de escritura
Register bank
address register
instruction
Pipeline de 3 etapas
Fetch: Se obtiene la instrucción de memoria y se almacena en el
pipeline de instrucciones
Decode: Se decodifica la instrucción y se activan las señales de
habilitación del “Datapath”
Execute: Operaciones y transferencias de datos ocupando el
“Datapath” 1 fetch decode execute
1 ciclo 1 instrucción
3 fetch decode execute
instruction
time
Introducción a los Sistemas Electrónicos Digitales 25
Departamento de Electrónica
ARM7: Pipeline
Solución:
Arquitecturas Harvard
Pipeline de 5 etapas
Fetch, Decode, Execute, Buffer/Data, Write-back
r0
usable in user mode
r1
r2
r3 REST system modes only
r4
r5
r6
r7
r8_fiq
r8
r9 r9_fiq
r10_fiq
r10
r11 r11_fiq
r12_fiq r13_irq r13_und
r12 r13_abt
r13_fiq r13_svc r14_irq r14_und
r13 r14_svc r14_abt
r14 r14_fiq
r15 (PC)
r0
r1
r2
r3
r4
r5
r6 Registros de propósito general
r7
r8
r9
r10
r11
r12
r13 Puntero de pila (SP, Stack Pointer)
r14 Registro de enlace (LR, Link Register)
r15 (PC) Contador de programa (PC, Program Counter)
CPSR
Registros de estado (SR, Status Register)
SPSR
General-purpose Registers
Unbanked Registers R0-R7
Son comunes a todos los modos de funcionamiento
Banked Registers R8-R14
Se accede a distintos registros dependiendo del modo en que se encuentre
R8-R12, two banked physical registers
R13-R14, six banked physical registers
Flags de condiciones
N: Bit de signo, 0 ⇒ positivo, 1 ⇒ negativo
Z: Bit de cero,
0 ⇒ Resultado de la operación ≠ 0
1 ⇒ Resultado de la operación 0
C: Bit de acarreo
V: Bit de desbordamiento
Q: Desbordamiento/Saturación (bit 27 en versiones E)
Introducción a los Sistemas Electrónicos Digitales 38
Departamento de Electrónica
ARM7: Registros
Bits de control
31 28 27 26 8 7 6 5 4 0
NZCV Q unused IF T mode
Byte, 8 bits
Halfword, 16 bits
Word, 32 bits
Representaciones
Sin signo ⇒ 0 .. 2N-1, Con signo ⇒ C2, -2N-1 .. 2N-1-1
23 22 21 20 20 21 22 23
19 18 17 16 16 17 18 19
word16 word16
15 14 13 12 12 13 14 15
half-word14 half-word12 half-word12 half-word14
11 10 9 8 8 9 10 11
word8 word8
7 6 5 4 byte 4 5 6 7 byte
byte6 half-word4 byte5 half-word6
address address
3 2 1 0 0 1 2 3
byte3 byte2 byte1 byte0 byte0 byte1 byte2 byte3
Instrucciones Aritméticas
Suma binaria
Resta binaria
Resta binaria inversa
ADD r0, r1, r2 ; r0 = r1 + r2
ADC r0, r1, r2 ; r0 = r1 + r2 + C ⇒ Suma con acarreo
SUB r0, r1, r2 ; r0 = r1 - r2
SBC r0, r1, r2 ; r0 = r1 - r2 + C -1 ⇒ Resta con acarreo
RSB r0, r1, r2 ; r0 = r2 – r1 ⇒ Resta binaria inversa
RSC r0, r1, r2 ; r0 = r2 – r1+ C -1 ⇒ Resta binaria inversa con acarreo
Instrucciones lógicas
Producto lógico
Suma lógica
Suma exclusiva
Borrado de un bit
AND r0, r1, r2 ; r0 = r1 and r2, r0 = r1 & r2;
ORR r0, r1, r2 ; r0 = r1 or r2, r0 = r1 | r2;
EOR r0, r1, r2 ; r0 = r1 xor r2, r0 = r1 ^ r2;
BIC r0, r1, r2 ; r0 = r1 and not r2, r0 = r1 & !r2 ; // BIt Clear
Instrucciones de comparación
No generan resultado, sólo posicionan los códigos de condición (cc)
del registro de estado
CMP r1, r2 ; Posiciona los cc en función del resultado de la operación (r1 - r2)
CMN r1, r2 ; Posiciona los cc en función del resultado de la operación (r1 + r2)
TST r1, r2 ; Posiciona los cc en función del resultado de la operación (r1 & r2)
TEQ r1, r2 ; Posiciona los cc en función del resultado de la operación (r1 ^ r2)
CMP (CoMPare), CMN (CoMpare Negated), TST (TeST), TEQ (Test EQual)
Operandos inmediatos
Las instrucciones anteriores, además de con registros pueden operar
con valores inmediatos
ADD r0, r1, #5 ; r0 = r1 + 5; // El valor inmediato va precedido de #
ADD r3, r3, #1 ; r3 ++;
AND r8, r7, #&FF ; r8 = r7 & 0xFF; // Ojo en ensamblador del ARM “&”
; significa hexadecimal, equivale a “0x” en C
Los valores inmediatos se codifican en la misma instrucción, por lo que están
limitados en tamaño
Valor inmediato = (0 .. 255)· 22n , 0≤n≤12
Cubre todas las potencias de 2, pero hay valores que no se pueden codificar
00000 00000
00000 0 11111 1
31 0 31 0
C
C C
ROR #5 RRX
Introducción a los Sistemas Electrónicos Digitales 53
Departamento de Electrónica
ARM7: Instrucciones de Proceso de Datos
Códigos de condición
Las instrucciones de comparación posicionan siempre los códigos de condición
El resto de instrucciones pueden posicionarlos o no a elección del programador
Esto se consigue añadiendo el sufijo “s” al nemónico correspondiente
Instrucciones de multiplicación
No soporta como segundo operando un inmediato
El registro de resultado no puede coincidir con el primer operando
MUL r1, r2, r3 ; r1= r2 * r3
Instrucciones de transferencia
Mueven datos entre registros y memoria
Load (memoria a registro) / Store (registro a memoria)
Tipos básicos
Transferencia desde o hacia un único registro
Admite tamaños de operandos Byte (8 bits), Word (32 bits) o Halfword (16 bits)
Transferencia desde o hacia múltiples registros
Se emplean para salvar o recuperar el contenido de varios registros en memoria
Instrucciones de intercambio, SWAP
Permite el intercambio de los datos entre un registro y una posición de memoria.
Realiza una operación simultánea de load y store
Introducción a los Sistemas Electrónicos Digitales 57
Departamento de Electrónica
ARM7: Instrucciones de Transferencia
Modos de direccionamiento
Las formas de acceder a memoria son variadas, y están definidas por
los diferentes modos de direccionamiento
La transferencia de los datos de memoria implican un registro, por lo
que uno de los modos de direccionamiento empleados será directo a
registro
Los accesos a memoria están basados todos ellos en
direccionamiento indirecto por registro, en sus distintas variantes
ADR r1, Tabla1 ; Hace que r1 apunte a Tabla1. ADR se traduce por una instrucción
; de suma o resta
1000 16 1000 16
1018 16 1018 16
r9 r5 100c 16 r9 100c 16
r1 r5
r0 r1
r9’ 1000 16 r9’ r0 1000 16
STR r0, [r13, #4]! ; Almacena el contenido de r0 en la dirección r13+4 e incrementa r13
; en 4
En este ejemplo el puntero contiene la dirección del último dato escrito (full stack) y crece
hacia posiciones altas de memoria (ascending stack), se trata por tanto de una pila “full
ascending”
Combinando las instrucciones se pueden conseguir los otros tres modos posibles: “full
descending”, “empty ascending”, “empty descending”
Introducción a los Sistemas Electrónicos Digitales 66
Departamento de Electrónica
ARM7: Instrucciones de Transferencia
Ejemplo de acceso a la Pila
También se puede realizar el acceso con instrucciones de acceso múltiple
Téngase en cuenta que los modos de almacenamiento y recuperación deben ser los
duales para que la pila quede en el estado inicial después de recuperar los datos
Esta instrucción, evidentemente, no se ejecuta en un ciclo de reloj ni aun en el caso
de arquitecturas Harvard
Tipos de salto
Salto incondicional: Se realiza siempre que aparece la instrucción
Salto condicional: Se ejecuta si se cumple una condición basada en los flags del
registro de estado
BLE Less or equal Signed integer comparison gave less than or equal
Ejemplo de empleo
Ejecución de un conjunto de instrucciones varias veces, equivalente a
un bucle “for (i=0; i<10; i++) { ….}”
MOV r0, #0 ; Inicialización del contador, i=0;
Bucle …. ; { Conjunto de instrucciones
…. ; que se repiten en el bucle }
ADD r0, r0, #1 ; Incremento del contador, i++;
CMP r0, #10 ; Comparación del contador, i<10;
BNE Bucle ; Salto al principio del bucle mientras se cumpla la condición
Ejemplo de empleo
Ejecución condicional de una instrucción “if (r0==5) {r1=2*r1-r2;}”
CMP r0, #5
BNE Siguiente ; if
ADD r1, r1, r1 ; { Instrucciones que se ejecutan
SUB r1, r1, r2 ; si se cumple la condición}
Siguiente ….
Otra variante
CMP r0, #5
BNE Siguiente ; if
RSB r1, r2, r1 , LSL #1 ; { Instrucciones }
Siguiente ….
Llamadas a subrutinas
Cuando se realiza la llamada a una rutina hay que almacenar la
dirección de retorno, que coincide con la dirección de la instrucción
siguiente a la de llamada
Muchos microprocesadores almacenan la dirección de retorno en la
pila
El ARM no tiene control automático de pila, por lo que no almacenará
la instrucción de retorno en ella
La llamada a una rutina se puede realizar con la instrucción de salto B
increment increment
Rd PC Rd PC
registers registers
Rn Rm Rn
mult mult
as ins. as ins.
as instruction as instruction
[7:0]
increment increment
PC Rn PC
registers registers
Rn Rd
mult mult
lsl #0 shifter
=A / A+ B / A- B =A + B /A - B
[11:0]
(a) 1st cycle - compute address (b) 2nd cycle - store data & auto-index
increment increment
R14
registers registers
PC PC
mult mult
lsl #2 shifter
=A+ B =A
[23:0]
(a) 1st cycle - compute branch target (b) 2nd cycle - save return address
Prioridad Excepción
1 Máxima Prioridad Reset
2 Data Abort
3 FIQ
4 IRQ
5 Prefetch Abort
6 Mínima prioridad Undefined instruction
SWI
El paso a modo Thumb se realiza con una instrucción de salto BX, Branch
and eXchage
Se sale de modo Thumb ejecutando de nuevo la instrucción BX
Conclusiones
Velocidad ⇒ modo ARM, Bajo consumo, memoria de 16 bits ⇒ modo Thumb
Introducción a los Sistemas Electrónicos Digitales 93
Departamento de Electrónica
ARM7: Conjunto de Instrucciones Thumb
Para reducir el tamaño de las instrucciones
La mayoría de ellas no se pueden ejecutar condicionalmente
Se elimina uno de los operandos fuente y se sustituye por el operando destino
Conclusiones
Velocidad ⇒ modo ARM, Bajo consumo, memoria de 16 bits ⇒ modo Thumb
Introducción a los Sistemas Electrónicos Digitales 94
Departamento de Electrónica