Tema3-1 Cisc Risc

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

TECNOLOGÍA DE

COMPUTADORES

TEMA 3. ARQUITECTURA MIPS (SUBCJTO.)


PARTE I

Área de Arquitectura y Tecnología de Computadores


Escuela Universitaria Politécnica de Teruel
http://eupt.unizar.es/TCO

 Bibliografía
 Introducción a la arquitectura MIPS
 CISC vs RISC
 Visión de los registros y la memoria
 Introducción al repertorio de instrucciones
 Formatos de instrucción
 Codificación de las instrucciones
 Modos de direccionamiento
 Sintaxis del lenguaje ensamblador de MIPS
Bibliografía
 Patterson, D. A.; Hennessy, J. L. Estructura y diseño
de Computadores: Interficie circuitería/programación.
Vol. 1. Reverté, 2000 ----- Capítulos 3 y 4

 Patterson, D. A.; Hennessy, J. L. Estructura y diseño


de Computadores: Interficie circuitería/programación.
Vol. 3. Reverté, 2000 ----- Apéndice A

 Stallings, W. Organización y Arquitectura de


computadores: Diseño para optimizar prestaciones.
Prentice Hall, 2000 ----- Capítulos 9, 10 y 12

Figura 3.21. Patterson D. A., Hennessy J. L.


Introducción a la arquitectura MIPS
 MIPS

Propuesta y desarrollada por J. L. Hennessy, en la Universidad de


Stanford a principio de los años 80.
Posteriormente se creó la empresa MIPS Computer Systems para
comercializarla.
MIPS ha ido evolucionando desde la versión inicial (R2000, R3000,
R4000, R6000, etc.).

Esta arquitectura es un claro representante de la filosofía de diseño


RISC, que surgió, para aumentar las prestaciones de los computadores
de ese momento (de filosofía CISC).
Uno de los primeros investigadores de RISC fue Hennessy, junto con
D. A. Patterson.

CISC vs RISC (1)


En la actualidad existen dos filosofías de diseño de procesadores:

 Procurar que cada una de las sentencias de los lenguajes de alto nivel
puedan ser representadas por una, o muy pocas instrucciones en
ensamblador.
 Hacer que las instrucciones más utilizadas por las aplicaciones se
ejecuten lo más rápido posible. Para determinar cuáles son las
instrucciones más utilizadas se realizan análisis estadísticos.

A los procesadores diseñados con la primera filosofía se les conoce como


(Complex Instruction Set Computer, CISC).
A los procesadores diseñados con la segunda filosofía se les conoce
como (Reduced Instruction Set Computer, RISC).

Aunque el rendimiento de ambos tipos es similar, el diseño de los


computadores RISC es mucho más sencillo que el de los CISC.
CISC vs RISC (2)
 CISC
La tendencia general en la fabricación de los procesadores era CISC.
Las características principales de los procesadores CISC son:
• Muchas instrucciones
• Varios formatos de instrucciones (con longitud variable)
• Varios tipos de instrucciones de almacenamiento
• Muchos modos de direccionamiento
• Unidad de Control microprogramada (Software)

 RISC
A finales de los 70's aparece la tendencia RISC. Las características
principales de los procesadores RISC son:
• Pocas instrucciones
• Pocos formatos de instrucciones (con longitud fija)
• Dos instrucciones de almacenamiento (Load/Store)
• Pocos modos de direccionamiento
• Unidad de Control cableada (Hardware)

CISC vs RISC (3)


 Ventajas de RISC
 Una computadora CISC gasta el 80% de su tiempo ejecutando
solamente el 20% de sus instrucciones.
 La ejecución en RISC es más rápida que en CISC.
 Los programas en RISC ocupan menos espacio de memoria.
 Los compiladores comerciales no usan todas las instrucciones del
procesador CISC.

 Principales fabricantes de procesadores

FABRICANTE PROCESADOR TENDENCIA

SUN SPARC RISC


SILICON GRAPHICS MIPS RISC
MOTOROLA POWER RISC
HEWLETT PACKARD PA RISC
DEC ALPHA RISC
INTEL PENTIUM CISC ~ RISC
CISC vs RISC (y 4)
350

300

250 RISC
Rendimiento

200

150 Intel x86

100

50

0
1982 1984 1986 1988 1990 1992 1994

¿Ganó RISC la batalla de la tecnología y perdió la guerra del mercado?

Visión de los registros y la memoria (1)


 Procesador MIPS Principales características:
 Arquitectura de 32 bits load/store
CPU (los operandos de las instrucciones
aritmético-lógicas están en
PC registros. Instrucciones de carga y
almacenamiento, acarrean los
Lo datos entre registros y mem).
Hi FPU  CPU con 32 registros de propósito
general $0..$31, además, dos
$0 $f0 registros especiales Hi y Lo,
$1 $f1 permiten operaciones de
multiplicación y división con 64
… … bits.
 FPU (coma flotante) con 32
$31 $f31 registros de propósito general
$f0..$f31, que soportan IEEE754
de simple y doble precisión.
 PC de 32 bits, espacio de memoria
232 bytes.
Visión de los registros y la memoria (2)
 Ordenación de bytes en memoria y registros
Son posibles los dos convenios de ordenación big-endian (Motorola, HP,
Sun) y little-endian (Intel). En adelante utilizaremos little-endian, debido a
que el simulador utilizado en prácticas (SPIM), se ejecutará en
plataformas Intel.
31 0
 Registros de la CPU
32 registros de propósito general.
0000 0000 0000 0000 0000 0000 0000 0000 $0
Aunque el hardware no condiciona el uso ---- ---- ---- ---- ---- ---- ---- ---- $1
de los registros, más adelante se indicarán
ciertas normas de uso seguidas por los
...
compiladores (recomendables en LE). ---- ---- ---- ---- ---- ---- ---- ----
$31
El registro $0 tiene cableado el valor
cero y no puede modificarse. byte
Los operandos de todas las instrucciones
media-palabra
que procesan datos, están en registros.
Los registros Hi y Lo se verán más tarde. palabra

Visión de los registros y la memoria (y 3)


 Memoria
El espacio de memoria principal es de 232 bytes (4.3 GB) ó 230 palabras.
El contador de programa (PC) es de 32 bits.
Es posible trabajar con valores de 8,16 ó 32 bits. Un valor está alineado,
si su dirección de memoria es un múltiplo de su tamaño en bytes, es decir,
una media-palabra alineada está en direcciones pares y una palabra
alineada en direcciones múltiplos de 4. Es posible (aunque no
recomendable) trabajar con valores no alineados.
palabra

byte + -3 + -2 + -1 + -0 0
media-palabra + 7 -6 + 5 -4 1
palabra + 11 10 9 -8 2
15 14 13 12 3

232 –1 232 –2 232 –3 232 –4 230 -1


Introducción al repertorio de instrucciones
 Tipos de instrucciones
Existen varios tipos o categorías de instrucciones:
– Aritmético-lógicas
Operan el contenido de dos registros fuente y depositan el resultado en
un tercer registro destino. Existen variantes que permiten operar con
valores constantes o inmediatos.
P.e. add, sub, addi, and, or, xor, etc.
– Carga-almacenamiento
Intercambian datos entre la memoria y los registros.
P.e. lw, sw, lb, sb, etc.
– Test o comparación
Sirven para comparar datos.
P.e. slt y slti, comprobar "si menor que"
– Saltos y bifurcaciones
Permiten cambiar el flujo de ejecución en los programas. Pueden ser
instrucciones de salto incondicional, de salto condicional o llamadas a
subrutinas (estas últimas no se verán durante este curso).
P.e. beq, bne, j, jal, etc.
– Otras de diversos tipos que no entran en las anteriores

Formatos de instrucción (1)


 Tipo R (registro-registro)

Instrucciones aritmético-lógicas con todos los operandos en registros.

op rs rt rd shamt funct rd ← rs funct rt


6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

op: código de operación


rs: primer registro operando fuente
rt: segundo registro operando fuente
rd: registro operando destino
shamt: cantidad de desplazamiento en operaciones lógicas
funct: función, indica la operación aritmética o lógica a realizar

add $8,$9,$10
sub $3,$5,$7
sll $2,$2,2
Formatos de instrucción (2)
 Tipo I (registro-memoria/inmediato)

Instrucciones aritmético-lógicas con un operando inmediato, de carga o


almacenamiento, y saltos condicionales.

op rs rt inm/desp rt ← rs op inm
6 bits 5 bits 5 bits 16 bits rt ← M[rs+desp]
M[rs+desp] ← rt
op: código de operación PC ← PC + desp
rs: primer registro operando fuente
rt: segundo registro operando fuente
inm/desp: constante 16 bits en Ca2 que indica el valor
inmediato o el desplazamiento

addi $8,$9,100
lw $3,100($5)
bne $2,$3,exit

Formatos de instrucción (y 3)
 Tipo J

Utilizado en saltos incondicionales y llamadas a subrutinas.

op dirección
6 bits 26 bits PC ← PC and 0xF0000000
PC ← PC or (dirección*4)

op: código de operación


dirección: constante de 26 bits sin signo

j 10000
jal 15000
Codificación de las instrucciones (1)
 Tipo R

Instrucción CO shamt funct


add 0 0 0x20
and 0 0 0x24
div 0 0 0x1a
mult 0 0 0x18
nor 0 0 0x27
or 0 0 0x25
slt 0 0 0x2a
sub 0 0 0x22
xor 0 0 0x26
sll 0 despl 0x00
srl 0 despl 0x02

Codificación de las instrucciones (2)


 Tipo I

Instrucción CO
addi 8
andi 0xC
beq 4
bne 5
lw 0x23
lui 0xF
ori 0xD
sw 0x2B
xori 0xE
Codificación de las instrucciones (3)
 Tipo J

Instrucción CO
j 2
jal 3

Codificación de las instrucciones (y 4)


 Ejemplos

op rs rt rd shamt funct
0 9 10 8 0 32 add $8,$9,$10

8 9 8 123 addi $8,$9,123

35 9 8 100 lw $8,100($9)

2 10000 j 10000
Modos de direccionamiento (1)
 Modo registro
El operando está en un registro indicado en la instrucción.
P.e. add $8,$9,$10 $8 ← $9 + $10
 Modo inmediato
Permite operar con datos constantes de 16 bits:
Enteros: (extensión de signo del inmediato a 32 bits):
P.e. addi $8,$9,3 $8 ← $9 + (+3)
Ext. signo a 32 bits de +3: 0000 0000 0000 0000 0000 0000 0000 0011
addi $8,$9,-3 $8 ← $9 + (-3)
Ext. signo a 32 bits de -3: 1111 1111 1111 1111 1111 1111 1111 1101
Naturales: (extensión con ceros del inmediato a 32 bits)
P.e. addu $10,$12,3 $10 ← $12 + 3
addu $10,$12,0xFFFF $10 ← $12 + 0xFFFF
Dos instrucciones son necesarias para cargar constantes de más de 16
bits. La primera (lui) carga la media-palabra superior; la segunda
especifica la media-palabra inferior.
P.e. lui $10,0x1234
addu $10,$10,0x5678 $10 ← 0x12345678

Modos de direccionamiento (2)


 Modo base más desplazamiento (relativo a la base)

Se calcula la dirección del operando, sumando el contenido de un registro


especificado en la instrucción, con un valor inmediato de 16 bits
(extendido en signo a 32 bits).

dirección efectiva (EA) = Ext. signo (inmediato 16) + registro

P.e.
lui $10,0x0010 $10 ← 0x00102000 ($10 puntero)
addu $10,$10,0x2000
...
lw $8,4($10)
addi $8,$8,5 vector[1] ← vector[1] + 5
sw $8,4($10)
Modos de direccionamiento (3)
5 16
 Modo base más desplazamiento (cont.) 10 +4

elem.
vector ext(+4)
$10 → 0x00102000 -1 0 0x00102000
+
0x00102004 23 1
0x00102004
0x00102008 -87922 2
32 bits
0x00102012 59727 3

elem.
vector
$10 → 0x00102000 -1 0
0x00102004 28 1
0x00102008 -87922 2
0x00102012 59727 3

Modos de direccionamiento (4)


 Modo directo o absoluto
Basado en el anterior, pero utilizando $0 (que siempre vale 0)
P.e. lw $8,1000($0) a ← a + 27
addi $8,$8,27
sw $8,1000($0)
Limitado, ya que el valor inmediato es de 16 bits con signo, luego, para no
obtener direcciones negativas: 0 > inmediato> 215
Podemos acceder a datos en los primeros 32 KB de memoria.
 Modo indirecto
Igualmente basado en el modo base más desplazamiento, utilizando como
valor inmediato 0.
P.e. ...
lw $8,0($10) a ← a + $11
add $8,$8,$11
sw $8,0($10)

$10 → 124762 a 1020 $11 ⇒ $10 → 125782 a


Modos de direccionamiento (5)
 Modo relativo al PC

Utilizado en saltos condicionales, la dirección destino del salto es la suma


del contador de programa PC, incrementado para apuntar a la siguiente
instrucción, más un valor inmediato.

Este valor inmediato es de 16 bits con signo y se considera dirección


relativa a palabra y no a byte. Esto lleva consigo que se puede saltar
215 -1 instrucciones (no bytes) hacia delante y 215 hacia atrás.

Antes de sumar se extiende en signo a 32 bits.

PC = (PC + 4) + Ext.signo (desplazamiento*4)

Modos de direccionamiento (6)


palabra
 Modo relativo al PC (cont.)
PC → bne $8,$21,exit 100
P.e.
bne $8,$21,exit PC + 4 add... 104
≠$21) entonces PC ← 112
si ($8≠ PC + 8 sw... 108
PC + 12 exit: lw... 112

16
+2

ext(+2) 100 PC
* 4 + 4
8
+ 104

PC ← 112
Modos de direccionamiento (7)
 Modo salto absoluto
Un valor inmediato de 26 bits, es utilizado para calcular la dirección de
destino, en instrucciones de salto incondicional.
Para realizar el salto absoluto hacen falta 32 bits, y en la instrucción sólo
disponemos de 26 bits.
Para solventar el problema se opera de la siguiente manera, el inmediato
es una dirección de palabra (igual que en el modo relativo a PC) y el
resultado obtenido reemplaza sólo los 28 bits inferiores del PC.

P.e. j 10000
32 6 26
xxxx xxxxxxxxxxxx op 10000
4 bits (31-28) ← 2 bits
PC = xxxx 10000 00
4 26 2

Modos de direccionamiento (y 8)
 Modo salto absoluto (cont.)
Esta extraña solución, provoca que el espacio de direcciones de 232 se
divida en 16 partes de 256 MB cada una, y no se puede saltar de una a
otra.
El compilador/programador de bajo nivel puede solucionarlo utilizando el
salto absoluto por registro jr, donde se carga en el CP el valor de un
registro, previamente cargado con una dirección de 32 bits.

0 0

15 232 -1
Sintaxis del lenguaje ensamblador de MIPS
En LE cada sentencia está escrita en una línea, compuesta por una serie
de campos separados por símbolos.
.data
Campo de comentario:
f: .word 0
Ayudan al entender el programa. No hay que
... comentar cosas obvias, y sí, la función de
.text algunos grupos de instrucciones o secciones
... del programa.
# f=(g+h)-(i+j)
Campo de operandos:
# g,h,i,j asignadas previamente a $s0..$s3 Indica los operandos del
calculo: campo de operación.
add $t0,$s0,$s1
add $t1,$s2,$s3
sub $t2,$t0,$t1 # $t2=(g+h)-(i+j)
Campo de operación:
sw $t2,f($gp) Obligatorio, contiene un símbolo
Campo de etiqueta: (nemónico) de instrucción, una
Opcional, identifica la línea, y directiva (orden) del LE, o una
puede ser utilizada como pseudoinstrucción (instrucción del
referencia en saltos, acceso a LE no existente en LM).
variables, etc.

Resumen (1)
 Introducción a la arquitectura MIPS
Arquitectura RISC de 32 bits de tipo load/store. Incorpora FPU de 32 bits
coma flotante, simple y doble precisión IEEE754.

 CISC vs RISC

 Visión de los registros y la memoria


32 registros de propósito general $0..$31, $0 valor fijo 0 (cableado), 2
registros especiales Hi y Lo para operaciones de multiplicación y división.
32 registros coma flotante de propósito general $f0..$f31.
Registro PC de 32 bits, espacio de memoria direccionable 232 bytes, datos
de 8,16,32 bits.

 Tipos de instrucciones
Aritmético-lógicas: add, sub, addi, and, or, xor, etc.
Carga/almacenamiento: lw, sw, etc.
Saltos, test: beq, bne, j, jal, slt, etc.
Resumen (y 2)
 Formatos de instrucción
Tipo R: registro-registro (aritmético-lógicas)
Tipo I: registro-memoria/inmediato
Tipo J: salto incondicional

 Codificación de las instrucciones

 Modos de direccionamiento
– Modo registro: operando en registro
– Modo inmediato: operando inmediato
– Modo base más desplazamiento: operando en memoria.
Con base $0, se obtiene modo directo, y con desplazamiento 0
modo indirecto.
– Modo relativo al PC
– Modo salto absoluto

 Sintaxis del lenguaje ensamblador de MIPS

También podría gustarte