Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

14
Arquitectura de Arquitectura de Computadores I Computadores I Ejemplo: El conjunto de instrucciones en el MIPS

Transcript of Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Page 1: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Arquitectura de Arquitectura de Computadores IComputadores I

Ejemplo: El conjunto de instrucciones en el MIPS

Page 2: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Ejemplo: El conjunto de Ejemplo: El conjunto de instrucciones en el MIPSinstrucciones en el MIPS

• Introducción.

• Instrucciones aritméticas.

• Operandos: Registros y localidades de memoria.

• Lenguaje de máquina: Representación de las instrucciones en el computador.

• Instrucciones de decisión.

Page 3: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

IntroducciónIntroducción

Page 4: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

IntroducciónIntroducción

• Instrucciones – conjunto de instrucciones.

• Los diferentes conjuntos de instrucciones se parecen entre si.

• La simplicidad en el diseño es uno de los objetivos de un desarrollador cuando escoge el conjunto de instrucciones.

• Estudio del conjunto de instrucciones del MIPS. Usado por NEC, Nintendo, Silicon Graphics & Sony, entre otros.

Page 5: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Operaciones aritméticasOperaciones aritméticas

“Deben existir instrucciones para realizar operaciones aritméticas fundamentales”.

Principio de diseño 1Principio de diseño 1: La simplicidad : La simplicidad favorece la regularidad.favorece la regularidad.

Page 6: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Operaciones aritméticasOperaciones aritméticas

Ejemplo:

A continuación se muestran 2 segmentos de código escritos en C para un programa particular.

Asumiendo que las variables a, b, c, ... i, j existen dentro de sus respectivos entornos, ¿ cual sería el código MIPS que el compilador generaría para cada segmento ?

// Segmento 1:

a = b + c;

d = a – e;

// Segmento 2:

f = ( g + h ) – ( i + j );

Page 7: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Operandos para las Operandos para las instrucciones.instrucciones.

• Las variables en un lenguaje de alto nivel tienen su contraparte en el mundo del lenguaje de máquina. Se trata de los registros.

• Un registro es una localidad especial ubicada en la unidad de procesamiento.

• El tamaño de los registros en MIPS es de 32 bits. Así mismo, MIPS posee un total de 32 registros.

• El compilador se encarga de hacer desbordamiento de variables para compensar la cantidad de registros.

“ “ Principio de diseño 2:Principio de diseño 2: Generalmente los Generalmente los diseños pequeños son más veloces. ”diseños pequeños son más veloces. ”

Page 8: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Operandos para las Operandos para las instrucciones.instrucciones.

• La convención usada en MIPS es nombrar los registros con dos caracteres, precedidos por el carácter $. Ej: $s0, $s1, $t0, $t1. *

• Las operaciones aritméticas ocurren solo entre registros de MIPS, por lo tanto deben existir instrucciones para transferir datos entre los registros y la memoria del sistema. Las dos instrucciones que usa MIPS para tales transferencias es lw y sw. **

• Por el tamaño de las palabrasen MIPS, se deben considerar dos conceptos: La restricción de alineamiento y el formato Big Endian para el almacenamiento de los bytes individuales en memoria.

Page 9: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Operandos para las Operandos para las instrucciones.instrucciones.

Ejemplo:Ejemplo:

Compile el siguiente par de segmentos de código y genere el código equivalente para MIPS. Use la notación $s0, $s1, ... para representar las variables en el programa y $t0, $t1 .... para representar los elementos de tipo temporal. Asuma que la dirección base del arreglo A está almacenada en el registro $s3.// Segmento 1:

A[12] = h + A[8];

// Segmento 2:

g = h + A[i];

Page 10: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Representación binaria Representación binaria de las instrucciones.de las instrucciones.

          Dirección

Instrucción Formato op rs rt rd shamt function

add R 0 reg reg reg 0 32

sub R 0 reg reg reg 0 34

lw I 35 reg reg Address

sw I 43 reg Reg Address

Page 11: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Representación binaria Representación binaria de las instruccionesde las instrucciones

Ejemplo:Ejemplo:

Compile y ensamble la siguiente línea de código escrita en C para MIPS. Asuma que el registro $s0 almacena la dirección base del arreglo A, mientras que la variable h corresponde al registro $s2.

// Código en C:

A[300] += h;

Page 12: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Instrucciones para la Instrucciones para la toma de decisiones.toma de decisiones.

• Existen tres instrucciones en MIPS para controlar las estructuras de decisión y las repetitivas: beq, bne y slt.

• El formato para bne y beq es el siguiente:

bne reg,reg,etiqueta

beq reg,reg,etiqueta

• El formato para slt es:

slt reg,reg,reg

Page 13: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Instrucciones para la Instrucciones para la toma de decisiones.toma de decisiones.

Ejemplo:Ejemplo:

Usando las instrucciones de decisión vistas, compile los siguientes bloques de código escrito en C. Asuma que el registro base del arreglo A es $s0. Las variables f, g, h, i y j corresponden a los registros $s1, $s2, $s3, $s4 y $s5, respectivamente.

Page 14: Arquitectura de Computadores I Ejemplo: El conjunto de instrucciones en el MIPS.

Instrucciones para la Instrucciones para la toma de decisiones.toma de decisiones.

// Segmento 1:

if (i==j) f = g + h;

else f = g – h;

// Segmento 2:

Loop:

f = f + g;

g = g + 1;

if(g!=h)go to Loop;

// Segmengto 3:

while (A[j] == k)

f = f + g;