MANDAMIENTOS LOS “MANDAMIENTOS” VERANO 2013 DEL VERANO 2013.
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson...
-
Upload
anacleto-manrique -
Category
Documents
-
view
217 -
download
0
Transcript of Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson...
![Page 1: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/1.jpg)
Organización del Computador I Verano
MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy
Verano 2004 Profesora Borensztejn
![Page 2: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/2.jpg)
Lenguajes para la máquina • Las computadoras son circuitos electrónicos, por lo
tanto para hablar con ellas se necesita enviarles señales eléctricas
• Las señales viajan por los circuitos electrónicos que están formados por (millones de) transistores.
• Los transistores son interruptores que, en función del valor de la señal eléctrica que los controla, dejan o no pasar esa señal. Por eso a su salida habrá dos posibles valores: estos valores se pueden representar simbólicamente con los dígitos cero y uno.
• Los símbolos cero y uno se llaman bits.
![Page 3: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/3.jpg)
Transistores: ¿que podemos hacer con algunos pocos de
ellos?• Con sólo dos: convertir un 1 en un 0 (y viceversa):
hacer una puerta NOT• Con 4 transistores podemos hacer una puerta
lógica NAND o NOR.• Con estas puertas elementales se puede construir
cualquier función.• Un computador no es más que un conjunto
(grande) de funciones de un conjunto (grande) de entradas (señales)
![Page 4: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/4.jpg)
Lenguajes para la máquina• En realidad, el lenguaje máquina está formado por números
en base 2! Tanto los datos como las instrucciones se codifican como números en base 2.
• Cada máquina (o familia de máquinas) tiene su propio lenguaje máquina. Los lenguajes máquina,en realidad, no difieren mucho entre sí, debido a que:– la tecnología de implementación de los circuitos es la misma para
todos los fabricantes– Todas las máquinas deben proporcionar un repertorio básico de
instrucciones (sumar, por ejemplo).
• Asi que, no se preocupen, lo que aprendan de MIPS será...........totalmente diferente en INTEL (orga2)
![Page 5: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/5.jpg)
Lenguajes Máquina• Una computadora, está formada por
• La Unidad de Proceso y Control (es donde nos vamos a centrar en este curso) implementa un conjunto de funciones (de propósito general) a través de millones de transistores.
• Imposible de entender mirando lo que hace cada transistorNecesitamos una abstracción
Processor I/O
Control
Datapath
Memory
Input
Output
![Page 6: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/6.jpg)
Abstraccionesswap(int v[], int k){int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp;}
swap: muli $2, $5,4 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31
00000000101000010000000000011000000000001000111000011000001000011000110001100010000000000000000010001100111100100000000000000100101011001111001000000000000000001010110001100010000000000000010000000011111000000000000000001000
Binary machinelanguageprogram(for MIPS)
C compiler
Assembler
Assemblylanguageprogram(for MIPS)
High-levellanguageprogram(in C) • Lenguaje ensamblador:
– Notación más humana que los números binarios
– Requiere una instrucción por línea
• Lenguajes de alto nivel permiten:– Facilidad al programar– Menor tiempo de desarrollo
(mayor productividad)– Independencia del
computador
![Page 7: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/7.jpg)
MIPS
• Machine without Interlocked Pipelined Stages• Arquitectura diseñada por Hennessey, en 1980,
guiada por los siguientes principios:– La simplicidad favorece la regularidad– Más pequeño es más rápido (menos es mas)– Hacer rápido el caso común
• Objetivos de diseño: maximizar rendimiento y reducir costos
• Usado por: NEC, Nintendo, Silicon Graphics, Sony.
![Page 8: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/8.jpg)
Aritmética MIPS• Todas las instrucciones tienen 3 operandos• El orden de los operandos es fijo (primero el destino)
Ejemplo:
código C: A = B + C
código MIPS: add $s0, $s1, $s2
(el compilador asocia las variables a los registros)
![Page 9: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/9.jpg)
Aritmética MIPS• Principio de Diseño: la simplicidad favorece la uniformidad.
– Operaciones con número de operandos variables complica el hardware. • Pero esto complica algunas cosas ...
código C: A = B + C + D;E = F - A;
código MIPS: add $t0, $s1, $s2add $s0, $t0, $s3sub $s4, $s5, $s0
• Los operandos deben ser registros, y solo hay 32 registros.• Los registros son de 32 bits• Principio de Diseño: cuanto más pequeño, mas rápido.
![Page 10: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/10.jpg)
Registros vs Memoria
• Las instrucciones aritméticas deben tener sus operandos en registros, de los cuales la arquitectura provee 32.
• El compilador realiza la asociación de variables con registros. • ¿Que sucede con los programas que tienen muchas variables?
– El compilador intenta mantener las variables usadas más frecuentemente en registros. Aquellas menos usadas se guardan en memoria. El proceso de poner estas variables en memoria se llama spilling.
– Los registros tienen menor tiempo de acceso que la memoria, y además son mas útiles porque se puede operar con ellos.
– El compilador, para obtener un rendimiento alto, debe hacer un uso eficiente de los registros.
![Page 11: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/11.jpg)
Organización de la Memoria
• Se ve como un vector muy largo de una dimensión. Cada posición tiene asociada una “dirección”.
• Una dirección de memoria es un índice al vector.
• "Byte addressing" significa que el índice apunta a un byte de memoria.
0
1
2
3
4
5
6
...
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
8 bits of data
![Page 12: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/12.jpg)
Organización de la Memoria
• En general, los datos son de una longitud mayor que un byte4 bytes: se llaman words en MIPS.
• La memoria se puede ver como un vector de:– 232 bytes con direcciones (de byte) que van desde 0 a 232-1– 230 words con direcciones (de byte) 0, 4, 8, ... 232-4
• Los words están alineados en memoria:– Es decir, los dos bits menos significativos de una dirección de memoria
que identifica a un word son cero.
• La organización de un word en memoria se llama “big endian” (en contraposición con “little endian”): consiste en almacenar el byte de mas peso del word en la dirección más baja de memoria.
...
0
4
8
12
000000000000000000000000000000000
4
8
12
32 bits of data
32 bits of data
32 bits of data
32 bits of data
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011
![Page 13: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/13.jpg)
Instrucciones para leer/escribir datos en memoria
• Load: carga de un operando de memoria a registro• Store: almacenamiento de un operando de registro a memoria• Ejemplo:
C código: A[8] = h + A[8];
MIPS código: lw $t0, 32($s3)add $t0, $s2, $t0sw $t0, 32($s3)
• El destino en la instrucción de Store está al final.
• Recordar: operandos aritméticos no pueden estar en memoria.
![Page 14: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/14.jpg)
Hasta ahora:
• MIPS— carga de words pero direccionamiento a
nivel de byte— aritmética solo en registros
• Instrucción Significado
add $s1, $s2, $s3 $s1 = $s2 + $s3sub $s1, $s2, $s3 $s1 = $s2 – $s3lw $s1, 100($s2) $s1 = Memory[$s2+100] sw $s1, 100($s2) Memory[$s2+100] = $s1
![Page 15: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/15.jpg)
• Instrucciones para la toma de decisiones– Alteran el flujo secuencial del programa– “Controlan” el orden de ejecución de las
instrucciones del programa
• Instrucciones MIPS de salto condicional:bne $t0, $t1, L1 beq $t0, $t1, Ll
• Ejemplo: if (i= = j) h = i + j; bne $s0, $s1, Lladd $s3, $s0, $s1
Ll: ....
Control
![Page 16: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/16.jpg)
• Intrucción MIPS de salto incondicionalj Ll
• Ejemplo:
if (i!=j) beq $s4, $s5, L1 h=i+j; add $s3, $s4, $s5else j L2 h=i-j; L1: sub $s3, $s4, $s5
L2: ...
• Como sería un bucle for?for (i=0;i<10;i++)
h=h+i;
Control
![Page 17: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/17.jpg)
Hasta Ahora:
• Instrucción Significado
add $s1,$s2,$s3 $s1 = $s2 + $s3sub $s1,$s2,$s3 $s1 = $s2 – $s3lw $s1,100($s2) $s1 = Memory[$s2+100] sw $s1,100($s2) Memory[$s2+100] = $s1bne $s4,$s5,L Siguiente instr.en L si $s4!=$s5beq $s4,$s5,L Siguiente instr.en L si $s4 =$s5j L Siguiente instr.en L
![Page 18: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/18.jpg)
• Instrucción SetLessThan:if $s1 < $s2 then $t0 = 1
slt $t0, $s1, $s2 else $t0 = 0
• Usamos la instrucción SLT para construir el salto si menor que: "blt $s1, $s2, L “ slt $t0, $s1, $s2 bne $t0, $zero, L
• El registro $zero se corresponde con el registro 0 que está cableado a cero.• El compilador MIPS construye todas las variantes de saltos condicionales utilizando las
instrucciones bne, beq y slt. De esta manera, se aplica el criterio de simplicidad: la incorporación de estas instrucciones alargaría el tiempo para ejecutar una instrucción: se prefieren dos instrucciones rápidas frente a todas mas lentas.
2
Control: Saltar si Menor?
![Page 19: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/19.jpg)
Instrucción Jump Register
• Instrucción MIPS jr: sirve para saltar a la dirección contenida en el registro especificado.
jr $t0
• Permite implementar la sentencia switch
• Se implementará con una Tabla que contiene las direcciones (etiquetas) de los distintos trozos de código correspondientes a cada caso. (Tabla de direcciones de salto).
switch(k){case 0: f=i+j; break; case 1: f=g+h; break; case 2: f=g-h; break; case 3: f=i-j; break;}
![Page 20: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/20.jpg)
Implementación de la sentencia switch
Las variables f a k se corresponden con $s0..$s5, $t2 contiene 4. La variable k se usará como índice a la tabla de etiquetas.La tabla se almacena a partir de la dirección guardada en $t4
switch(k){case 0: f=i+j; break; case 1: f=g+h; break; case 2: f=g-h; break; case 3: f=i-j; break;}
; comprueba si k>0 y k<4slt $t3, $s5, $zeroBne $t3, $zero, finslt $t3, $s5, $t2Bne $t3, $zero, fin
;multiplica $s5 (k) por 4 ;para acceder a la Tabla
add $t1,$s5,$s5add $t1,$t1,$t1
;cargar la dirección de Tabla[k]add $t1,$t1,$t4lw $t0,0($t1)
;saltar a la instrucciónjr $t0
L0: add $s0,$s3,$s4J fin
L1: add $s0,$s1,$s2J fin
L3: sub $s0,$s1,$s2J fin
L3: sub $s0,$s3,$s4Fin:
![Page 21: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/21.jpg)
• Constantes pequeñas son usadas muy frecuentemente (52% de los operandos son contantes pequeñas en gcc)
por ej: A = A + 5;B = B + 1;C = C - 18;
• Soluciones:– Almacenar algunas constantes típicas en memoria, y luego cargarlas.
lw $t0,dir_constante($zero)add $s1,$t0,$t0
– Crear constantes cableadas en registros (como $zero).– Incorporar a MIPS versiones de instrucciones en los cuales un operando es
una constante y dicha constante, de 16 bits, está almacenada en la instrucción.addi $s1, $s1, 4slti $s2, $s3, 10andi $t0, $t2, 6
3
Constantes
![Page 22: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/22.jpg)
• LUI (load upper immediate) almacena los 16 bits mas altos de una constante en un registro.
lui $t0, 1010101010101010
Luego se suma al registro la parte baja de la constante utilizando una instrucción aritmética con operando inmediato
ori $t0, $t0, 1010101010101010
1010101010101010 1010101010101010
1010101010101010 0000000000000000
0000000000000000 1010101010101010ori
1010101010101010 0000000000000000
Se llena con ceros
¿Constantes mas grandes?
![Page 23: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/23.jpg)
Caracteres y BytesUn carácter se representa mediante el código standard ASCII (American Stantard Code for Information Interchange)
ASCII Carácter ASCII Carácter ASCII Carácter ASCII Carácter ASCII Carácter ASCII Carácter
32 espacio 48 0 64 @ 80 P 96 112 p
33 ! 49 1 65 A 81 Q 97 a 113 q
34 " 50 2 66 B 82 R 98 b 114 r
35 # 51 3 67 C 83 S 99 c 115 s
36 $ 52 4 68 D 84 T 100 d 116 t
37 % 53 5 69 E 85 U 101 e 117 u
38 & 54 6 70 F 86 V 102 f 118 v
39 ` 55 7 71 G 87 W 103 g 119 w
40 ( 56 8 72 H 88 X 104 h 120 x
41 ) 57 9 73 I 89 Y 105 i 121 y
42 * 58 : 74 J 90 Z 106 j 122 z
43 + 59 ; 75 K 91 [ 107 k 123 {
44 , 60 < 76 L 92 \ 108 l 124 |
45 - 61 = 77 M 93 ] 109 m 125 }
46 . 62 > 78 N 94 ^ 110 n 126 ~
47 / 63 ? 79 O 95 0 111 o 127 DEL
![Page 24: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/24.jpg)
Caracteres• Instrucciones para leer y escribir bytes:
– Lb: carga un byte de memoria y lo sitúa en los 8 bits más bajos del registro (derecha)
– Sb: lee el byte que está a la derecha en el registro especificado y lo escribe en memoria.
• Los caracteres se combinan en cadenas: en C, el fin de una cadena se marca con un byte cuyo valor es cero (carácter Null)
lb $t0, 0($sp)sb $t0, 0($gp)
![Page 25: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/25.jpg)
Strcpyvoid strcpy(char x[],char y[]){
int i;i=0;while ((x[i]= y[i])!=0)
i=i+1;}
strcpy:; direcciones de x e y en $a0 y $a1; se usa $s0 para i
sub $sp, $sp, 4 sw $s0, 4($sp)
;inicializa i en cero add $s0,$zero,$zero
L1: ;guarda la direccion de y[i] en $t1
add $t1,$a1,$s0;carga y[i] en $t2
lb $t2,0($t1);guarda la direccion de x[i] en $t3
add $t3,$a0,$s0;guarda $t2 en x[i]
sb $t2,0($t3);aritmética de punteros
addi$s0,$s0,1bne $t2, $zero, L1
;restaura los valores antiguos; y retorna
lw $s0, 4($sp)add $sp, $sp, 4jr $ra
![Page 26: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/26.jpg)
Soporte para procedimientos
Mecanismo de llamada y retorno de un procedimiento:
1.Paso de parámetros a través de un lugar conocido
2.Transferencia de control a la subrutina
3.Ejecución del código de la subrutina
4.Situar el resultado en un lugar conocido
5.Retornar el control al punto de origen
1. $a0..$a3
2. Instrucción MIPS:
jal dirección_subrutina
3. Ejecución del código de la subrutina
4. $v0-$v1
5. $ra: contiene la dirección de retorno. La instrucción jr $r0 devuelve el control al programa llamador.
![Page 27: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/27.jpg)
Instrucciones JAL y JR (call y return)
• Jump and Link: salta y enlaza
• Cambia el valor del PC por la dirección especificada en la instrucción y almacena en el registro $r0 la dirección de retorno (PC+4).
• La instrucción JR $r0 se utiliza para el retorno del procedimiento
![Page 28: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/28.jpg)
La Pila• ¿Que sucede si el programa necesita utilizar más registros
(temporales) para hacer cálculos? El compilador puede usarlos, siempre y cuando preserve los valores que tenían antes de invocarse el procedimiento.
• Para preservar los valores, se vuelcan los registros en memoria (spilling).
• El lugar idóneo para realizar el spilling (vuelco) es una estructura de datos en memoria llamada pila: una cola donde el último que entra es el primero que sale.
• Los programas MIPS reservan un registro, $sp (stack pointer), que es el puntero al tope de la pila: es decir, apunta a la posición de memoria donde se ha almacenado el último dato.
![Page 29: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/29.jpg)
Ejemplo de una función
Las variables g a j se corresponden con $a0..$a3, y f se corresponde con $s0.
int ejemplo(int g,int h,int i,int j){
int f;f=(g+h)-(i+j);return f;
}
ejemplo:; salvar los registros $s0,$t0 y $t1
sub $sp, $sp, 12; *sw $t1, 8($sp)sw $t0, 4($sp)sw $s0, 0($sp)
;realiza el cálculo de f ;y lo deja en $s0
add $t0,$a0,$a1add $t1,$a2,$a3sub $s0,$t0,$t1
;copia $s0 en $v0 (reg. de retorno)add $v0,$s0,$zero
;restaura los valores antiguos; y retorna
lw $s0, 0($sp)sw $t0, 4($sp)sw $t1, 8($sp)add $sp, $sp, 12jr $ra
0($sp)
4($sp)
8($sp)
$sp $s0
$spAntes de instrucción *
$t0
$t1
![Page 30: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/30.jpg)
Convenciones • Los compiladores establecen una convención en el uso de
los registros para evitar salvar y restaurar registros cuyo valor nunca se usa.– $t0..$t9: 10 registros temporales cuyo valor no es preservado por
el procedimiento invocado– $s0..$s7: 8 registros que si deben ser salvados si son utilizados por
el procedimiento invocado
• Además, recordamos que:– $a0..$a3: 4 registros para paso de parámetros– $v0..$v1: 2 registros para devolver resultados– $sp: registro puntero a pila – $ra: registro que guarda la dirección de retorno
![Page 31: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/31.jpg)
Procedimientos anidados
c
A CB
• Lo mismo sucede con la dirección de retorno, y con todos los registros temporales que cada procedimiento deba seguir usando despues de la llamada.
• El invocador apila sus registros de argumentos ($a0..$a4) y temporales ($t0..$t9). El invocado apila el registro $ra y cualquier registro salvado $s0..$s7 usado por el invocado.
• El puntero a la pila ($sp) se ajusta a la cantidad de registros salvados. Antes del retorno, se restauran los registros y $sp se ajusta al valor inicial (el que recibió).
• Si B recibe de A en $a0..$a4 sus parámetros, deberá salvarlos en la pila antes de llamar a C
![Page 32: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/32.jpg)
Bloque de Activación• Las variables locales a los procedimientos que no caben
en los registros, tales como tablas o estructuras, también se almacenan en la pila.
• El conjunto de información almacenada en la pila es:– Argumentos (si hay mas de 4)– Dirección de Retorno– Registros Salvados– Variables Locales
• El bloque de pila que contiene esa información se denomina Bloque de Activación y los programas pueden utilizar un registro, el $fp, como puntero al Bloque.
![Page 33: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/33.jpg)
Bloque de Activación
Argumentos
Dirección de Retorno
Registros Salvados
Variables Locales
$FP
$SP
El puntero $fp, a diferencia de $sp, se mantiene fijo durante toda la ejecución del procedimiento, brindando un registro base estable para acceder a parámetros y variables.
![Page 34: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/34.jpg)
Convenciones
Nombre Número Uso Preservado$zero 0 valor constante cero n.a.$at 1 reservado para el ensamblador no$v0-$v1 2-3 resultados y evaluación expresiones no$a0-$a3 4-7 argumentos si$t0-$t7 8-15 temporales no $s0-$s7 16-23 salvados si$t8-$t9 24-25 temporales no$k0-$k1 26-27 reservado para el sistema operativo no$gp 28 puntero glogal si$sp 29 puntero pila si
![Page 35: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/35.jpg)
ResumenMIPS operands
Name Example Comments$s0-$s7, $t0-$t9, $zero, Fast locations for data. In MIPS, data must be in registers to perform
32 registers $a0-$a3, $v0-$v1, $gp, arithmetic. MIPS register $zero alw ays equals 0. Register $at is $fp, $sp, $ra, $at reserved for the assembler to handle large constants.
Memory[0], Accessed only by data transfer instructions. MIPS uses byte addresses, so
230 memory Memory[4], ..., sequential w ords differ by 4. Memory holds data structures, such as arrays,
words Memory[4294967292] and spilled registers, such as those saved on procedure calls.
MIPS assembly language
Category Instruction Example Meaning Commentsadd add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers
Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Three operands; data in registers
add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Used to add constants
load word lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Word from memory to register
store word sw $s1, 100($s2) Memory[$s2 + 100] = $s1 Word from register to memory
Data transfer load byte lb $s1, 100($s2) $s1 = Memory[$s2 + 100] Byte from memory to register
store byte sb $s1, 100($s2) Memory[$s2 + 100] = $s1 Byte from register to memory
load upper immediate lui $s1, 100 $s1 = 100 * 216 Loads constant in upper 16 bits
branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100
Equal test; PC-relative branch
Conditional
branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to PC + 4 + 100
Not equal test; PC-relative
branch set on less than slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0
Compare less than; for beq, bne
set less than immediate
slti $s1, $s2, 100 if ($s2 < 100) $s1 = 1; else $s1 = 0
Compare less than constant
jump j 2500 go to 10000 Jump to target address
Uncondi- jump register jr $ra go to $ra For switch, procedure return
tional jump jump and link jal 2500 $ra = PC + 4; go to 10000 For procedure call
![Page 36: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/36.jpg)
Compilación, Ensamblage, Linkedición y Carga
Programa .c
Compilador
Programa .s
Ensamblador
Objeto .o Librerías de rutinas
Montador
Ejecutable (LM) Cargador
Memoria
![Page 37: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/37.jpg)
Ensamblador• Traduce pseudoinstrucciones, por ejemplo
• Convierte el programa en lenguaje ensamblador en un programa objeto: – instrucciones en lenguaje máquina– datos– Información para situar las instrucciones en memoria
• El programa objeto está compuesto por 6 secciones:– Cabecera– Segmento de Texto– Segmento de Datos– Información de reubicación– Tabla de Símbolos– Información para depuración
move $t0, $t1Es traducida a:
add $t0,$zero, $t1
![Page 38: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/38.jpg)
Montador, Linker• Une distintos programas objeto en un único ejecutable• Útil para reutilizar código ya ensamblado (por ejemplo, librerías de
rutinas standard) • Funciones:
– Sitúa simbólicamente en memoria los datos y el código– Determina las direcciones de los datos y de las etiquetas de instrucciones– Resuelve las referencias externas
• El archivo ejecutable consta de:– Cabecera: indica el tamaño de los sementos de código y datos– Segmento de código– Segmento de datos
• Datos estáticos• Datos dinámicos• Pila
![Page 39: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/39.jpg)
Convención MIPS de distribución de memoria
Reservado
Código
Datos Estáticos
Datos Dinámicos
Pila
0040 0000
1000 00001000 8000
7fff ffff
pc
$gp
$sp
0000 0000
![Page 40: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/40.jpg)
Cargador
• Para ejecutar el programa, el sistema operativo realiza las siguientes acciones:– Lee la cabecera del archivo ejecutable para determinar el
tamaño de los segmentos de código y de datos– Crea un espacio de direcciones para albergar el programa,
y copia las instrucciones y los datos a este espacio– Copia en el segmento de pila, los argumentos del programa– Inicializa los registros: el $sp, $gp– Salta a una rutina de inicio (start-up routine) que a su vez
llama al programa main y cuando este finaliza, llama a una rutina de salida (exit system call)
![Page 41: Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004Profesora Borensztejn.](https://reader035.fdocuments.es/reader035/viewer/2022062409/5665b43d1a28abb57c904bb9/html5/thumbnails/41.jpg)
FIN MIPS