2.1 y 2.2

Anuncio
Tema 2: Arquitectura del repertorio de instrucciones
Visión del computador que tiene el programador en bajo nivel.
Lo que el programador en lenguaje ensamblador debe conocer
para escribir programas:
(1) Los registros del procesador
(2) Tipos de instrucciones
(3) Tipos de operandos
(4) Modos de direccionamiento
(5) Formato de las instrucciones
1
2. Arquitectura del repertorio de instrucciones (ISA)
2.1 Introducción (diseño del ISA; cómo es una instrucción)
2.2 Los registros (del procesador)
2.2 Tipos de instrucciones (qué operaciones)
2.3 Tipos de operandos
2.4 Modos de direccionamiento (especificación de operandos)
2.5 Formato de las instrucciones (codificación binaria)
2.6 Resumen de la ISA de la MIPS
2
2.1 Introducción
Diseño del ISA
Es un nivel complicado de diseñar.
Al hacerlo, hay que tener en cuenta:
El software (compilador de LANs) que tiene que soportar.
La estructura del hardware que lo soportará.
Es la conexión entre ambos niveles: lenguaje que ambos tienen
que entender.
3
Es un punto de encuentro de el diseñador de la estructura y el
programador a bajo nivel del computador (o el escritor del
compilador):
- El diseñador de la estructura ve el nivel ISA como la
funcionalidad que ésta debe dar al programador.
- El programador se hace consciente de la estructura definida
por el diseñador: cómo usa los registros, qué operaciones tiene
la ALU, cómo accede a memoria y qué tipos de datos tiene.
Objetivo común de los diseñadores de computadores:
– Encontrar un lenguaje que haga fácil la construcción del
hardware y del software (el compilador).
– Maximizar el rendimiento y minimizar el coste.
4
Cómo es una instrucción
Los programas se escriben en lenguaje ensamblador.
swap:muli $2, $5,4
add $2, $4,$2
lw $16, 4($2)
sw $16, 0($2)
jr $31
El lenguaje ensamblador es ‘equivalente’ al lenguaje máquina.
00000000101000010000000000011000
00000000100011100001100000100001
10001100011000100000000000000000
10101100011000100000000000000100
00000011111000000000000000001000
5
El lenguaje máquina, lo interpreta y ejecuta directamente el
hardware del computador.
Está formado por instrucciones (máquina) simples.
Una instrucción máquina especifica una procesamiento de datos
que debe realizar el procesador.
6
Según el tipo, una instrucción especifica:
- Una operación aritmética o lógica a realizar sobre uno o dos
datos para obtener un resultado.
Este tipo de instrucciones se realiza en el camino de datos: la
ALU opera con datos en el banco de registros (fuentes) y el
resultado se almacena en el banco de registros (destino).
- Una transferencia de un dato desde una posición de memoria
o registro (fuente) a un registro o posición de memoria
(destino).
Este tipo de instrucciones implican un acceso a memoria.
- Un ruptura de la secuencia de ejecución de las instrucciones.
Este tipo de instrucciones se realiza en el camino de datos: se
carga un valor en el contador de programa.
7
Sintaxis típica de una instrucción en lenguaje ensamblador
Ejemplo de la MIPS
Cuatro campos básicos: etiqueta, nombre de la instrucción,
operandos destino y fuente(s) y comentarios:
En el simulador aparecen las instrucciones máquina:
8
2.2 Los registros
Es un pequeña memoria rápida en el procesador para
almacenamiento temporal de datos.
Su número y función varían entre los distintos diseños de
arquitecturas del repertorio de instrucciones
Hoy en día, casi todas las arquitecturas son con registros de
propósito general. En éstas, existe un conjunto de registros
manejables libremente por el programador.
Este no es el único tipo de arquitectura, veamos qué tipos de
arquitectura hay en función de cómo se pueden especificar en
una instrucción los operandos:
9
Tipos de arquitecturas del repertorio de instrucciones
Una primera clasificación (histórica) según
almacenamiento temporal para los operandos.
el
tipo
de
Esto determina el número de operandos explícitos por instrucción
Almacenamiento Ejemplos
temporal
1. Pila
HP 3000
PDP-8
2. Acumulador
Motorola 6809
IBM 360
3. Conjunto de
DEC
registros
VAX, MIPS
Operandos
explícitos
0
Operando
destino en …
Pila
1
Acumulador
2ó3
Registros o
memoria
10
Dónde están los operandos para las instrucciones aritméticas en
los distintos tipos de arquitectura:
- Arquitectura de pila: todos en memoria (en la pila). Ningún
operando explícito en la instrucción.
- Arquitectura de acumulador: uno de los fuente y el destino en
el registro acumulador y el otro fuente en memoria. El operando
en memoria explícito.
- Arquitectura de registros: en registros o posiciones de
memoria. Dos (uno será fuente y destino) o tres operandos
explícitos.
Según el tipo de arquitectura de registros:
(i) Se podrá hacer operaciones ALU con datos en memoria.
(ii) Habrá que cargarlos en registros para operar con ellos.
11
Veamos las instrucciones de transferencia y suma para cada una:
Pila
Estructura LIFO: el registro puntero de pila (SP) ‘apunta’ (contiene
la dirección de) al último elemento puesto en la pila.
- PUSH dir = SP Å SP+1 , M[SP] Å M[dir] (2 accesos a
memoria)
- POP dir
memoria)
=
M[dir] Å M[SP] , SP Å SP-1
(2 accesos a
- ADD = SP Å SP-1 , M[SP] Å M[SP+1] + M[SP] (3 accesos a
memoria)
12
Acumulador
- LOAD dir = AC Å M[dir] (1 acceso a memoria)
- STORE dir = M[dir] Å AC (1 acceso a memoria)
- ADD dir = AC Å AC + M[dir] (1 acceso a memoria)
Registros
- LOAD reg, dir = reg Å M[dir] (1 acceso a memoria)
- STORE reg, dir = M[dir] Å reg (1 acceso a memoria)
- ADD reg_dest, reg_f1, reg_f2 = reg_dest Å reg_f1 + reg_f2
(no hay accesos a memoria)
13
Veamos cómo se traduciría la secuencia de código C = A + B para
las 3 clases de arquitectura:
(A, B y C son variables y se almacenan en memoria)
Pila
PUSH dirA
PUSH dirB
ADD
POP dirC
Acumulador
LOAD dirA
ADD dirB
STORE dirC
Registro
LOAD R1,dirA
LOAD R2,dirB
ADD R3,R1,R2
STORE R3,dirC
4 instrucciones
9 accesos a
memoria
3 instrucciones
3 accesos a
memoria
4 instrucciones
3 accesos a
memoria
¿Cómo sería para D = A + B +C?
14
Veamos las ventajas e inconvenientes de cada una:
(1) Pila
Ventaja: Instrucciones aritméticas cortas (no se especifican
operandos).
Inconveniente: Muchos accesos memoria.
(2) Acumulador
Ventaja: Menos accesos a memoria.
Inconveniente: Instrucciones aritméticas más largas, se
especifica un operando en memoria.
(3) Registros (la mayoría hoy en día)
Ventajas: Menos accesos a memoria e instrucciones más
cortas (se especifican tres operandos en registro).
15
Registros del procesador
Son de dos tipos:
(1) Visibles al programador en lenguaje ensamblador. Serán
especificados explícitamente en una instrucción.
(2) De control y de estado, no pueden ser especificados
explícitamente en una instrucción, son usados por:
(a) La unidad de control para el procesamiento de instrucciones
y los accesos a memoria.
(b) El sistema operativo para controlar la ejecución de los
programas.
16
(1) Registros manejables por el programador:
Junto con la ALU forman el camino de datos
Se utilizan para contener los operandos de las instrucciones
aritméticas o para especificar una dirección de memoria.
Son especificados explícitamente en las instrucciones.
Por ejemplo en la MIPS mediante un número:
add $9, $17, $2 ó lw $16, 4($2)
17
Cuestiones de diseño de los registros manejables por el
programador:
(a) Respecto al uso que le puede dar el programador:
(1) De propósito general: pueden contener datos y especificar
direcciones (MIPS).
(2) De datos: sólo pueden contener datos.
(3) De dirección: sólo para especificar direcciones (modos de
direccionamiento indirecto ó base+desplazamiento).
(b) Número de registros
La experiencia dice que entre 8 – 32:
- Menos: No son suficientes para contener variables lo que
implica muchas referencias a memoria.
- Más: No reduce notablemente las referencias a memoria y
aumenta la longitud de las instrucciones (más número de bits
para especificar los registros).
18
(c) Tamaño de los registros
Habrá que decidir si todos los registros tienen el mismo tamaño
(MIPS) o no.
(1) Los que han de contener direcciones, lo suficientemente
largo para contener direcciones completas.
(2) Los que han de contener datos, lo suficientemente largos
para contener la mayoría de los tipos de datos: una palabra.
A menudo es posible usar dos registros de datos contiguos
como uno solo para contener valores de doble longitud
(MIPS: los registros para punto flotante doble precisión).
19
(2) Registros de control y estado del funcionamiento de la CPU:
En la mayoría de las máquinas no son manejables por el
programador.
Algunos serán manejables por instrucciones ejecutadas en modo
supervisor (control del sistema operativo).
(a) Registros de control
(1) Contador de programa: contiene la dirección de la
instrucción a ejecutar.
(2) Registro de instrucción: contiene la instrucción a ejecutar.
(3) Registro de dirección de memoria: contiene la dirección de
una posición de memoria para ser leída o escrita.
(4) Registro de buffer de memoria: contiene la palabra de
datos a escribir en memoria o que ha sido leída.
20
En esta figura vemos los registros de control
21
(b) Registro de estado (del programa en ejecución)
Contiene los códigos de condición y otra información de estado.
(i) Los códigos de condición (flags) son bits que especifican si se
ha producido una determinada circunstancia en una operación
ALU: signo del resultado, resultado igual a cero, acarreo de orden
superior, desbordamiento, etc.
Son utilizados implícitamente en las instrucciones de salto
condicional
(ii) Además de los códigos de condición la palabra de estado
puede contener bits para:
(1) Habilitación/deshabilitación de interrupciones (E/S).
(2) Modo supervisor/usuario (de funcionamiento de la CPU).
22
Características del banco de registros del MIPS R2000
23
(1) Banco de registros de propósito general:
32 registros de 32 bits: se especifican con el símbolo ‘$’ y el número
de registro (add $2, $3, $4).
El registro $0 contiene invariablemente el valor 0.
(2) Dos registros especiales de 32 bits:
HI y LO almacenan los resultados de multiplicaciones y divisiones.
(3) Banco de registros para números reales:
32 registros de 32 bits que puede utilizarse como:
- 32 registros de 32 bits con formato IEEE 754 de simple
precisión. Se identifican por $f0, $f2, $f4, …, $f30
- 16 registros de 64 bits con formato IEEE 754 de doble
precisión. Se identifican por $f0, $f2, $f4, …, $f30
24
Convención en el uso de los registros en la MIPS
Nombre
del
registro
zero
at
v0
v1
a0
a1
a2
a3
t0..t7
s0..s7
t8, t9
k0, k1
gp
sp
fp
ra
Número
Uso
0
1
2
3
4
5
6
7
8..15
16..23
24, 25
26, 27
28
29
30
31
Constante 0
Reservada para ensamblador
Para devolver resultados de funciones
“
Argumento 1 a una rutina
Argumento 2
“
Argumento 3
“
Argumento 4
“
Temporal (no se guarda valor entre llamadas)
Temporal (el valor se guarda entre llamadas)
Temporal (no se guarda valor entre llamadas)
Reservado para el kernel del sistema operativo
Puntero al área global (apunta al bloque de datos)
Puntero de pila
Puntero de marco de pila
Dirección de retorno, usado por llamadas a rutina
25
Esta es la visión de los registros de la MIPS que nos da el PCSpim
26
Descargar