Practica 2 - Assembler MIPS

21
 Pr´ actica 2 - Assembler MIPS Organizaci´ on del Computador 1 Verano 2014 Se deber´ an resolver al menos los ejercicios: 3, 6, 7, 9, 17, 22, 25 de la prese nte gu ´ ıa. El resto de los ejercicios son opcionales. Ejercicio 1  Para cada una de las siguientes instrucciones expresadas en lenguaje  C a.  f = g - h; b.  f = g + (h - 5); y asumiendo que  f,  g,  h  e  i  representan a variables enteras de 32-bits declaradas previa- mente: i) T raducir a odigo  assembler  MIPS utilizando la cantidad m´ ınima de instrucciones ne- cesarias. ii) ¿Cu´ antas instrucciones de  assembler  MIPS fueron necesarias? iii) Si las v ariable s  f,  g ,  h  e  i  inicialmente poseen los valores  1 , 2, 3 y  4, respectivamente, ¿Cu´ al es el valor nal de  f? Para cada una de las siguientes instrucciones expresadas en lenguaje  assembler  MIPS a.  ad di f, f, 4 b.  add f, g, h add f, i, f i) T raducir a c´ odigo  C  utilizando la cantidad m´ ınima de instrucciones necesarias. ii) Si las v ariable s  f,  g ,  h  e  i  inicialmente poseen los valores  1 , 2, 3 y  4, respectivamente, ¿Cu´ al es el valor nal de  f? Ejercicio 2  Para cada una de las siguientes instrucciones expresadas en lenguaje  C a.  f = g - f; b.  f = i + (h - 2); y asumiendo que  f,  g,  h  e  i  representan a variables enteras de 32-bits declaradas previa- mente: i) T raducir a odigo  assembler  MIPS utilizando la cantidad m´ ınima de instrucciones ne- cesarias. ii) ¿Cu´ antas instrucciones de  assembler  MIPS fueron necesarias? iii) Si las v ariable s  f,  g,  h e  i  poseen los valores  1, 2, 3 y  4, respectivamente, ¿Cu´ al es el valor nal de  f? 1

description

Practica 2 - Assembler MIPS

Transcript of Practica 2 - Assembler MIPS

  • Practica 2 - Assembler MIPS

    Organizacion del Computador 1

    Verano 2014

    Se deberan resolver al menos los ejercicios: 3, 6, 7, 9, 17, 22, 25 de la presente gua. Elresto de los ejercicios son opcionales.

    Ejercicio 1 Para cada una de las siguientes instrucciones expresadas en lenguaje C

    a. f = g - h;

    b. f = g + (h - 5);

    y asumiendo que f, g, h e i representan a variables enteras de 32-bits declaradas previa-mente:

    i) Traducir a codigo assembler MIPS utilizando la cantidad mnima de instrucciones ne-cesarias.

    ii) Cuantas instrucciones de assembler MIPS fueron necesarias?

    iii) Si las variables f, g, h e i inicialmente poseen los valores 1, 2, 3 y 4, respectivamente,Cual es el valor final de f?

    Para cada una de las siguientes instrucciones expresadas en lenguaje assembler MIPS

    a. addi f, f, 4

    b. add f, g, hadd f, i, f

    i) Traducir a codigo C utilizando la cantidad mnima de instrucciones necesarias.

    ii) Si las variables f, g, h e i inicialmente poseen los valores 1, 2, 3 y 4, respectivamente,Cual es el valor final de f?

    Ejercicio 2 Para cada una de las siguientes instrucciones expresadas en lenguaje C

    a. f = g - f;

    b. f = i + (h - 2);

    y asumiendo que f, g, h e i representan a variables enteras de 32-bits declaradas previa-mente:

    i) Traducir a codigo assembler MIPS utilizando la cantidad mnima de instrucciones ne-cesarias.

    ii) Cuantas instrucciones de assembler MIPS fueron necesarias?

    iii) Si las variables f, g, h e i poseen los valores 1, 2, 3 y 4, respectivamente, Cual es elvalor final de f?

    1

  • Para cada una de las siguientes instrucciones expresadas en lenguaje assembler MIPS

    a. addi f, f, 4

    b. add f, g, hsub f, i, f

    i) Traducir a codigo C utilizando la cantidad mnima de instrucciones necesarias.

    ii) Si las variables f, g, h e i poseen los valores 1, 2, 3 y 4, respectivamente, Cual es elvalor final de f?

    Ejercicio 3 Para cada una de las siguientes instrucciones expresadas en lenguaje C

    a. f = - g - f;

    b. f = g + (-f -5);

    y asumiendo que f y g representan a variables enteras de 32-bits declaradas previamente:

    i) Traducir a codigo assembler MIPS utilizando la cantidad mnima de instrucciones ne-cesarias.

    ii) Cuantas instrucciones de assembler MIPS fueron necesarias?

    iii) Si las variables f y g poseen los valores 1 y 2, respectivamente, cual es el valor final def?

    Para cada una de las siguientes instrucciones expresadas en lenguaje assembler MIPS

    a. addi f, f, -4

    b. add i, g, hsub f, i, f

    i) Traducir a codigo C utilizando la cantidad mnima de instrucciones necesarias.

    ii) Si las variables f, g, h e i poseen los valores 1, 2, 3 y 4, respectivamente, Cual es elvalor final de f?

    Ejercicio 4 Para cada una de las siguientes instrucciones expresadas en lenguaje C

    a. f = - g - A[4];

    b. B[8] = A[i-j];

    asumiendo que las variables f, g, h, i y j son asignadas a los registros $s0, $s1, $s2, $s3y $s4, respectivamente, y que las direcciones iniciales de los vectores A y B se encuentran enlos registros $s6 y $s7, respectivamente:

    i) Traducir a codigo assembler MIPS utilizando la cantidad mnima de instrucciones ne-cesarias.

    ii) Cuantas instrucciones de assembler MIPS fueron necesarias?

    iii) Cuantas registros se necesitaron en cada caso?

    2

  • Para cada uno de los siguientes codigos en lenguaje assembler MIPS

    a. sll $s2, $s4, 1add $s0, $s2, $s3

    add $s0, $s0, $s1

    b. sll $t0, $s0, 2 # $t0 = f * 4add $t0, $s6, $t0 # $t0 = &A[f]

    sll $t1, $s1, 2 # $t1 = g * 4

    add $t1, $s7, $t1 # $t1 = &B[g]

    lw $s0, 0($t0) # $f = A[f]

    addi $t2, $t0, 4

    lw $t0, 0($t2)

    add $t0, $t0, $s0

    sw $t0, 0($t1)

    asumiendo que las variables f, g, h, i y j son asignadas a los registros $s0, $s1, $s2, $s3y $s4, respectivamente, y que las direcciones iniciales de los vectores A y B se encuentran enlos registros $s6 y $s7, respectivamente:

    i) Traducir a codigo C utilizando la cantidad mnima de instrucciones necesarias.

    Ejercicio 5 La tabla que se presenta a continuacion muestra los valores de un vector alma-cenado en memoria. Asuma que la direccion inicial del vector se guarda en el registro $s6.

    a. Direccion Dato20 4

    24 5

    28 3

    32 2

    36 1

    b. Direccion Dato24 2

    28 4

    32 3

    36 6

    40 1

    i) Escribir un programa en C que ordene los datos del vector de menor a mayor. Asumirque los datos de la tabla se encuentran almacenados en una variable de tipo int[ ]denominada Array. La maquina direcciona a byte y una palabra se encuentra compuestapor 4 bytes.

    ii) Escribir un programa en assembler MIPS que ordene los datos del vector de menor amayor utilizando la menor cantidad posible de instrucciones.

    iii) Cuantas instrucciones fueron necesarias en el caso del codigo assembler MIPS? Enel caso de no permitirse el uso del campo inmediato para las instrucciones lw y sw,Cuantas instrucciones seran necesarias para realizar el ordenamiento?

    Dado los siguientes numeros que se encuentran expresados en base hexadecimal

    a. 0xabcdef12

    b. 0x10203040

    3

  • i) Traducirlos a decimal.

    ii) Mostrar como se organizan los datos de la tabla en una maquina con un diseno little-endian. Y en una maquina big-endian? Asumir que los datos son almacenados a partirde la direccion de memoria 0.

    Ejercicio 6 Para cada una de las siguientes instrucciones expresadas en lenguaje C

    a. f = f + A[2];

    b. B[8] = A[i] + A[j];

    asumiendo que las variables f, g, h, i y j son asignadas a los registros $s0, $s1, $s2, $s3y $s4, respectivamente, y que las direcciones iniciales de los vectores A y B se encuentran enlos registros $s6 y $s7, respectivamente y que los elementos de los vectores son palabras de4-bytes:

    i) Traducir a codigo assembler MIPS utilizando la cantidad mnima de instrucciones ne-cesarias.

    ii) Cuantas instrucciones de assembler MIPS fueron necesarias?

    iii) Cuantos registros se necesitaron en cada caso?

    Para cada uno de los siguientes codigos en lenguaje assembler MIPS

    a. sub $s0, $s0, $s1sub $s0, $s0, $s3

    add $s0, $s0, $s1

    b. addi $t0, $s6, 4add $t1, $s6, $0

    sw $t1, 0($t0)

    lw $t0, 0($t0)

    add $s0, $t16, $t0

    asumiendo que las variables f, g, h, i y j son asignadas a los registros $s0, $s1, $s2, $s3y $s4, respectivamente, y que las direcciones iniciales de los vectores A y B se encuentran enlos registros $s6 y $s7, respectivamente:

    i) Traducir a codigo C utilizando la cantidad mnima de instrucciones necesarias.

    ii) Asumiendo que los registros $s0, $s1, $s2, y $s3 contienen los valores 0x0000000A,0x00000014, 0x0000001E y 0x00000028, respectivamente, $s6 contiene el valor 0x00000100,y la memoria contiene los siguientes valores:

    Direccion Valor

    0x00000100 0x00000064

    0x00000104 0x000000C8

    0x00000108 0x0000012C

    Que valor toma $s0 al final de la ejecucion del codigo assembler?

    iii) Para cada instruccion MIPS, mostrar su valor de opcode (OP), source register(RS) y target register (RT). Para cada instruccion de tipo I-type, mostrar el va-lor del inmediate field y para las instrucciones de tipo R-type mostrar el valor deldestination register (RD).

    4

  • Ejercicio 7 Dados:

    a. 0010 0100 1001 0010 0100 1001 0010 0100(2)b. 0101 1111 1011 1110 0100 0000 0000 0000(2)

    i) Que numero representa en base 10, asumiendo que es un entero complemento a 2?

    ii) Que numero representa en base 10, asumiendo que es un entero sin signo?

    iii) Que numero hexadecimal representa?

    Dados:

    a. -1(10)b. 1024(10)

    i) Representar en binario asumiendo complemento a 2.

    ii) Representar en hexadecimal asumiendo complemento a 2.

    Ejercicio 8 Dados:

    a. $s0 = 0x80000000(16) $s1 = 0xD0000000(16)b. $s0 = 0x00000001(16) $s1 = 0xFFFFFFFF(16)

    i) Que valor toma $t0 luego de ejecutar la siguiente instruccion assembler MIPS?

    add $t0, $s0, $s1

    $t0 contiene el resultado esperado o ha habido overflow?

    ii) Que valor toma $t0 luego de ejecutar la siguiente instruccion assembler MIPS?

    sub $t0, $s0, $s1

    $t0 contiene el resultado esperado o ha habido overflow?

    iii) Que valor toma $t0 luego de ejecutar las siguientes instrucciones assembler MIPS?

    add $t0, $s0, $s1 add $t0, $t0, $s0

    $t0 contiene el resultado esperado o ha habido overflow?

    Dadas las siguientes instrucciones en assembler MIPS:

    a. add $s0, $s0, $s1add $s0, $s0, $s1

    a. add $s0, $s0, $s1add $s0, $s0, $s1

    add $s0, $s0, $s1

    i) Asumiendo que $s0 = 0x70000000 y $s1 = 0x10000000, Se obtendra overflow?

    ii) Asumiendo que $s0 = 0x40000000 y $s1 = 0x20000000, Se obtendra overflow?

    iii) Asumiendo que $s0 = 0x8FFFFFFF y $s1 = 0xD0000000, Se obtendra overflow?

    5

  • Ejercicio 9 Para cada valor del registro $s1:

    a. -1(10)b. 1024(10)

    i) Asumiendo que el registro $s0 = 0x70000000, si la instruccion add $s0, $s0, $s1 esejecutada, Dara overflow?

    ii) Asumiendo que el registro $s0 = 0x80000000, si la instruccion sub $s0, $s0, $s1 esejecutada, Dara overflow?

    iii) Asumiendo que el registro $s0 = 0x7FFFFFFF, si la instruccion sub $s0, $s0, $s1 esejecutada, Dara overflow?

    Para cada valor del registro $s1:

    a. 0010 0100 1001 0010 0100 1001 0010 0100(2)b. 0101 1111 1011 1110 0100 0000 0000 0000(2)

    i) Asumiendo que el registro $s0 = 0x70000000, si la instruccion add $s0, $s0, $s1 esejecutada, Dara overflow?

    ii) Asumiendo que el registro $s0 = 0x70000000, si la instruccion add $s0, $s0, $s1 esejecutada, Cual es su resultado en hexadecimal?

    iii) Asumiendo que el registro $s0 = 0x70000000, si la instruccion add $s0, $s0, $s1 esejecutada, Cual es su resultado en decimal?

    Ejercicio 10 Para numero binario que se presenta a continuacion:

    a. 0000 0010 0001 0000 1000 0000 0010 0000(2)b. 0000 0001 0100 1011 0100 1000 0010 0010(2)

    i) Que instruccion MIPS representa?

    ii) En que formato esta codificada la instruccion (I-type, R-type, J-type)?

    iii) Si fueran bits de datos, Que numero hexadecimal representan?

    Para cada instruccion:

    a. addi $t0, $t0, 0

    b. sw $t1 32($t2)

    i) Mostrar el numero en hexadecimal que la respresenta.

    ii) En que formato esta codificada la instruccion (I-type, R-type, J-type)?

    iii) Cual es la representacion hexadecimal de los campos opcode, Rs y Rt? Para la instruc-cion R-type, Cual es la representacion hexadecimal de los campos Rd y funct? Parala instruccion I-type, Cual es la representacion del campo inmediato?

    Ejercicio 11 Dados:

    a. 01084020(16)b. 02538822(16)

    6

  • i) Que numero representa en base 2?

    ii) Que numero representa en base 10?

    iii) Que instruccion MIPS representa?

    Dados:

    a. op=0, rs=3, rt=2, rd=3, shamt=0, funct=34

    b. op=0x23, rs=1, rt=2, const=0x4

    i) En que formato esta codificada la instruccion (I-type, R-type)?

    ii) Que instruccion MIPS describe?

    iii) Cual es la representacion en base 2 de la instruccion que representa?

    Ejercicio 12 Dados:

    a. 128 registros

    b. 4 veces mas instrucciones

    i) Si el set de instrucciones del procesador MIPS fuera modificado, el formato de ins-truccion tambien debera ser modificado. Para cada cambio sugerido arriba, mostrar eltamano de los campos bits de una instruccion de formato R-type . Que cantidad debits se necesita para cada instruccion?

    ii) Si el set de instrucciones del procesador MIPS fuera modificado, el formato de ins-truccion tambien debera ser modificado. Para cada cambio sugerido arriba, mostrar eltamano de los campos bits de una instruccion de formato I-type . Que cantidad debits se necesita para cada instruccion?

    iii) Que instruccion MIPS representa?

    iv) Por que, el cambio sugerido en la tabla anterior, podra disminuir el tamano de unprograma en assembler MIPS?

    Dados:

    a. 01090012(16)b. AD090012(16)

    i) Que numero representa en base 10?

    ii) Que instruccion MIPS representa?

    iii) Que tipo de instruccion representa (I-type, R-type, J-type)? Cuales son los valoresde los campos op y rt?

    Ejercicio 13 Dados:

    a. $t0 = 0xAAAAAAAA, $t1 = 0x12345678

    b. $t0 = 0xF00DD00D, $t1 = 0x11111111

    7

  • i) Cual es el valor de $t2 luego de ejecutar las siguientes instrucciones?

    sll $t2, $t0, 44

    or $t2, $t2, $t1

    ii) Cual es el valor de $t2 luego de ejecutar las siguientes instrucciones?

    sll $t2, $t0, 4

    andi $t2, $t2, -1

    iii) Cual es el valor de $t2 luego de ejecutar las siguientes instrucciones?

    srl $t2, $t0, 3

    andi $t2, $t2, 0xFFEF

    Dados:

    a. sll $t2, $t0, 1andi $t2, $t2, -1

    b. andi $t2, $t1, 0x00F0srl $t2, 2

    i) Asumiendo que $t0 = 0x0000A5A5 y $t1 = 00005A5A Cual es el valor de $t2 luegode ejecutar las instrucciones de la tabla?

    ii) Asumiendo que $t0 = 0xA5A50000 y $t1 = A5A50000 Cual es el valor de $t2 luegode ejecutar las instrucciones de la tabla?

    iii) Asumiendo que $t0 = 0xA5A5FFFF y $t1 = A5A5FFFF Cual es el valor de $t2 luegode ejecutar las instrucciones de la tabla?

    Ejercicio 14 Solo a efectos de mantener la numeracion sincronizada con el libro.

    Ejercicio 15 Dadas:

    a. not $t1, $t2 // invierte bit a bit

    b. orn $t1, $t2, $t3 // OR bit a bit de $t2, $t3

    i) Las instrucciones incluidas en la tabla no se encuentran incluidas en el set de instruccio-nes de assembler MIPS, pero en la misma tabla se adjunta una mnima descripcion delo que realizan. Dados los valores de $t2 = 0x00FFA5A5 y $t3 = 0xFFFF003C, Cuales valor de $t1 luego de ejecutar la instruccion?

    ii) La instrucciones incluidas en la tabla no se encuentran incluidas en el set de instruccionesde assembler MIPS, las mismas pueden ser recreadas utilizando una o mas instruccionesde assembler MIPS. Mostrar un conjunto mnimo de instrucciones MIPS que puedanrecrear las instrucciones de la tabla.

    iii) Para la secuencia de instrucciones del punto anterior, mostrar la representacion a nivelbit de cada instruccion.

    8

  • Dadas:

    a. A = B | !A;

    b. A = C[0]

  • ii) Cual es valor de $t2 luego de la ejecucion de las siguientes instrucciones?

    sll $t0, $t0, 2

    slt $t2, $t0, $0

    iii) Suponga que el program counter (PC) = 0x2000 0000. Es posible usar la instruccionjump (j) de assembler MIPS para asignarle al PC la direccion de la tabla? Es posibleutilizar el branch-on-equal (beq) de la instruccion assembler MIPS para asignarle alPC la direccion de la tabla? Prestar atencion al formato de las instrucciones J-type.

    Ejercicio 17 Dadas:

    a. subi $t2, $t3, 5 # R[rt] = R[rs] - SignExtImm

    b. rpt $t2, loop # if(R[rs]>0) R[rs]=R[rs]-1, PC=PC+4+BranchAddr

    i) La tabla contiene instrucciones que no se encuentran incluidas en el set de instruccionesde assembler MIPS y una descripcion de su funcionamiento. Por que estas instruccionesno han sido incluidas en el set de instrucciones MIPS?

    ii) Si estas instrucciones tuvieran que ser implementadas dentro del set de instruccionesMIPS, Cual sera el formato de instruccion mas apropiado?

    iii) Escribir la secuencia mas corta de instrucciones MIPS que ejecuten la instruccion.

    Dados:

    a. LOOP: addi $s2, $s2, 2subi $t1, $t1, 1

    bne $t1, $0, LOOP

    DONE:

    b. LOOP: slt $t2, $0, $t1beq $t2, $0, DONE

    subi $t1, $t1, 1

    addi $s2, $s2, 2

    DONE:

    i) Cual es el valor de $s2, asumiendo que inicialmente $s2=0 y $t1=10?

    ii) Escribir una rutina equivalente en C. Asumir que los registros $s1, $s2, $t1, y $t2 sonrepresentados por los enteros A, B, i y temp, respectivamente.

    iii) Asumiendo que incialmente $t1=N, Cuantas instrucciones MIPS son ejecutadas?

    Ejercicio 18 Dados:

    a. for(i=0; i

  • iii) Cuantas instrucciones MIPS toma implementar el codigo C? Si las variables a y b soninicializadas en 10 y 1 respectivamente y todos los elementos de D son inicializados en0, Cuantas instrucciones MIPS son ejecutadas al finalizar el ciclo?

    Dados:

    a. addi $t1, $0, 50LOOP: lw $s1, 0($s1)

    add $s1, $s2, $s1

    lw $s1, 4($s0)

    add $s1, $s2, $s1

    addi $s0, $s0, 8

    subi $t1, $t1, 1

    bne $t1, $0, LOOP

    b. addi $t1, $0, $0LOOP: lw $s1, 0($s0)

    add $s2, $s2, $s1

    addi $s0, $s0, 4

    addi $t1, $t1, 1

    slti $t2, $t1, 100

    bne $t2, $s0, LOOP

    i) Cuantas instrucciones MIPS se ejecutan?

    ii) Escribir una rutina equivalente en C. Asumir que los registros $t1, $s2 y $s0 sonrepresentados por los enteros i, result y la direccion inicial del vector MemArray, res-pectivamente.

    iii) Rescribir el ciclo para reducir la cantidad de instrucciones MIPS ejecutadas.

    Ejercicio 19 Dados:

    a. int fib(int n){if (n==0)

    return 0;

    else if (n==1)

    return 1;

    else

    fib(n-1) + fib(n-2);

    }b. int positive(int a, int b){

    if (addit(a, b) >0)

    return 1;

    else

    return 0;

    }

    int addit(int a, int b){return a+b;

    }

    11

  • Conservado No conservado

    Registros guardados: $s0-$s7 Registros temporales: $t0-$t9

    Registro stack pointer: $sp Registros de argumentos: $a0-$a3

    Registro de direccion de retorno: $ra Registros con valores de retorno: $v0-$v1

    Stack por encima de stack pointer Stack por debajo de stack pointer

    Cuadro 1: Que debe ser conservado y que no, en un llamado a procedimiento. Si el softwarese basa en los registros frame pointer o global pointer, tambien deben ser conservados.(Tabla obtenida de la Figura 2.11 del libro)

    Nombre Numero de registro Uso Conservado en la llamada?

    $zero 0 Valor constante cero n.a.

    $v0-$v1 2-3 Valores para resultados y noevaluacion de expresiones

    $a0-$a3 4-7 Argumentos no

    $t0-$t7 8-15 Temporales no

    $s0-$s7 16-23 Guardados si

    $t8-$t9 24-25 Mas temporales no

    $gp 28 Global Pointer si

    $sp 29 Stack Pointer si

    $fp 30 Frame Pointer si

    $ra 31 Direccion de retorno si

    Cuadro 2: Convencion de uso de registros MIPS. El registro 1, llamado $at, es reservado parael ensamblador, y los registros 26-27, denominados $k0-$k1, son reservados para el sistemaoperativo. (Tabla obtenida de la Figura 2.14 del libro)

    i) Implementar el codigo C en assembler MIPS. Cuantas instrucciones MIPS son nece-sarias para ejecutar la funcion?

    ii) La funciones generalmente pueden ser implementadas por los compiladores in-line.Una funcion in-line es cuando el cuerpo de la funcion es copiado dentro del espaciode programa, eliminando la sobrecarga por la llamada a la funcion. Implementar enassembler MIPS una version in-line del codigo C. Cual es la reduccion en cantidadde instrucciones MIPS necesarias para ejecutar la funcion? Asumir que la variable n seinicializa en 5.

    iii) Para cada llamada a funcion, mostrar el contenido del stack luego de que la llamadasea hecha. Asumir que el stack pointer se encuentra originalmente en la direccion0x7FFFFFFC y sigue la convension de registros especificada en el Cuadro 1.

    La funcion f llama a otra funcion: func, cuyo codigo C (de la funcion func) ya ha sido compi-lada en otro modulo usando la convencion de llamadas de MIPS del Cuadro 2. La declaracionde la funcion func es int func(int a, int b); El codigo de la funcion f se detalla a con-tinuacion:

    a. int f(int a, int b, int c, int d){return func(func(a,b),c+d);

    }b. int f(int a, int b, int c, int d){

    if(a+b>c+d)

    return func(a+b,c+d);

    return func(c+d,a+b);

    }

    12

  • i) Trasladar la funcion f a assembler MIPS, usando la convencion de llamadas MIPS delCuadro 2. Si necesita utilizar los registros $t0 a $t7, utilizar primero los de menornumeracion.

    ii) Puede utilizarse la optimizacion tail-call en esta funcion? Si la respuesta es no,justificar. Si la respuesta es s, Cual es la diferencia, en cantidad de instruccionesejecutadas en f, con y sin la optimizacion?

    iii) Justo antes de que la funcion f del punto previo retorne, Cual es el contenido de losregistros $t5, $s3, $ra y $sp?. Tener en mente que se conoce lo que hace la funcion f,pero de la funcion func solo se conoce su declaracion.

    Ejercicio 20 Sean:

    a. FACT: sw $ra, 4($sp)sw $a0, 0($sp)

    addi $sp, $sp, -8

    slti $t0, $a0, 1

    beq $t0, $0, L1

    addi $v0, $0, 1

    addi $sp, $sp, 8

    jr $ra

    L1: addi $a0, $a0, -1

    jal FACT

    addi $sp, $sp, 8

    lw $a0, 0($sp)

    lw $ra, 4($sp)

    mul $v0, $a0, $v0

    jr $ra

    b. FACT: addi $sp, $sp, 8sw $ra, 4($sp)

    sw $a0, 0($sp)

    add $s0, $0, $a0

    slti $t0, $a0, 2

    beq $t0, $0, L1

    mul $v0, $s0, $v0

    addi $sp, $sp, -8

    jr $ra

    L1: addi $a0, $a0, -1

    jal FACT

    addi $v0, $0, 1

    lw $a0, 0($sp)

    lw $ra, 4($sp)

    addi $sp, $sp, -8

    jr $ra

    i) Los programas (en assembler MIPS) de la tabla computan el factorial de un numerodado. Dicho numero es ingresado a traves del registro $a0, y el resultado es devuelto atraves del registro $v0. En ambos codigos hay errores. Corregirlos.

    ii) Asumir que para ambos programas recursivos, el valor de entrada es 4. Rescribir dichosprogramas para que funcionen de manera no recursiva. Restringir el uso de registrossolo a $s0-$s7. Cuantas instrucciones se ejecutan en la version recursiva? Y en la norecursiva?

    iii) Mostrar el contenido del stack despues de cada llamada a funcion, asumiendo que elvalor de entrada es 4.

    13

  • Sean:

    a. FIB: addi $sp, $sp, -12sw $ra, 0($sp)

    sw $s1, 4($sp)

    sw $a0, 8($sp)

    slti $t0, $a0, 1

    beq $t0, $0, L1

    addi $v0, $a0, $0

    j EXIT

    L1: addi $a0, $a0, -1

    jal FIB

    addi $s1, $v0, $0

    addi $a0, $a0, -1

    jal FIB

    add $v0, $v0, $s1

    EXIT: lw $ra, 0($sp)

    lw $a0, 8($sp)

    lw $s1, 4($sp)

    addi $sp, $sp, 12

    jr $ra

    b. FIB: addi $sp, $sp, -12sw $ra, 8($sp)

    sw $s1, 4($sp)

    sw $a0, 0($sp)

    slti $t0, $a0, 3

    beq $t0, $0, L1

    addi $v0, $0, 1

    j EXIT

    L1: addi $a0, $a0, -1

    jal FIB

    addi $a0, $a0, -2

    jal FIB

    add $v0, $v0, $s1

    EXIT: lw $a0, 0($sp)

    lw $s1, 4($sp)

    lw $ra, 8($sp)

    addi $sp, $sp, 12

    jr $ra

    i) Los programas (en assembler MIPS) de la tabla computan Fibonacci de un numerodado. Dicho numero es ingresado a traves del registro $a0, y el resultado es devuelto atraves del registro $v0. En ambos codigos hay errores. Corregirlos.

    ii) Asumir que para ambos programas recursivos, el valor de entrada es 4. Rescribir dichosprogramas para que funcionen de manera no recursiva. Restringir el uso de registrossolo a $s0-$s7. Cuantas instrucciones se ejecutan en la version recursiva? Y en la norecursiva?

    iii) Mostrar el contenido del stack despues de cada llamada a funcion, asumiendo que elvalor de entrada es 4.

    Ejercicio 21 Asumiendo que el stack y el segmento estatico de datos se encuentran vacos,y el stack y el global pointer comienzan en la direccion 0x7FFF FFFc y 0x1000 8000,respectivamente. Ademas, asumiendo la convencion de llamadas del Cuadro 1 del ejercicio

    14

  • 19 y que los parametros de entrada a funcion son pasados a traves de los registros $a0-$a3,y que el resultado se devuelve a traves de $r0 y que las funciones leaf function puedenutilizar solamente registros guardados; dados:

    a. int my global = 100;main(){

    int x = 10;

    int y = 20;

    int z;

    z = my function(x,y);

    }int my function(int x, int y){

    return x - y + my global;

    }b. int my global = 100;

    main(){int z;

    my global+=1;

    int z;

    z = leaf function(my global);

    }int leaf function(int x){

    return x - 1;

    }

    i) Transcribir los programas a assembler MIPS.

    ii) Mostrar el contenido del stack y del segmento estatico de datos despues de cada llamadaa funcion.

    iii) Si la funcion leaf function pudiera usar los registros temporales ($t0, $t1, etc.),escribir el codigo MIPS para cada programa.

    Dados los siguientes programas escritos en assembler MIPS que siguen la convencion del Cua-dro 2 del ejercicio 19:

    a. f: add $v0, $a1, $a0bnez $a2, L

    sub $v0, $a0, $a1

    L: jr $v0

    b. f: add $a2, $a3, $a2slt $a2, $a2, $a0

    move $v0, $a1

    beqz $a2, L

    jr $ra

    L: move $a0, $a1

    jal g ; Tail call

    i) El codigo contiene un error y viola la convencion de llamada de MIPS. Cual es el errory como puede solucionarse?

    ii) Cual es el codigo equivalente en C de este programa? Asumir que los argumento de lafuncion en C son denominados a, b, c, etc.

    iii) Mostrar el contenido del stack despues de cada llamada a funcion, asumiendo que elvalor de entrada es 4. En el punto que esta funcion es llamada, los registros $a0, $a1,$a2 y $a3 contienen los valores 1, 100, 1000 y 30, respectivamente. Que valor retornala funcion? Si otra funcion g es llamada desde f, asumir que g siempre devuelve 500.

    15

  • Ejercicio 22 Dadas las siguientes cadenas de caracteres:

    a. hello world

    b. 0123456789

    i) Transcribirlos a los valores en bytes hexadecimales ASCII .

    ii) Transcribirlos a Unicode de 16-bits (usando la notacion hex y el Basic Latin characterset).

    Dados los siguientes valores de caracteres ASCII hexadecimales:

    a. 41 44 44

    b. 4D 49 50 53

    i) trasladarlos a texto.

    Ejercicio 23 Sean:

    a. cadena de enteros decimales positivos y negativos

    b. enteros hexadecimales positivos

    i) Escribir un programa en lenguaje ensamblador MIPS que convierta una cadena denumeros ASCII a un entero, bajo las condiciones que figuran en la tabla. El registro$a0 contiene la direccion de la cadena de dgitos que contiene alguna combinacion de 0y 9 y que finaliza con un terminador null. El programa debe calcular el valor enteroequivalente a la cadena y almacenarlo en el registro $v0. Si en la cadena aparece uncaracter que no se corresponde con un dgito decimal, el programa debe terminar suejecucion almacenando en el registro $v0 el valor -1. A modo de ejemplo, si el registro$a0 apunta a la secuencia de tres bytes 50(10), 52(10) y 0(10) (que corresponde a la cadena24 con terminador null), al terminar el programa debera retornar el valor 24(10) en elregistro $v0.

    Ejercicio 24 Asumiendo que los registros $t1 y $t2 contienen la direcciones 0x1000 0000y 0x1000 0010, respectivamente, y que la arquitectura MIPS utiliza el modo de direcciona-miento big-endian. Sean:

    a. lbu $t0, 0($t1)sw $t0, 0($t2)

    b. lb $t0, 0($t1)sh $t0, 0($t2)

    i) Asumiendo que el dato en la direccion de memoria 0x1000 0000 es:

    1000 0000 12 34 56 78

    Que valor es almacenado en la direccion apuntada por el registro $t2? Asumir que ladireccion de memoria apuntada a $t2 es inicializada en 0xFFFF FFFF

    ii) Asumiendo que el dato en la direccion de memoria 0x1000 0000 es:

    1000 0000 80 80 80 80

    Que valor es almacenado en la direccion apuntada por el registro $t2? Asumir que ladireccion de memoria apuntada a $t2 es inicializada en 0x0000 0000

    16

  • iii) Asumiendo que el dato en la direccion de memoria 0x1000 0000 es:

    1000 0000 11 00 00 FF

    Que valor es almacenado en la direccion apuntada por el registro $t2? Asumir que ladireccion de memoria apuntada a $t2 es inicializada en 0x5555 5555

    Ejercicio 25 Dados:

    a. 0010 0000 0000 0001 0100 1001 0010 0100(2)a. 0000 1111 1011 1110 0100 0000 0000 0000(2)

    i) Escribir un programa en assembler MIPS que cree las constantes de 32-bits de la tablay que almacene dicho valor en el registro $t1.

    ii) Si el valor actual del PC=0x00000000, Es posible utilizar una sola instruccion jumppara obtener un PC con el valor de la tabla?

    iii) Si el valor actual del PC=0x00000600, Es posible utilizar una sola instruccion branchpara obtener un PC con el valor de la tabla?

    iv) Si el valor actual del PC=0x1FFFF000, Es posible utilizar una sola instruccion branchpara obtener un PC con el valor de la tabla?

    v) Si el campo inmediato de una instruccion MIPS fuera de solo 8-bits de ancho, escribirun codigo MIPS que cree las constantes de 32-bits de la tabla y almacene sus valores enel registro $t1. No esta permitido utilizar la instruccion lui.

    Dados:

    a. lui $t0, 0x1234addi $t0, $t0, 0x5678

    b. lui $t0, 0x1234andi $t0, $t0, 0x5678

    i) Cual es el valor del registro $t0 luego de ejecutar el codigo de la tabla?

    ii) Escribir un codigo C equivalente al codigo assembler de la tabla. Asumir que la constantemas grande que se puede cargar en un entero de 32-bits son 16-bits.

    Ejercicio 26 Dados:

    a. 0002 0000(16)a. FFFF FF00(16)

    i) Si el PC=0x0000 0000, Cuantas instrucciones branch (no jump) son necesarias paraalcanzar la direccion de la tabla?

    ii) Si el PC=0x0000 0000, Cuantas instrucciones jump (no branch, ni jump a registro) sonnecesarias para alcanzar la direccion de la tabla?

    iii) Para reducir el tamano de un programa MIPS, los disenadores de MIPS han decididorecortar el campo inmediato de las instrucciones de tipo I-type de 16-bits a 8-bits. Siel PC=0x0000 0000, Cuantas instrucciones branch son necesarias para setear al PC ladireccion de la tabla?

    Dados:

    a. 128 registros

    b. 4 veces mas operaciones diferentes

    17

  • i) Si el set de instrucciones del procesador MIPS es modificado, el formato de instrucciontambien debera ser modificado. Para cada cambio sugerido en la tabla, Cual es elimpacto sobre el rango de direcciones para una instruccion beq? Asumir que todas lasinstrucciones se mantienen en un largo de 32-bits y cada cambio realizado al formato deinstruccion de las instrucciones de tipo I-type solo incrementa/decrementa el campoinmediato de la instruccion beq.

    ii) Si el set de instrucciones del procesador MIPS es modificado, el formato de instrucciontambien debera ser modificado. Para cada cambio sugerido en la tabla, Cual es elimpacto sobre el rango de direcciones para una instruccion jump? Asumir que todas lasinstrucciones se mantienen en un largo de 32-bits y cada cambio realizado al formato deinstruccion de las instrucciones de tipo J-type solo impacta en el campo de direccionde la instruccion jump.

    iii) Si el set de instrucciones del procesador MIPS es modificado, el formato de instrucciontambien debera ser modificado. Para cada cambio sugerido en la tabla, Cual es elimpacto sobre el rango de direcciones para una instruccion jump de registro? Asumirque todas las instrucciones se mantienen en un largo de 32-bits.

    Ejercicio 27 Sean:a. Direccionamiento base o desplazamiento

    a. Direccionamiento pseudo-directo

    i) Dado los modos de direccionamiento de MIPS, que se encuentran en la tabla anterior,dar un ejemplo de una instruccion MIPS que muestre dicho modo de direccionamiento.

    ii) Para la instruccion del punto anterior, Cual es el tipo de instruccion utilizada (I-type,etc.)?

    iii) Listar las ventajas y desventajas de cada modo de direccionamiento. Escribir un codigoMIPS que muestre dichas ventajas y desventajas.

    Sean:

    a. 0x00400000 beq $s0, $0, FAR...

    0x00403100 FAR: addi $s0, $s0, 1

    b. 0x00000100 j AWAY...

    0x04000010 AWAY: addi $s0, $s0, 1

    i) Para las sentencias MIPS de la tabla, mostrar su repesentacion a nivel bit en hexadecimalde cada una.

    ii) Al reducir el tamano del campo inmediato de las instrucciones de tipo I-type y J-type,se pueden ahorrar los bits necesarios para representar este tipo de instrucciones. Siel campo inmediato de las instrucciones I-type fuera de 8-bits y el de las J-typefuera de 18-bits, rescribir el codigo MIPS de la tabla para que refleje dicho cambio. Noesta permitido utilizar la instruccion lui.

    iii) Cuantas instrucciones de mas se necesitan para ejecutar el codigo del punto anterior,comparado con el de la tabla?

    18

  • M I P S Reference Data

    BASIC INSTRUCTION FORMATS

    REGISTER NAME, NUMBER, USE, CALL CONVENTION

    CORE INSTRUCTION SET OPCODE

    NAME, MNEMONICFOR-MAT OPERATION (in Verilog)

    / FUNCT(Hex)

    Add add R R[rd] = R[rs] + R[rt] (1) 0 / 20hexAdd Immediate addi I R[rt] = R[rs] + SignExtImm (1,2) 8hexAdd Imm. Unsigned addiu I R[rt] = R[rs] + SignExtImm (2) 9hexAdd Unsigned addu R R[rd] = R[rs] + R[rt] 0 / 21hexAnd and R R[rd] = R[rs] & R[rt] 0 / 24hexAnd Immediate andi I R[rt] = R[rs] & ZeroExtImm (3) chex

    Branch On Equal beq Iif(R[rs]==R[rt]) PC=PC+4+BranchAddr (4)

    4hex

    Branch On Not Equalbne Iif(R[rs]!=R[rt]) PC=PC+4+BranchAddr (4)

    5hex

    Jump j J PC=JumpAddr (5) 2hexJump And Link jal J R[31]=PC+8;PC=JumpAddr (5) 3hexJump Register jr R PC=R[rs] 0 / 08hex

    Load Byte Unsigned lbu IR[rt]={24b0,M[R[rs] +SignExtImm](7:0)} (2)

    24hex

    Load Halfword Unsigned

    lhu IR[rt]={16b0,M[R[rs] +SignExtImm](15:0)} (2)

    25hex

    Load Linked ll I R[rt] = M[R[rs]+SignExtImm] (2,7) 30hexLoad Upper Imm. lui I R[rt] = {imm, 16b0} fhexLoad Word lw I R[rt] = M[R[rs]+SignExtImm] (2) 23hexNor nor R R[rd] = ~ (R[rs] | R[rt]) 0 / 27hexOr or R R[rd] = R[rs] | R[rt] 0 / 25hexOr Immediate ori I R[rt] = R[rs] | ZeroExtImm (3) dhexSet Less Than slt R R[rd] = (R[rs] < R[rt]) ? 1 : 0 0 / 2ahexSet Less Than Imm. slti I R[rt] = (R[rs] < SignExtImm)? 1 : 0 (2) ahexSet Less Than Imm.

    Unsignedsltiu I

    R[rt] = (R[rs] < SignExtImm) ? 1 : 0 (2,6)

    bhex

    Set Less Than Unsig. sltu R R[rd] = (R[rs] < R[rt]) ? 1 : 0 (6) 0 / 2bhexShift Left Logical sll R R[rd] = R[rt] > shamt 0 / 02hex

    Store Byte sb IM[R[rs]+SignExtImm](7:0) = R[rt](7:0) (2)

    28hex

    Store Conditional sc IM[R[rs]+SignExtImm] = R[rt]; R[rt] = (atomic) ? 1 : 0 (2,7)

    38hex

    Store Halfword sh IM[R[rs]+SignExtImm](15:0) = R[rt](15:0) (2)

    29hex

    Store Word sw I M[R[rs]+SignExtImm] = R[rt] (2) 2bhexSubtract sub R R[rd] = R[rs] - R[rt] (1) 0 / 22hexSubtract Unsigned subu R R[rd] = R[rs] - R[rt] 0 / 23hex

    (1) May cause overflow exception(2) SignExtImm = { 16{immediate[15]}, immediate }(3) ZeroExtImm = { 16{1b0}, immediate }

    (5) JumpAddr = { PC+4[31:28], address, 2b0 }

    (7) Atomic test&set pair; R[rt] = 1 if pair atomic, 0 if not atomic

    R opcode rs rt rd shamt funct31 26 25 21 20 16 15 11 10 6 5 0

    I opcode rs rt immediate31 26 25 21 20 16 15 0

    J opcode address31 26 25 0

    ARITHMETIC CORE INSTRUCTION SET OPCODE

    NAME, MNEMONICFOR-MAT OPERATION

    / FMT /FT/ FUNCT

    (Hex)Branch On FP True bc1t FI if(FPcond)PC=PC+4+BranchAddr (4) 11/8/1/--Branch On FP False bc1f FI if(!FPcond)PC=PC+4+BranchAddr(4) 11/8/0/--Divide div R Lo=R[rs]/R[rt]; Hi=R[rs]%R[rt] 0/--/--/1aDivide Unsigned divu R Lo=R[rs]/R[rt]; Hi=R[rs]%R[rt] (6) 0/--/--/1bFP Add Single add.s FR F[fd ]= F[fs] + F[ft] 11/10/--/0FP Add Double

    add.d FR {F[fd],F[fd+1]} = {F[fs],F[fs+1]} + {F[ft],F[ft+1]}

    11/11/--/0

    FP Compare Single c.x.s* FR FPcond = (F[fs] op F[ft]) ? 1 : 0 11/10/--/yFP Compare Double

    c.x.d* FR FPcond = ({F[fs],F[fs+1]} op {F[ft],F[ft+1]}) ? 1 : 0

    11/11/--/y

    * (x is eq, lt, or le) (op is ==, > shamt 0/--/--/3Store FP Single swc1 I M[R[rs]+SignExtImm] = F[rt] (2) 39/--/--/--Store FP Double

    sdc1 I M[R[rs]+SignExtImm] = F[rt]; (2) M[R[rs]+SignExtImm+4] = F[rt+1]

    3d/--/--/--

    FR opcode fmt ft fs fd funct31 26 25 21 20 16 15 11 10 6 5 0

    FI opcode fmt ft immediate31 26 25 21 20 16 15 0

    NAME MNEMONIC OPERATIONBranch Less Than blt if(R[rs]R[rt]) PC = LabelBranch Less Than or Equal ble if(R[rs]=R[rt]) PC = LabelLoad Immediate li R[rd] = immediateMove move R[rd] = R[rs]

    NAME NUMBER USEPRESERVED ACROSS

    A CALL?$zero 0 The Constant Value 0 N.A.$at 1 Assembler Temporary No

    $v0-$v1 2-3Values for Function Results and Expression Evaluation

    No

    $a0-$a3 4-7 Arguments No$t0-$t7 8-15 Temporaries No$s0-$s7 16-23 Saved Temporaries Yes$t8-$t9 24-25 Temporaries No$k0-$k1 26-27 Reserved for OS Kernel No

    $gp 28 Global Pointer Yes$sp 29 Stack Pointer Yes$fp 30 Frame Pointer Yes$ra 31 Return Address Yes

    1 2

    MIP

    S R

    efer

    ence

    Dat

    a C

    ard

    (Gre

    en C

    ard

    )1.

    Pul

    l alo

    ng p

    erfo

    ratio

    n to

    sep

    arat

    e ca

    rd2.

    Fol

    d bo

    ttom

    sid

    e (c

    olum

    ns 3

    and

    4)

    toge

    ther

    FLOATING-POINT INSTRUCTION FORMATS

    PSEUDOINSTRUCTION SET

    Copyright 2009 by Elsevier, Inc., All rights reserved. From Patterson and Hennessy, Computer Organization and Design, 4th ed.

    (4) BranchAddr = { 14{immediate[15]}, immediate, 2b0 }

    (6) Operands considered unsigned numbers (vs. 2 s comp.)

  • ...Argument 6Argument 5

    Saved Registers

    Local Variables

    OPCODES, BASE CONVERSION, ASCII SYMBOLS

    (1) opcode(31:26) == 0(2) opcode(31:26) == 17ten (11hex); if fmt(25:21)==16ten (10hex) f = s (single); if fmt(25:21)==17ten (11hex) f = d (double)

    STANDARD

    (-1)S (1 + Fraction) 2(Exponent - Bias)

    where Single Precision Bias = 127, Double Precision Bias = 1023.

    IEEE Single Precision andDouble Precision Formats:

    MEMORY ALLOCATION

    $sp 7fff fffchex

    $gp 1000 8000hex

    1000 0000hex

    pc 0040 0000hex

    0hex

    DATA ALIGNMENT

    EXCEPTION CONTROL REGISTERS: CAUSE AND STATUS

    EXCEPTION CODES

    SIZE PREFIXES (10x for Disk, Communication; 2x for Memory)

    The symbol for each prefix is just its first letter, except is used for micro.

    MIPSopcode(31:26)

    (1) MIPS funct(5:0)

    (2) MIPS funct(5:0)

    BinaryDeci-

    mal

    Hexa-deci-mal

    ASCIIChar-acter

    Deci-mal

    Hexa-deci-mal

    ASCIIChar-acter

    (1) sll add.f 00 0000 0 0 NUL 64 40 @sub.f 00 0001 1 1 SOH 65 41 A

    j srl mul.f 00 0010 2 2 STX 66 42 Bjal sra div.f 00 0011 3 3 ETX 67 43 Cbeq sllv sqrt.f 00 0100 4 4 EOT 68 44 Dbne abs.f 00 0101 5 5 ENQ 69 45 Eblez srlv mov.f 00 0110 6 6 ACK 70 46 Fbgtz srav neg.f 00 0111 7 7 BEL 71 47 Gaddi jr 00 1000 8 8 BS 72 48 Haddiu jalr 00 1001 9 9 HT 73 49 Islti movz 00 1010 10 a LF 74 4a Jsltiu movn 00 1011 11 b VT 75 4b Kandi syscall round.w.f 00 1100 12 c FF 76 4c Lori break trunc.w.f 00 1101 13 d CR 77 4d Mxori ceil.w.f 00 1110 14 e SO 78 4e Nlui sync floor.w.f 00 1111 15 f SI 79 4f O

    mfhi 01 0000 16 10 DLE 80 50 P(2) mthi 01 0001 17 11 DC1 81 51 Q

    mflo movz.f 01 0010 18 12 DC2 82 52 Rmtlo movn.f 01 0011 19 13 DC3 83 53 S

    01 0100 20 14 DC4 84 54 T01 0101 21 15 NAK 85 55 U01 0110 22 16 SYN 86 56 V01 0111 23 17 ETB 87 57 W

    mult 01 1000 24 18 CAN 88 58 Xmultu 01 1001 25 19 EM 89 59 Ydiv 01 1010 26 1a SUB 90 5a Zdivu 01 1011 27 1b ESC 91 5b [

    01 1100 28 1c FS 92 5c \01 1101 29 1d GS 93 5d ]01 1110 30 1e RS 94 5e ^01 1111 31 1f US 95 5f _

    lb add cvt.s.f 10 0000 32 20 Space 96 60 lh addu cvt.d.f 10 0001 33 21 ! 97 61 alwl sub 10 0010 34 22 " 98 62 blw subu 10 0011 35 23 # 99 63 clbu and cvt.w.f 10 0100 36 24 $ 100 64 dlhu or 10 0101 37 25 % 101 65 elwr xor 10 0110 38 26 & 102 66 f

    nor 10 0111 39 27 103 67 gsb 10 1000 40 28 ( 104 68 hsh 10 1001 41 29 ) 105 69 iswl slt 10 1010 42 2a * 106 6a jsw sltu 10 1011 43 2b + 107 6b k

    10 1100 44 2c , 108 6c l10 1101 45 2d - 109 6d m

    swr 10 1110 46 2e . 110 6e ncache 10 1111 47 2f / 111 6f oll tge c.f.f 11 0000 48 30 0 112 70 plwc1 tgeu c.un.f 11 0001 49 31 1 113 71 qlwc2 tlt c.eq.f 11 0010 50 32 2 114 72 rpref tltu c.ueq.f 11 0011 51 33 3 115 73 s

    teq c.olt.f 11 0100 52 34 4 116 74 tldc1 c.ult.f 11 0101 53 35 5 117 75 uldc2 tne c.ole.f 11 0110 54 36 6 118 76 v

    c.ule.f 11 0111 55 37 7 119 77 wsc c.sf.f 11 1000 56 38 8 120 78 xswc1 c.ngle.f 11 1001 57 39 9 121 79 yswc2 c.seq.f 11 1010 58 3a : 122 7a z

    c.ngl.f 11 1011 59 3b ; 123 7b {c.lt.f 11 1100 60 3c < 124 7c |

    sdc1 c.nge.f 11 1101 61 3d = 125 7d }sdc2 c.le.f 11 1110 62 3e > 126 7e ~

    c.ngt.f 11 1111 63 3f ? 127 7f DEL

    S Exponent Fraction31 30 23 22 0

    S Exponent Fraction63 62 52 51 0

    Double WordWord Word

    Byte Byte Byte Byte Byte Byte Byte Byte0 1 2 3 4 5 6 7

    Value of three least significant bits of byte address (Big Endian)

    BD

    InterruptMask

    ExceptionCode

    31 15 8 6 2

    PendingInterrupt

    UM

    EL

    IE

    15 8 4 1 0

    Number Name Cause of Exception Number Name Cause of Exception0 Int Interrupt (hardware) 9 Bp Breakpoint Exception

    4 AdELAddress Error Exception(load or instruction fetch)

    10 RIReserved Instruction

    Exception

    5 AdESAddress Error Exception

    (store)11 CpU

    CoprocessorUnimplemented

    6 IBEBus Error on

    Instruction Fetch12 Ov

    Arithmetic Overflow Exception

    7 DBEBus Error on Load or Store

    13 Tr Trap

    8 Sys Syscall Exception 15 FPE Floating Point Exception

    SIZEPRE-FIX SIZE

    PRE-FIX SIZE

    PRE-FIX SIZE

    PRE-FIX

    103, 210 Kilo- 1015, 250 Peta- 10-3 milli- 10-15 femto-106, 220 Mega- 1018, 260 Exa- 10-6 micro- 10-18 atto-109, 230 Giga- 1021, 270 Zetta- 10-9 nano- 10-21 zepto-1012, 240 Tera- 1024, 280 Yotta- 10-12 pico- 10-24 yocto-

    3

    Stack

    Dynamic Data

    Static Data

    Text

    Reserved

    IEEE 754 Symbols

    S.P. MAX = 255, D.P. MAX = 2047

    Exponent Fraction Object0 0 00 0 Denorm

    1 to MAX - 1 anything Fl. Pt. Num.MAX 0 MAX 0 NaN

    STACK FRAMEHigherMemoryAddresses

    LowerMemoryAddresses

    StackGrows

    $sp

    $fp

    4

    MIP

    S R

    efer

    ence

    Dat

    a C

    ard

    (Gre

    en C

    ard

    )1.

    Pul

    l alo

    ng p

    erfo

    ratio

    n to

    sep

    arat

    e ca

    rd2.

    Fol

    d bo

    ttom

    sid

    e (c

    olum

    ns 3

    and

    4)

    toge

    ther

    IEEE 754 FLOATING-POINT

    Halfword Halfword Halfword Halfword

    BD = Branch Delay, UM = User Mode, EL = Exception Level, IE =Interrupt Enable

    Copyright 2009 by Elsevier, Inc., All rights reserved. From Patterson and Hennessy, Computer Organization and Design, 4th ed.