Post on 08-Jul-2018
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
1/43
Instrucciones
El lenguaje de las computadoras
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
2/43
Recuerde
● El conocimiento del HW, mejora la calidad del Software:
○ Compiladores, SO, programas multihilos, manejo de memoria
● Tendencias importantes:
○ más transistores, nos movemos a multi-core, baja tasa en el mejoramiento d
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 ren
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
3/43
ISA: Instruction Set Architecture● Entender el lenguaje del HW, es importante para entender la int
● Un programa, por ejemplo en c, es compilado en un ejecutable
compuesto de instrucciones máquina○ Este ejecutable se puede ejecutar en otras computadoras
○ Por ejemplo: Todos los procesadores Intel, leen estas instrucciones de la m
■ Pero: Cada procesador Intel maneja las instrucciones de forma diferen
Arquitectura vs Organización
● Los programas JAVA son convertidos en bytecode portable qué
en instrucciones máquina durante la ejecución (compilación ju
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
4/43
ISA: Instruction Set Architecture
Principios importantes al definir la ISA
● Mantener el HW simple: En el chip solo se debe implementar p
básicas para mantenerlo rápido
● Mantener las instrucciones regulares: Simplificar la decodific
planificación de instrucciones
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
5/43
ISA: Misma arquitectura, misma organizació
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
6/43
ISA: Algunas Organizaciones
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
7/43
Arquitectura MIPS
● Usada como ejemplo a lo largo del curso
● Las ISA son como dialectos de un mismo lenguaje: Si sabes unpuedes entender las demás
● Desarrollada en la Universidad de Standford como una Arquitec
innovadora en los años 80’s (www.mips.com)
● Ampliamente usada hoy en día
http://www.mips.com/http://www.mips.com/
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
8/43
Una instrucción MIPS básica
Código C: a = b + c;
Código ensamblador: (instrucciones maquina amigables con el hu
add a, b, c # a es la suma de b y c
Código máquina: (instrucciones maquina amigables con el hardwa
00000010001100100100000000100000
Ejercicio: Traslade el siguiente código en C, a ensamblador:
a = b + c + d + e;
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
9/43
Operaciones aritméticas: 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: Número fijo de operandos (difere
● Una sola línea de código en C ( o en cualquier otro lenguaje) esmúltiples líneas de código ensamblador
● Algunas secuencias pueden ser mejor que otras…. la segunda
necesita una variable (temporal) adicional: f
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
10/43
Operaciones aritméticas: 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: quizás algunas son mejores
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
11/43
Operandos y Registros
● En C, cada variable corresponde con una ubicación de memori
● En el HW, cada acceso a memoria es caro: Si una misma variabvarias veces, conviene tenerla directamente en el procesador y
directamente ( en Registros)
● Para simplificar las instrucciones, se requiere que cada instrucc
solo opere con registros
● El número de operandos (variables) en un lenguaje de alto nive
muy extenso; pero el número de operandos en el ensamblador
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
12/43
Registros
● La ISA MIPS tiene 32 registros (x86 solo tiene 8 registros)
○ Numerados 0 a 31○ ¿Por qué no más? ¿o menos?
■ Una cuestión de diseño: mantener el HW simple, pero más rápido
● Cada registro es de 32bits ( en las arquitecturas recientes de 64
registros son de 64 bits) → tamaño de palabra
● Para hacer el código más legible, los registros son particionados○ $s0 - Ss7 (variables C/java), $t0-t9 ( variables temporales), ...
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
13/43
Palabra
● Una entidad de 32bit (4 bytes) es denominada palabra
● MIPS puede direccionar 230 palabras de memoria a nivel de byte…, M[4294967292] direccionadas en saltos de 4, accedidas solo
instrucciones de transferencia
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
14/43
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
15/43
Ejemplo con Registros como Operandos
● Código C
f = (g + h) - (i + j);
● Código MIPS compilado:○ f, …, j → $s0, …, $s4
add $t0, $s1, $s2
add $t1, $s3, $s4
sub $s0, $t0, $t1
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
16/43
Acceso a Memoria
● Los datos (y programas) residen en Memoria principal como
representaciones numéricas○ Arrays, Structures, datos dinámicos, …
● 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
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
17/43
Acceso a Memoria
● La Memoria Principal es direccionable a nivel de byte
○ cada dirección identifica un byte de 8 bits● Las palabras (32 bits o 4 byte) están alineadas en la memoria
○ La dirección de palabra va en múltiplos de 4
○ MIPS es Big Endian
■ El byte más significativo, tiene la menor dirección
Tarea: Investigar Little endian, y compararlo con Big Endian
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
18/43
Acceso a Memoria
● Los datos son transferidos usando instrucciones de transferenci
● $s1 es el registro que recibe (en lw) los datos y luego devuelve
● $s2 contiene la dirección base de memoria
● 100 es llamado desplazamiento
● $s2+100 es una dirección de memoria
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
19/43
Acceso a Memoria: Ejemplo
● Código C
g = h + A[8];
● Compilando a código MIPS:
○ g → $s1, h → $s2, dirección base de A en $s
○ Un índice de 8 requiere desplazamiento de 3
lw $t0, 32($s3) # load
add $s1, $s2, $t0
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
20/43
Acceso a Memoria: Ejemplo # 2
● Código C
A[12] = h + A[8];
● Compilando a código MIPS:
lw $t0, 32($s3) # load
add $t0, $s2, $t0
sw $t0, 48($s3)
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
21/43
Registros vs Memoria
● El acceso a registros es mucho más rápido que
a memoria
● Operaciones en memoria requieren lw y sw
● Los compiladores usan los registros como sea p
○ el acceso a memoria es solo para valores m
usados
○ La optimización de registros es importante
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
22/43
Operandos Inmediatos
● Instrucciones para la especificación de constant
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
(al menos al operar con constantes)
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
23/43
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 regis
add $t2, $s1, $zero # $t2 ← $s1
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
24/43
Pero, ¿Cómo se representan numéricame
● Los datos e instrucciones son representados numér
○ En base 2 → dígitos binarios
○ El valor de un número en cualquier base se pued
d x Basei
○ ejemplo:
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
25/43
Base 2
● Base no natural para los humanos
● Pero, si una base natural para las computadoras: ON
● Puede darse Overflow
○ debe ser manejado por Lenguajes de programac
● Varias formas de representar los números con signo
○ Signo y magnitud○ Complemento a 2
○ Complemento a 1
○ Notación Biased
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
26/43
Complemento a 2
● Por su facilidad con el HW, prácticamente es la más
en día en todas las computadoras○ Si empieza con 0s, representa número positivo
○ Si empieza con 1s, representa números negativo
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
27/43
Complemento a 2
● El HW solo necesita revisar el bit de signo
● Si es 0, es positivo
● Si es 1, es negativo
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
28/43
Complemento a 2: Forma práctica
● Partiendo de su representación equivalente positiva
○ Invertir todos los 1s por 0s y viceversa○ Sumarle 1
● También funciona igual de negativo a positivo
● Si posee menos bit, sólo se completan los más sign
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
29/43
Ejercicio
● ¿Cuál es el valor decimal de este binario de 64 bits e
complemento a dos?
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
30/43
Ahora sí, ¿Cómo se representan las instrucc
● En MIPS:
○ Registros $s0 a $s7 corresponden a los registros○ Registros $t0 a $t7 corresponden a los registros
○ En total MIPS tiene 32 registros.
■ MIPS necesita 5 bits para identificar los regis
instrucción○ Las instrucciones tienen un formato particular
Tarea: Y los otros registros para qué sirven?
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
31/43
Formato de Instrucciones MIPS
● para la instrucción:
● la representación decimal es:
● y la representación binaria es:
Cada segmento se denomina campo
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
32/43
Formato de Instrucciones MIPS
● Las instrucciones MIPS, toman exactamente 32 bits
● En lenguaje ensamblador corresponde con mnem● En lenguaje máquina, es un conjunto de 32 1s y 0s
● Una secuencia de instrucciones es l.m. es código m
● Se puede usar base 16, para mayor facilidad:
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
33/43
Ejercicio: Hexadecimal
● Convierta las siguientes representaciones a su otra
eca8 642016
→ X2
0001 0011 0101 0111 1001 1011 1101 11112 → X
16
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
34/43
Tipos de Instrucciones MIPS
● R-type: Para registros
● I-Type: Para Inmediate y operaciones de memoria
Principio de diseño 3: Un buen diseño, demanda buenos c
El compromiso es mantener el formato de instrucciones
común posible. MIPS agrega el I-Type, debido a la espede constantes como campos. Si solo usara R-Type, el v
de constante sería 26 → de 0 a 63
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
35/43
Tipos de Instrucciones MIPS → R-Type
● Formato para la operación con registros
Donde:
● op: Llamado opCode, Tipo de operación básica a re
● 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 opCo
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
36/43
Tipos de Instrucciones MIPS → I-Type
● Formato para las operaciones inmediate /transferenc
Donde:
● op: Llamado opCode, Tipo de operación básica a re
● rs: El primer y único registro operando● rt: es usado como el registro donde se escribirá el re
● 16 bits para especificar una constante o dirección de
● Se trata de mantener la equivalencia de formatos en
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
37/43
Tipos de Instrucciones MIPS → entendiedo R
● A continuación se presenta el mapeo del formato de
instrucciones
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
38/43
Tipos de Instrucciones MIPS → entendiedo R
● Código C:
● Ensamblador MIPS:
● Representación máquina (decimal)
● Representación máquina (binaria)
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
39/43
Tipos de Instrucciones MIPS → entendiedo R
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
40/43
The BIG picture: Programa almacenado
Las computadoras de hoy en día, son construidas en ba
principios:● Las instrucciones son representadas
numéricamente
● Programas son almacenados en memoria
(como datos)
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
41/43
¿A qué instrucción MIPS corresponde?
A. sub $t0, $t1, $t2
B. add $t2, $t0, $t1
C. sub $t2, $t1, $t0
D. sub $t2, $t0, $t1
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
42/43
Asignación 2.6 a 2.11
8/19/2019 Instrucciones- El Lenguaje de Las Computadoras
43/43
2.12 Traslation and Startup