You are on page 1of 43

Instrucciones

El lenguaje de las computadoras

Recuerde

El conocimiento del HW, mejora la calidad del Software:

Tendencias importantes:

Compiladores, SO, programas multihilos, manejo de memoria


ms transistores, nos movemos a multi-core, baja tasa en el mejoramiento del rendimiento,
debido a las restricciones power/thermal, alta latencia en memoria y disco,

Razonando sobre el rendimiento:

velocidad del reloj, CPI, suite de benchmark y algunas ecuaciones sobre rendimiento

ISA: Instruction Set Architecture

Entender el lenguaje del HW, es importante para entender la interfaz HW/SW


Un programa, por ejemplo en c, es compilado en un ejecutable que est
compuesto de instrucciones mquina

Este ejecutable se puede ejecutar en otras computadoras


Por ejemplo: Todos los procesadores Intel, leen estas instrucciones de la misma manera: x86
Pero: Cada procesador Intel maneja las instrucciones de forma diferente

Arquitectura vs Organizacin

Los programas JAVA son convertidos en bytecode portable qu es convertido


en instrucciones mquina durante la ejecucin (compilacin just-in-time)

ISA: Instruction Set Architecture


Principios importantes al definir la ISA

Mantener el HW simple: En el chip solo se debe implementar primitivas


bsicas para mantenerlo rpido
Mantener las instrucciones regulares: Simplificar la decodificacin y
planificacin de instrucciones

ISA: Misma arquitectura, misma organizacin

ISA: Algunas Organizaciones

Arquitectura MIPS

Usada como ejemplo a lo largo del curso


Las ISA son como dialectos de un mismo lenguaje: Si sabes una, tambin
puedes entender las dems
Desarrollada en la Universidad de Standford como una Arquitectura
innovadora en los aos 80s (www.mips.com)
Ampliamente usada hoy en da

Una instruccin MIPS bsica


Cdigo C: a = b + c;
Cdigo ensamblador: (instrucciones maquina amigables con el humano)
add a, b, c

# a es la suma de b y c

Cdigo mquina: (instrucciones maquina amigables con el hardware)


00000010001100100100000000100000
Ejercicio: Traslade el siguiente cdigo en C, a ensamblador:
a = b + c + d + e;

Operaciones aritmticas: a = b + c + d + e;

add a, b, c

add a, b, c

add a, a, d

add f, d, e

add a, a, e

add a, a, f

Las instrucciones son simples: Nmero fijo de operandos (diferente a C)


Una sola lnea de cdigo en C ( o en cualquier otro lenguaje) es convertida a
mltiples lneas de cdigo ensamblador
Algunas secuencias pueden ser mejor que otras. la segunda secuencia
necesita una variable (temporal) adicional: f

Operaciones aritmticas: Resta f = (g + h) - (i + j)

add t0, g, h

add f, g, h

add t1, i, j

sub f, f, i

sub f, t0, t1

sub f, f, j

Pueden darse diferentes versiones: quizs algunas son mejores que otras

Operandos y Registros

En C, cada variable corresponde con una ubicacin de memoria


En el HW, cada acceso a memoria es caro: Si una misma variable es usada
varias veces, conviene tenerla directamente en el procesador y operarla
directamente ( en Registros)
Para simplificar las instrucciones, se requiere que cada instruccin (add, sub)
solo opere con registros

El nmero de operandos (variables) en un lenguaje de alto nivel puede ser


muy extenso; pero el nmero de operandos en el ensamblador MIPS es fijo

Registros

La ISA MIPS tiene 32 registros (x86 solo tiene 8 registros)

Numerados 0 a 31
Por qu no ms? o menos?
Una cuestin de diseo: mantener el HW simple, pero ms rpido

Cada registro es de 32bits ( en las arquitecturas recientes de 64 bits, los


registros son de 64 bits) tamao de palabra
Para hacer el cdigo ms legible, los registros son particionados como

$s0 - Ss7 (variables C/java), $t0-t9 ( variables temporales), ...

Palabra

Una entidad de 32bit (4 bytes) es denominada palabra


MIPS puede direccionar 230 palabras de memoria a nivel de byte: M[0],M[4],
, M[4294967292] direccionadas en saltos de 4, accedidas solo por
instrucciones de transferencia

Ejemplo con Registros como Operandos

Cdigo C
f = (g + h) - (i + j);

Cdigo MIPS compilado:

f, , j $s0, , $s4

add $t0, $s1, $s2


add $t1, $s3, $s4
sub $s0, $t0, $t1

Acceso a Memoria

Los datos (y programas) residen en Memoria principal como


representaciones numricas

Arrays, Structures, datos dinmicos,

Entonces, para operarlos, es necesario:

Traer los datos de la memoria principal a los registros para operarlos


Trasladar los resultados en los registros a la memoria principal

Acceso a Memoria

La Memoria Principal es direccionable a nivel de byte

cada direccin identifica un byte de 8 bits

Las palabras (32 bits o 4 byte) estn alineadas en la memoria

La direccin de palabra va en mltiplos de 4


MIPS es Big Endian
El byte ms significativo, tiene la menor direccin

Tarea: Investigar Little endian, y compararlo con Big Endian

Acceso a Memoria

Los datos son transferidos usando instrucciones de transferencia

$s1 es el registro que recibe (en lw) los datos y luego devuelve (en sw)
$s2 contiene la direccin base de memoria
100 es llamado desplazamiento
$s2+100 es una direccin de memoria

Acceso a Memoria: Ejemplo


Cdigo C
g = h + A[8];
Compilando a cdigo MIPS:
g $s1, h $s2, direccin base de A en $s3
Un ndice de 8 requiere desplazamiento de 32 (8x4)
lw $t0, 32($s3)
add $s1, $s2, $t0

# load

Acceso a Memoria: Ejemplo # 2


Cdigo C
A[12] = h + A[8];
Compilando a cdigo MIPS:
lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)

# load

Registros vs Memoria
El acceso a registros es mucho ms rpido que el acceso
a memoria
Operaciones en memoria requieren lw y sw
Los compiladores usan los registros como sea posible
el acceso a memoria es solo para valores menos
usados
La optimizacin de registros es importante

Operandos Inmediatos
Instrucciones para la especificacin de constantes
addi $s3, $s3, 4

# $s3 $s3 + 4

No hay un equivalente para negativos


addi $s3, $s3, -4

# $s3 $s3 - 4

El uso de O. inmediatos, elimina la necesidad de lw


(al menos al operar con constantes)

La constante Zero
El registro MIPS 0 ($zero) es la constante 0
No puede ser sobreescrita
Usada para operaciones comunes
Por ejemplo, para mover un valor de un registro a otro
add $t2, $s1, $zero

# $t2 $s1

Pero, Cmo se representan numricamente


Los datos e instrucciones son representados numricamente
En base 2 dgitos binarios
El valor de un nmero en cualquier base se puede obtener
d x Basei
ejemplo:

Base 2
Base no natural para los humanos
Pero, si una base natural para las computadoras: ON / OFF
Puede darse Overflow
debe ser manejado por Lenguajes de programacin, SO,
Varias formas de representar los nmeros con signo
Signo y magnitud
Complemento a 2
Complemento a 1
Notacin Biased

Complemento a 2

Por su facilidad con el HW, prcticamente es la ms usada hoy


en da en todas las computadoras
Si empieza con 0s, representa nmero positivo
Si empieza con 1s, representa nmeros negativos

Complemento a 2

El HW solo necesita revisar el bit de signo

Si es 0, es positivo
Si es 1, es negativo

Complemento a 2: Forma prctica

Partiendo de su representacin equivalente positiva


Invertir todos los 1s por 0s y viceversa
Sumarle 1

Tambin funciona igual de negativo a positivo


Si posee menos bit, slo se completan los ms significativos

Ejercicio
Cul es el valor decimal de este binario de 64 bits en
complemento a dos?

Ahora s, Cmo se representan las instrucciones?


En MIPS:
Registros $s0 a $s7 corresponden a los registros 16 a 23
Registros $t0 a $t7 corresponden a los registros 8 a 15
En total MIPS tiene 32 registros.
MIPS necesita 5 bits para identificar los registros en una
instruccin
Las instrucciones tienen un formato particular

Tarea: Y los otros registros para qu sirven?

Formato de Instrucciones MIPS


para la instruccin:
la representacin decimal es:

y la representacin binaria es:

Cada segmento se denomina campo

Formato de Instrucciones MIPS

Las instrucciones MIPS, toman exactamente 32 bits


En lenguaje ensamblador corresponde con mnemotcnicos
En lenguaje mquina, es un conjunto de 32 1s y 0s
Una secuencia de instrucciones es l.m. es cdigo mquina
Se puede usar base 16, para mayor facilidad:

Ejercicio: Hexadecimal
Convierta las siguientes representaciones a su otra base:
eca8 642016 X2
0001 0011 0101 0111 1001 1011 1101 11112 X16

Tipos de Instrucciones MIPS


R-type: Para registros
I-Type: Para Inmediate y operaciones de memoria
Principio de diseo 3: Un buen diseo, demanda buenos compromisos

El compromiso es mantener el formato de instrucciones lo ms


comn posible. MIPS agrega el I-Type, debido a la especificacin
de constantes como campos. Si solo usara R-Type, el valor mximo
de constante sera 26 de 0 a 63

Tipos de Instrucciones MIPS R-Type


Formato para la operacin con registros

Donde:

op: Llamado opCode, Tipo de operacin bsica a realizar


rs: El primer registro operando
rt: el segundo registro operando
rd: El registro donde se escribir el resultado
Shamt: Shift amount. No usado por ahora
funct: Fuction code: Especifica la variante del opCode

Tipos de Instrucciones MIPS I-Type


Formato para las operaciones inmediate /transferencia de datos

Donde:

op: Llamado opCode, Tipo de operacin bsica a realizar


rs: El primer y nico registro operando
rt: es usado como el registro donde se escribir el resultado
16 bits para especificar una constante o direccin de memoria
Se trata de mantener la equivalencia de formatos entre ambas

Tipos de Instrucciones MIPS entendiedo R/I-Type


A continuacin se presenta el mapeo del formato de
instrucciones

Tipos de Instrucciones MIPS entendiedo R/I-Type


Cdigo C:
Ensamblador MIPS:

Representacin mquina (decimal)

Representacin mquina (binaria)

Tipos de Instrucciones MIPS entendiedo R/I-Type

The BIG picture: Programa almacenado


Las computadoras de hoy en da, son construidas en base a 2
principios:
Las instrucciones son representadas
numricamente
Programas son almacenados en memoria
(como datos)

A qu instruccin MIPS corresponde?

A.
B.
C.
D.

sub $t0, $t1, $t2


add $t2, $t0, $t1
sub $t2, $t1, $t0
sub $t2, $t0, $t1

Asignacin 2.6 a 2.11

2.12 Traslation and Startup

You might also like