Documentos de Académico
Documentos de Profesional
Documentos de Cultura
426
1
fi
fi
5
Universidad de Concepción, Departamento de Ingeniería Eléctrica 2 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2018
fi
fi
e
Universidad de Concepción, Departamento de Ingeniería Eléctrica 3 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
fi
?
Arquitectura ARM
❖ Desarrollada inicialmente en los años 80 por Acorn Computer Group,
que creó Advanced RISC Machines, ahora llamada AR
❖ Empresa no fabrica ni vende procesadore
❖ Licencia la arquitectura para que otros fabricantes realicen sus
propias implementaciones (Qualcomm, Apple, Samsung, etc.
❖ También licencia diseños digitales que implementan la arquitectura
(Cortex-M para microcontroladores, Cortex-A para sistemas de
mayor desempeño
❖ En este curso utilizaremos la arquitectura ARMv4 de 32 bit
❖ ARMv8 la extiende a 64 bits
Universidad de Concepción, Departamento de Ingeniería Eléctrica 4 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 5 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
o
Universidad de Concepción, Departamento de Ingeniería Eléctrica 6 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
Assembly: Operaciones más complejas
❖ Para mantener el principio de simplicidad, operaciones más
complejas se realizan combinando múltiples operaciones de
dos operandos origen y un operando destino
El símbolo “;” denota un comentario en assembly: Todo el texto desde el “;” hasta el
nal de la línea es ignorado por el ensamblador
Ensamblador: Programa que convierte programa en assembly (texto) a un programa
en lenguaje de máquina (unos y ceros
Caso común rápido: ARM posee pocas instrucciones que ejecutan en forma directa las
operaciones más comunes en un programa. Las operaciones más complejas se
implementan combinando instrucciones.
Universidad de Concepción, Departamento de Ingeniería Eléctrica 7 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
)
Assembly: Operandos
Universidad de Concepción, Departamento de Ingeniería Eléctrica 8 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
Registros
❖ Arquitectura de ne un pequeño número de registros que pueden
almacenar valore
❖ Banco de registros es una pequeña memoria RAM con múltiples
puertas de lectura y escritur
❖ En arquitectura de 32 bits, registros almacenan valores de 32 bit
❖ Pequeño es rápid
❖ De nir un número pequeño de registros permite que el banco de
registros resida en el mismo chip del procesador y pueda leerse/
escribirse en 1 ciclo de reloj
Universidad de Concepción, Departamento de Ingeniería Eléctrica 9 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
fi
s
Registros en ARM
Universidad de Concepción, Departamento de Ingeniería Eléctrica 11 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
fi
Inicialización de variables
❖ Otro uso de constantes es para inicializar el valor de una variable del
program
❖ Instrucción MOV copia el valor de una constante al contenido de un registro
❖ MOV usa un operando destino (un registro) y un operando fuente (en este caso,
una constante
❖ MOV también puede usar dos operandos registros, en cuyo caso copia el
contenido de un registro a otr
❖ Ej. MOV R1, R
❖ Caso especial: Instrucción NOP no hace nada, se codi ca como MOV R0, R0
Universidad de Concepción, Departamento de Ingeniería Eléctrica 13 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
fi
Operaciones lógicas
❖ A diferencia de suma y resta, las operaciones lógicas tratan el
contenido del registro como un vector de bit
❖ No como un númer
❖ Útil para representar condiciones como el estado abierto/
cerrado de una ventana, encendido/apagado de un LED, etc
❖ Operaciones lógicas típica
❖ AND, OR, XO
❖ Rotaciones y desplazamientos
Universidad de Concepción, Departamento de Ingeniería Eléctrica 14 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
R
Operaciones lógicas
❖ Operando destino y al menos un operando origen son siempre registro
❖ Segundo operando origen puede ser una constant
❖ Ejemplos: AND, ORR, EOR, BIC (bit clear), MVN (move with not
❖ BIC R6, R1, R2: R6 <— R1 & (~R2), sirve para forzar algunos bits de R1 a cer
❖ MVN R7, R2: R7 <— ~R2
Universidad de Concepción, Departamento de Ingeniería Eléctrica 15 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
e
Ejemplo
❖ Suponer que los 8 LSB del registro R1 almacenan el estado abierto/cerrado de 8
ventanas (numeradas 0 a 7), donde un 1 representa estado abierto, 0 cerrad
❖ Suponga (por simplicidad) que escribir en los bits correspondientes del registro R0 abre
o cierra las ventana
❖ Escriba un segmento de código assembly qu
❖ Abra las ventanas 0 y 6, y cierre el resto de las ventana
❖ Cierre las ventanas 0 a 3, deje igual el rest
❖ Invierta el estado de todas las ventana
❖ Si los bits menos signi cativos del registro R2 almacena el estado de 8 interruptores,
donde el estado 1 signi ca encendido y 0 apagado, abra las ventanas donde el
interruptor está encendido y cierre donde está apagad
❖ Haga lo mismo que el punto anterior, pero solamente afecte las ventanas 0, 2, 4 y 6
Universidad de Concepción, Departamento de Ingeniería Eléctrica 16 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
fi
fi
s
Desplazamientos y rotaciones
❖ Instrucciones de desplazamiento desplazan contenido de un
registro hacia la izquierda o derecha (similar a operadores “<<“ y
“>>” de
❖ Desplazamiento lógico a la derecha (LSR)/izquierda (LSL):
Ingresa 0s por la izquierda/derech
❖ Desplazamiento aritmético a la derecha (ASR): ingresa copias
del MSB por la izquierd
❖ Instrucciones de rotación (ROL y ROR) actúan en forma similar al
desplazamiento, pero los bits que salen por un extremo del
registro ingresan por el otro extremo
Universidad de Concepción, Departamento de Ingeniería Eléctrica 17 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
C
Desplazamientos y rotaciones
❖ Número de bits a
desplazar o rotar
puede estar
especi cado en una
constante o un
registr
❖ A qué operaciones
aritméticas equivalen
los desplazamientos
aritméticos y lógicos?
Universidad de Concepción, Departamento de Ingeniería Eléctrica 18 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
o
Ejemplo
Universidad de Concepción, Departamento de Ingeniería Eléctrica 19 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Multiplicación
❖ Multiplicación de dos números de 32 bits produce un resultado de 64
bit
❖ Qué pasa en C cuando se ejecuta “a = b * c;” y las variables son
enteros de 32 bits
❖ Instrucciones de multiplicación (operandos son sólo registros
❖ MUL, MLA: multiplicación y multiplicación/suma de 32 bit
❖ MUL R1, R2, R3 ; R1 <— (R2 * R3
❖ MLA R1, R2, R3, R4 ; R1 <— (R2 * R3) + R
❖ También hay instrucciones que generan un producto de 64 bit
❖ Qué pasa con el signo en ese caso?
Universidad de Concepción, Departamento de Ingeniería Eléctrica 20 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
Ejemplo
❖ Generar código assembly para la siguiente expresión en C.
Asuma que todas las variables son de tipo “unsigned int”. Las
variables a, b y c están asignadas a los registros R0, R1 y R2
a = (a + 4) * (b + 3) - (c - 8)/64
b = b + (a + b)(a*c);
Universidad de Concepción, Departamento de Ingeniería Eléctrica 21 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
;
Universidad de Concepción, Departamento de Ingeniería Eléctrica 22 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
s
Visión de la memoria
❖ Programa en lenguaje de máquina ve la memoria como un
arreglo de bytes
❖ En una arquitectura de 32 bits, la cantidad total de memoria que
puede accesar teóricamente un programa es de 232 byte
❖ Normalmente llamado el “espacio de memoria virtual” del
program
❖ Por el momento, asumiremos por simplicidad que la memoria
virtual y la memoria física (RAM instalada) son lo mism
❖ Direcciones de memoria son, entonces, números de 32 bits
Universidad de Concepción, Departamento de Ingeniería Eléctrica 23 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
Universidad de Concepción, Departamento de Ingeniería Eléctrica 24 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
Instrucción LDR
❖ Lee 32 bits (4 bytes) de memoria y los almacena en un registr
❖ Dirección de memoria se puede especi car de varias formas, comenzaremos con la más
simple: Registro base más desplazamient
❖ Ej. LDR R1, [R2, #4] ; R1 <— Mem[R2 + 4
❖ Cuando la constante es cero, se puede omitir, ej, LDR R1, [R2
❖ Leer el elemento 2 de un vector de enteros que comienza en la dirección cero de memori
❖ Enteros son números de 32 bits, cada entero ocupa 4 bytes en memoria
Universidad de Concepción, Departamento de Ingeniería Eléctrica 25 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
o
Instrucción STR
❖ Escribe en memoria la palabra de 32 bits (4 bytes) contenida en un registr
❖ Dirección de memoria también se puede especi car de varias formas,
comenzaremos con registro base + desplazamient
❖ Ej. STR R1, [R2, #4] ; Mem[R2 + 4] <— R
❖ Cuando la constante es cero también se puede omitir, ej. STR R1, [R2
❖ Escribir el número 42 en la posición 5 del vector de enteros anterior
Universidad de Concepción, Departamento de Ingeniería Eléctrica 26 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
1
fi
o
Ejemplo
❖ Escribir código assembly ARM para el código C
int a, b, acum
acum = acum + a * b;
Universidad de Concepción, Departamento de Ingeniería Eléctrica 27 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
…
Ejemplo
❖ Escribir código assembly para el código C
typedef struct
int r
int g
int b
} color
color c1
int pack
pack = (c1.r << 8) | (c1.g << 4) | c1.b
Universidad de Concepción, Departamento de Ingeniería Eléctrica 28 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
;
Ejemplo
❖ El siguiente código en C calcula el producto punto entre los
elementos de dos vectores, y los almacena en la variable acum.
Escriba código assembly que implementa el CUERPO del lazo
y la inicialización de los registros que requiera. Asuma que la
variable “i” se almacena en el registro R0, que la dirección base
de los vectores está almacenada en los registros R1 y R2, y que
la dirección de la variable acum está en el registro R3
acum = 0
for (int i = 0; i < N; ++i
acum = acum + vecA[i] * vecB[i];
Universidad de Concepción, Departamento de Ingeniería Eléctrica 29 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
;
fi
)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 31 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
Ejemplo
❖ Un lazo iterativo recorre un
string en memoria que utiliza
solamente caracteres en
minúscula, y los cambia a
mayúscula para agredir los ojos
del lector.
❖ Escriba el código assembly del
CUERPO del lazo iterativo,
asumiendo que la variable de
iteración está almacenada en el
registro R0, y que la dirección de
inicio del vector está
almacenado en el registro R1
Universidad de Concepción, Departamento de Ingeniería Eléctrica 32 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Universidad de Concepción, Departamento de Ingeniería Eléctrica 33 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
a
fi
”
Direccionamiento autoindexado
❖ Es común modi car el registro base después de accesar la memori
❖ Ej. Al recorrer un vecto
❖ Pre-índice: Suma el registro base más el índice y usa esta dirección
para accesar la memoria, actualiza el registro bas
❖ Ej. LDR R0, [R1, R2]! ; dir. ef. = R1 + R2, R1 = R1 + R
❖ Post-índice: Accesa la memoria usando el valor original del registro
base, y después actualiza el registro base sumándole el índic
❖ Ej. LDR R0, [R1], R2 ; dir. ef. = R1, R1 = R1 + R
❖ En todos los casos, índice puede ser también una constante
Universidad de Concepción, Departamento de Ingeniería Eléctrica 34 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
r
Universidad de Concepción, Departamento de Ingeniería Eléctrica 35 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
fl
e
Bits de condición
❖ Conjunto de bits que indican propiedades del resultado de
una operación aritmético/lógic
❖ En ARM: resultado negativo (N), resultado cero (Z), carry
(C), y over ow (V
❖ Almacenadas en el registro de estado, o registro de condició
❖ En ARM, 4 bits superiores del Current Program Status
Register (CPSR)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 36 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fl
)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 37 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
P
fi
fi
7
fi
)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 38 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
fi
fi
fi
fl
fl
fl
fl
2
Universidad de Concepción, Departamento de Ingeniería Eléctrica 39 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
fi
l
fl
s
Ejemplo
Universidad de Concepción, Departamento de Ingeniería Eléctrica 40 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
3
Ejemplo
❖ Escriba código assembly para el siguiente código C, asumiendo que las
variables enteras con signo a - e están asignadas a los registros R0 - R4
if (a > b)
d = (a - b) * c
els
e = (b - a) * d;
Universidad de Concepción, Departamento de Ingeniería Eléctrica 41 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
e
Instrucciones de salto
❖ Si usamos ejecución condicional en estructuras if-else más
grandes, procesador termina ejecutando muchas
instrucciones que no tienen ningún efect
❖ Preferible ejecutar solamente instrucciones que
corresponde, y saltarse el rest
❖ Instrucciones de salto permiten modi car el ujo de
ejecución de un programa para saltar a una instrucción no
adyacente a la actua
❖ Además permiten ejecutar lazos iterativos (for, while)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 42 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
l
fi
o
fl
Salto incondicional
❖ Instrucción de salto incondicional en ARM se llama B (branch
❖ Salta a instrucción en dirección de memoria especi cada en la instrucció
❖ En assembly, instrucción destino se especi ca con un rótul
❖ Rótulo es un símbolo que identi ca una dirección de memoria, ensamblador convierte
rótulo en una dirección numéric
❖ Algunos ensambladores requieren que rótulos estén al comienzo de la línea, e
instrucciones estén indentadas, otros además requieren dos puntos (:) después del rótul
❖ Ejemplo
ADD R1, R2, #17 ; R1 = R2 + 1
B TARGET ; salta a TARGE
ORR R1, R1, #3 ; no se ejecut
AND R3, R1, #0xFF ; no se ejecut
TARGE
SUB R1, R1, #78 ; R1 = R1 - 78
Universidad de Concepción, Departamento de Ingeniería Eléctrica 43 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
T
fi
a
fi
fi
7
Saltos condicionales
❖ Al igual que el resto de las instrucciones, salto B puede ejecutarse en forma
condiciona
❖ Ej. BEQ, BLT, BH
❖ Otras ISA llaman “branch” a los saltos condicionales y “jump” a los saltos
incondicionale
❖ Ejemplo
MOV R0, #4 ; R0 =
ADD R1, R0, R0 ; R1 = R0 + R0 =
CMP R0, R1 ; R0 - R1 = -4 —> NZCV = 100
BEQ THERE ; salto no se ejecut
ORR R1, R1, #1 ; R1 = R1 OR 1 =
THER
ADD R1, R1, #78 ; R1 = R1 + 78 = 87
Universidad de Concepción, Departamento de Ingeniería Eléctrica 44 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
E
Estructura if-else
❖ Usando saltos condicionales, se pueden implementar estructuras if, if-else, switch-cas
❖ Ej. Escribir el siguiente código C en assembly ARM, asumiendo que las variables
enteras con signo a - e están asignadas a los registros R0 - R4
if (a > b)
d = (a - b) * c
e = a + d;
Estructura if-else
❖ Ej. Escribir el siguiente código C en assembly ARM, asumiendo que las
variables enteras con signo a - e están asignadas a los registros R0 - R4
if (a > b)
d = (a - b) * c
els
d = (b - a) * c
e = a + d;
CMP R0, R1 ; comparación (a - b
BLE ELS
SUB R3, R0, R1 ; se ejecuta si a >
MUL R3, R3, R2 ; se ejecuta si a >
B FIN ; se salta el “else
ELS
SUB R3, R1, R0 ; se ejecuta si a <=
MUL R3, R3, R2 ; se ejecuta si a <=
FI
ADD R4, R0, R3 ; se ejecuta siempre
Universidad de Concepción, Departamento de Ingeniería Eléctrica 46 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
N
Estructura switch-case
❖ Switch-case puede siempre expresarse como un bloque if - else if - else if - … - els
❖ Ej. Escribir el siguiente código C en assembly ARM. Conviértalo primero a un
código tipo if - else if - else if - … - else
switch (seleccion)
case ‘A’:
d = (a + b)
break
case ‘B’:
d = (a - b)
break
case ‘C’:
d = (b - a)
break
default:
d = 0
a = d * a * b;
Universidad de Concepción, Departamento de Ingeniería Eléctrica 47 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
}
Estructura switch-case
❖ Cuando el valor de las alternativas es relativamente consecutivo,
el compilador puede usar una “tabla de saltos
❖ De nir un vector con las direcciones de inicio de las alternativa
❖ Leer el vector usando la variable de selección como índic
❖ Ej. LDR R0, [R1, R2, LSL #2
❖ Saltar a la dirección
❖ Ej. MOV R15, R
❖ Que es lo mismo que MOV PC, R0
Universidad de Concepción, Departamento de Ingeniería Eléctrica 48 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
0
Estructura do-while
❖ Estructura do-while se implementa con un bloque de código con un
salto condicional al na
❖ Ej. Escribir el siguiente código C en assembly ARM
Universidad de Concepción, Departamento de Ingeniería Eléctrica 49 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
fi
l
Estructura while
❖ Una estructura while se implementa con un salto
condicional al principio y un salto incondicional al na
❖ Ej. Escribir el siguiente código C en assembly ARM
// todas las variables y vectores son entero
int i, tmp
int a[100], b[100]
i = 0
while (i < 100)
tmp = a[i]
a[i] = b[i]
b[i] = tmp
i++
}
Universidad de Concepción, Departamento de Ingeniería Eléctrica 50 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
;
Estructura for
❖ Un ciclo for se implementa como un while más una instrucción
de inicialización al comienzo del lazo y una de iteración al nal
❖ Ej. Escribir el siguiente código C en assembly ARM
int i, tmp
char str1[100], str2[100]
Universidad de Concepción, Departamento de Ingeniería Eléctrica 51 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
…
Llamados a función
❖ Un lenguaje estructurado de alto nivel se compone de procedimientos
que llaman a otros procedimiento
❖ También llamados subrutinas
❖ En C, estos procedimientos son llamados funciones
❖ Una función es un procedimiento que puede recibir cero o más
parámetros y retornar un valor
d = fun(a, b, c) return p1 + p2 - p3
}
e = fun (c, d, 5)
…
Universidad de Concepción, Departamento de Ingeniería Eléctrica 52 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
…
Universidad de Concepción, Departamento de Ingeniería Eléctrica 53 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
…
Universidad de Concepción, Departamento de Ingeniería Eléctrica 55 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
L
Ejemplo
MAI
int a, b, c, d, e
; a - e —> R4 - R8
MOV R0, R
d = fun(a, b, c)
MOV R1, R
MOV R2, R
e = fun (c, d, 5) BL FU
… MOV R7, R
MOV R0, R
MOV R1, R
MOV R2, #
BL FU
int fun (int p1, int p2, int p3 MOV R8, R
return p1 + p2 - p3
FU
}
ADD R0, R0, R
SUB R0, R0, R
MOV PC, L
…
Universidad de Concepción, Departamento de Ingeniería Eléctrica 56 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
…
…
…
int i = 0 PUNT
int suma = 0 MOV R4, #
MOV R5, #
do
suma = suma + v1[i] * v2[i] D
i++ LDR R6, [R0, R4, LSL #2
} while (i < n LDR R7, [R1, R4, LSL #2
return suma MLA R5, R6, R7, R
} ADD R4, R4, #
CMP R4, R
BLT D
MOV R0, R
MOV PC, LR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 57 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
FI
MOV R0, R
MOV PC, LR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 58 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
Universidad de Concepción, Departamento de Ingeniería Eléctrica 59 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
MOV R0, #
MOV PC, LR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 60 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
while (*s1 != 0
s1++
do
char tmp = *s2
*s1 = tmp
s1++
s2++
} while (tmp != 0)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 61 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
Universidad de Concepción, Departamento de Ingeniería Eléctrica 62 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
n
fi
fi
)
fi
a
El stack (pila)
❖ Estructura de datos en memoria local a la activación de la
funció
❖ Se expande cuando el procesador necesita más memoria,
se contrae cuando el programa ya no necesita las
variables almacenada
❖ Estructura de datos tipo LIFO (last in, rst out
❖ Stack se mantiene usando un puntero a memoria (stack
pointer), normalmente el registro R13 (SP
❖ Apunta al tope del stac
❖ Por defecto, stack en ARM es de tipo descendiente y llen
❖ Crece hacia direcciones bajas de memoria, SP apunta
a la última posición ocupada en el stac
❖ Arquitectura soporta stacks ascendientes y vacíos
Universidad de Concepción, Departamento de Ingeniería Eléctrica 63 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
n
fi
k
Universidad de Concepción, Departamento de Ingeniería Eléctrica 64 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
r
fi
fi
s
fi
e
fi
e
MOV R0, R
MOV PC, LR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 65 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Universidad de Concepción, Departamento de Ingeniería Eléctrica 68 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Universidad de Concepción, Departamento de Ingeniería Eléctrica 69 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
)
fi
Ejercicio: Reducir uso de stack
int punto(int v1[], int v2[], int n
PUNT
int i = 0 PUSH {R4, R5
int suma = 0 MOV R4, #
do MOV R5, #
suma = suma + v1[i] * v2[i] D
i++ LDR R3, [R0, R4, LSL #2
} while (i < n LDR R12, [R1, R4, LSL #2
return suma MLA R5, R3, R12, R
} ADD R4, R4, #
CMP R4, R
En otros casos, podríamos haber BLT D
sobrescrito R1 y R2 para evitar usar R4 y MOV R0, R
R5, pero en este caso necesitamos sus POP {R4, R5
MOV PC, LR
valores durante toda la ejecución de la
función
Universidad de Concepción, Departamento de Ingeniería Eléctrica 70 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Procedimientos no-hoja
❖ Cuando un procedimiento llama a otro procedimiento, los
registros que serán utilizados al regresar, deben ser
preservados de acuerdo a las reglas del estánda
❖ Caller-save: Antes de llamar a la función, el
procedimiento que llama debe almacenar todos los
registros no preservados (R0-R3 y R12) cuyo valor
necesita después del llamad
❖ Callee-save: Todo procedimiento debe almacenar y luego
restaurar todos los registros preservados (R4-R11, LR, SP)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 71 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
o
Ejemplo
Universidad de Concepción, Departamento de Ingeniería Eléctrica 72 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Estado del stack
Universidad de Concepción, Departamento de Ingeniería Eléctrica 73 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Funciones recursivas
❖ Una función recursiva se llama a si mism
❖ Ej. fact (n) = n * fact (n-1) cuando n > 1, 1 cuando n =
❖ Las funciones también pueden tener recursividad indirecta, ej. f1()
llama a f2(), f2() llama a f1(
❖ Una función recursiva es “llamador” (caller) y “llamado” (callee) a la ve
❖ Llamador: Debe almacenar y recuperar registros de parámetros (R0-
R3) y registro temporal R12 si los va a necesitar después del llamado
recursivo, y LR (porque se sobrescribe al hacer el llamado recursivo
❖ Llamado: Debe almacenar y restaurar los registros preservados R4-
R11 si los va a sobrescribir, debe restaurar el valor original de SP
Universidad de Concepción, Departamento de Ingeniería Eléctrica 74 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
)
Ej. Factorial
Universidad de Concepción, Departamento de Ingeniería Eléctrica 75 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ej. Stack durante la ejecución de factorial
Universidad de Concepción, Departamento de Ingeniería Eléctrica 76 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Resumen: Stack
❖ Qué se almacena en el stack frame
❖ Registros preservados modi cados (R4 - R11, LR si llama a otro
procedimiento
❖ Funciones no-hoja: Registros no preservados que serán usados después de
llamado a procedimiento (R0-R4, R12
❖ Variables locales y temporales que no caben en los registros del procesador
(scratch space
❖ Argumentos adicionales cuando exceden los cuatro almacenables en R0-R
❖ Valor de retorno cuando no cabe en un registr
❖ Registro SP siempre debe volver a valor original antes de retornar
Universidad de Concepción, Departamento de Ingeniería Eléctrica 77 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
)
fi
?
int fib(int n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
return fib(n-1) + fib(n-2);
}
Universidad de Concepción, Departamento de Ingeniería Eléctrica 78 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2018
Excepciones
❖ Todo procesador debe ser capaz de manejar situaciones de excepció
❖ Típicamente manejadas por el sistema operativo, que se ejecuta con privilegios
mayores al usuario, puede accesar toda la memoria y los dispositivos de E/
❖ Producto de la ejecución del program
❖ División por cero (en versiones de ARM con división
❖ Acceso ilegal a memori
❖ Instrucción inválida (código de operación desconocido
❖ Explícitamente invocadas por el program
❖ “Trap” o “interrupción por software” usada para llamar al S.O
❖ Externa
❖ Interrupciones por hardware, provocadas por dispositivos de E/S
Universidad de Concepción, Departamento de Ingeniería Eléctrica 79 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
Modos de operación
❖ Un procesador ARM tiene 7 modos de operació
❖ Usuario: Sin privilegios especiales, mayoría de los programas se ejecuta aqu
❖ FIQ: Utilizado para procesar una interrupción de alta prioridad (rápida
❖ IRQ: Utilizado para procesar interrupciones de baja prioridad (normal
❖ Supervisor: Utilizado ante un reset o la ejecución de una instrucción de
interrupción por software (SWI
❖ Abortar: Utilizado para manejar violaciones de memori
❖ Inde nido: Utilizado para manejar instrucciones no de nida
❖ Sistema: Modo privilegiado que usa los mismos registros que el modo
usuario
Universidad de Concepción, Departamento de Ingeniería Eléctrica 80 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
)
fi
a
Bancos de registros
❖ Los distintos modos de ejecución poseen sus propios subconjuntos de los
registros, evita tener que almacenarlos en memoria (37 registros físicos en total)
SPSR: saved
program status
register.
CPSR se copia a
SPSR cuando se
produce una
excepció
Instrucciones
especiales accesan
CPSR y SPSR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 81 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Recordar: CPSR
Universidad de Concepción, Departamento de Ingeniería Eléctrica 82 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
o
Manejo de excepciones
❖ Cuando ocurre una excepción, el procesado
❖ Copia CPSR al SPSR del banco correspondient
❖ Modi ca los bits correspondientes del CPS
❖ Bits de mod
❖ Deshabilita I o
❖ Set de instruccione
❖ Cambia al banco de registros del modo
correspondient
❖ Almacena PC en el LR del banco correspondient
❖ Asigna a PC la dirección del vector correspondient
❖ Para retornar de una excepció
❖ CPSR <— SPS Instrucción en el vector es
❖ PC <— LR
típicamente un salto
Universidad de Concepción, Departamento de Ingeniería Eléctrica 83 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
o
Mapa de memoria
❖ Código para manejo de excepcione
❖ Texto (código y constantes
❖ Variables globales (static base pointer SB = R9
❖ Datos dinámicos (stack y heap
❖ Dispositivos de E/
❖ En ARM, el mapa de memoria es
relativamente exibl
❖ Tabla de excepciones siempre parte en
dirección
❖ Dispositivos de E/S siempre mapeados en
direcciones altas de memori
❖ Usuario puede indicar dónde comienzan
los otros segmentos
Universidad de Concepción, Departamento de Ingeniería Eléctrica 84 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
0
fl
S
Lenguaje de máquina
❖ Lenguaje assembly es fácil de leer por un humano (mnemónicos, rótulos
❖ Pero circuitos digitales procesan sólo 0s y 1
❖ Lenguaje de máquina representa las instrucciones assembly como vectores
de 0s y 1
❖ Objetivo: Simplicidad y regularida
❖ Idealmente, un único formato de instrucción permite que hardware de
descodi cación sea más sencill
❖ Pero instrucciones son muy distintas, se necesitarían muchos bit
❖ Principio 4: Un buen diseño requiere buenos compromiso
❖ Pocos formatos distintos, instrucciones de 32 bits
Universidad de Concepción, Departamento de Ingeniería Eléctrica 85 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
fi
s
Instrucciones aritmético/lógicas
Universidad de Concepción, Departamento de Ingeniería Eléctrica 87 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Operando 2
Ej. Constantes
❖ Rotación opcional permite generar
diversas constante
❖ Números de 8 bits, potencias de
2, múltiplos pequeños (7 bits) de
cualquier potencia de
❖ Recordar que rotar a la derecha en
N es lo mismo que rotar a la
izquierda en (32 - N
❖ Es una forma ingeniosa de utilizar
el desplazador (barrel shifter)
hardware del procesador para
generar un rango de constantes más
útil que una constante de 12 bits
Universidad de Concepción, Departamento de Ingeniería Eléctrica 89 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
Campo cmd
Universidad de Concepción, Departamento de Ingeniería Eléctrica 90 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Campo cmd (cont.)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 91 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Codificación de instrucciones aritméticas
Universidad de Concepción, Departamento de Ingeniería Eléctrica 92 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Codificación de instrucciones de desplazamiento
Universidad de Concepción, Departamento de Ingeniería Eléctrica 93 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Instrucciones de multiplicación
Universidad de Concepción, Departamento de Ingeniería Eléctrica 94 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Instrucciones de acceso a memoria
Universidad de Concepción, Departamento de Ingeniería Eléctrica 96 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ej. STR R11, [R5], #-26
❖ Instrucción utiliza direccionamiento post-indexado
(direcciona con R5, actualiza R5 sumándole -26)
❖ Post-índice —> P = 0, W =
❖ STR —> L = 0, B =
❖ Offset constante se resta de base —> I = 0, U = 0
Universidad de Concepción, Departamento de Ingeniería Eléctrica 97 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
0
Instrucciones LDRM/STRM
Universidad de Concepción, Departamento de Ingeniería Eléctrica 98 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Instrucciones de salto
❖ Instrucciones de salto utilizan un operando inmediato de 24 bits
❖ Expresa la dirección destino como el desplazamiento respecto de la dirección
de la instrucción de salto (PC), extendido en sign
❖ Por motivos históricos de implementación, desplazamiento relativo a (PC + 8
❖ Y el desplazamiento es en instrucciones (4 bytes
❖ O sea, la dirección destino es (PC + 8) más la constante multiplicada por 4 y
extendida en signo a 32 bit
❖ Bit L indica si es un salto convencional (0) o un BL (1)
Universidad de Concepción, Departamento de Ingeniería Eléctrica 99 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
s
Ejemplo
En este caso, la dirección destino está 3 instrucciones más abajo que PC + 8, por lo tanto el
desplazamiento vale 3
Universidad de Concepción, Departamento de Ingeniería Eléctrica 100 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Determinar el código de máquina para la instrucción de salto
Universidad de Concepción, Departamento de Ingeniería Eléctrica 101 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Traducir la siguiente palabra de lenguaje de máquina a código assembly: 0xE0475001
Universidad de Concepción, Departamento de Ingeniería Eléctrica 102 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Traducir la siguiente palabra de lenguaje de máquina a código assembly: 0xE0475001
En binario:
Universidad de Concepción, Departamento de Ingeniería Eléctrica 103 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Traducir la siguiente palabras de lenguaje de máquina a código assembly: 0xE5949010
Universidad de Concepción, Departamento de Ingeniería Eléctrica 104 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Traducir la siguiente palabras de lenguaje de máquina a código assembly: 0xE5949010
Universidad de Concepción, Departamento de Ingeniería Eléctrica 105 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Campo funct en load/store
Universidad de Concepción, Departamento de Ingeniería Eléctrica 106 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Ejemplo
❖ Traducir la siguiente palabras de lenguaje de máquina a código assembly: 0xE5949010
En binario:
11100101100101001001000000010000 —> Load/store
1110 01 0 1 1 0 0 1 0100 1001 000000010000
I’ = 0 —> Src2 = imm12
P = 1, W = 0 —> Offset
L = 1, B = 0 —> LDR
U = 1 —> sumar a base
Universidad de Concepción, Departamento de Ingeniería Eléctrica 107 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Problema (1)
Se ha encontrado el siguiente código de máquina ARM almacenado en forma consecutiva en
la memoria RAM de un computador. Se sabe que este código corresponde a una función que
recibe dos parámetros enteros y retorna un valor entero. Escriba el código C de una función
que, al compilarla, produciría este código. Sugerencia: Escriba primero el código assembly
equivalente.
0xE150000
0xC040000
0xD041000
0xE1A0f00
Universidad de Concepción, Departamento de Ingeniería Eléctrica 108 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Problema (2)
0xE150000
0xC040000
0xD041000
0xE1A0f00E
Universidad de Concepción, Departamento de Ingeniería Eléctrica 109 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
0
Problema (3)
0xE150000
0xC040000
0xD041000
0xE1A0f00E
Universidad de Concepción, Departamento de Ingeniería Eléctrica 110 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
Problema (4)
0xE150000
0xC040000
0xD041000
0xE1A0f00E
Universidad de Concepción, Departamento de Ingeniería Eléctrica 111 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
0
Problema (5)
0xE150000
0xC040000
0xD041000
0xE1A0f00E
Universidad de Concepción, Departamento de Ingeniería Eléctrica 112 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
.
Problema (6)
0xE150000
0xC040000
0xD041000
0xE1A0f00E
Entonces
CMP R0, R
SUBG R0, R0, R
SUBL R0, R1, R
MOV PC, L
O bien
int f (int a, int b)
if (a > b) return a – b
else return b – a
}
Universidad de Concepción, Departamento de Ingeniería Eléctrica 113 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020
{
T
E
:
Universidad de Concepción, Departamento de Ingeniería Eléctrica 114 Arquitectura de Computadores - 543426 - Miguel Figueroa, 2020