Beruflich Dokumente
Kultur Dokumente
MIPS (1 de 2)
Basado en el captulo 3 del libro de Patterson y Hennessy
Verano 2004
Profesora Borensztejn
Lenguajes Mquina
Una computadora, est formada por
Control
Input
Memory
Datapath
Processor
Output
I/O
Abstracciones
High-level
language
program
(in C)
C compiler
Assembly
language
program
(for MIPS)
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
Assembler
Binary machine
language
program
(for MIPS)
00000000101000010000000000011000
00000000100011100001100000100001
10001100011000100000000000000000
10001100111100100000000000000100
10101100111100100000000000000000
10101100011000100000000000000100
00000011111000000000000000001000
Lenguaje ensamblador:
Notacin ms humana que
los nmeros binarios
Requiere una instruccin
por lnea
MIPS
Machine without Interlocked Pipelined Stages
Arquitectura diseada por Hennessey, en 1980,
guiada por los siguientes principios:
La simplicidad favorece la regularidad
Ms pequeo es ms rpido (menos es mas)
Hacer rpido el caso comn
Aritmtica MIPS
Todas las instrucciones tienen 3 operandos
El orden de los operandos es fijo (primero el destino)
Ejemplo:
cdigo C:
A = B + C
cdigo MIPS:
Aritmtica MIPS
Principio de Diseo: la simplicidad favorece la uniformidad.
Operaciones con nmero de operandos variables complica el hardware.
Pero esto complica algunas cosas ...
cdigo C:
A = B + C + D;
E = F - A;
cdigo MIPS: add $t0, $s1, $s2
add $s0, $t0, $s3
sub $s4, $s5, $s0
Los operandos deben ser registros, y solo hay 32 registros.
Los registros son de 32 bits
Principio de Diseo: cuanto ms pequeo, mas rpido.
Registros vs Memoria
Organizacin de la 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
Organizacin de la Memoria
0
4
8
12
32 bits of data
32 bits of data
32 bits of data
32 bits of data
0
4
8
12
00000000000000000000000000000000
00000000000000000000000000000001
00000000000000000000000000000010
00000000000000000000000000000011
A[8] = h + A[8];
Hasta ahora:
MIPS
carga de words pero direccionamiento a
nivel de byte
aritmtica solo en registros
Instruccin
Significado
add $s1, $s2, $s3
sub $s1, $s2, $s3
lw $s1, 100($s2)
sw $s1, 100($s2)
Control
Instrucciones para la toma de decisiones
Alteran el flujo secuencial del programa
Controlan el orden de ejecucin de las
instrucciones del programa
Ejemplo:
if (i= = j) h = i + j;
Control
Intruccin MIPS de salto incondicional
j Ll
Ejemplo:
if (i!=j)
h=i+j;
else j L2
h=i-j;
L2:
...
Hasta Ahora:
Instruccin
Significado
0:
1:
2:
3:
f=i+j;
f=g+h;
f=g-h;
f=i-j;
break;
break;
break;
break;
Implementacin de la sentencia
switch
; comprueba si k>0 y k<4
slt $t3, $s5, $zero
Bne $t3, $zero, fin
slt $t3, $s5, $t2
Bne $t3, $zero, fin
;multiplica $s5 (k) por 4
;para acceder a la Tabla
add $t1,$s5,$s5
add $t1,$t1,$t1
;cargar la direccin de Tabla[k]
add $t1,$t1,$t4
lw $t0,0($t1)
;saltar a la instruccin
jr $t0
L0: add $s0,$s3,$s4
J
fin
L1: add $s0,$s1,$s2
J
fin
L3: sub $s0,$s1,$s2
J
fin
L3: sub $s0,$s3,$s4
Fin:
switch(k)
{case
case
case
case
}
0:
1:
2:
3:
f=i+j;
f=g+h;
f=g-h;
f=i-j;
break;
break;
break;
break;
Constantes
Constantes pequeas son usadas muy frecuentemente (52% de los operandos son
contantes pequeas en gcc)
por ej: A = A + 5;
B = B + 1;
C = C - 18;
Soluciones:
Almacenar algunas constantes tpicas en memoria, y luego cargarlas.
lw
add
$t0,dir_constante($zero)
$s1,$t0,$t0
0000000000000000
ori
1010101010101010
0000000000000000
0000000000000000
1010101010101010
1010101010101010
1010101010101010
Caracteres y Bytes
Un carcter se representa mediante el cdigo standard ASCII
(American Stantard Code for Information Interchange)
ASCII
Carcter
ASCII Carcter
32 espacio
48
64
80
96
112
33
49
65
81
97
113
34
"
50
66
82
98
114
35
51
67
83
99
115
36
52
68
84
100
116
37
53
69
85
101
117
38
&
54
70
86
102
118
39
55
71
87
103
119
40
56
72
88
104
120
41
57
73
89
105
121
42
58
74
90
106
122
43
59
75
91
107
123
44
60
<
76
92
108
124
45
61
77
93
109
125
46
62
>
78
94
110
126
47
63
79
95
111
127
DEL
Caracteres
Instrucciones para leer y escribir bytes:
Lb: carga un byte de memoria y lo sita en los 8 bits
ms bajos del registro (derecha)
Sb: lee el byte que est a la derecha en el registro
especificado y lo escribe en memoria.
lb
sb
$t0, 0($sp)
$t0, 0($gp)
Strcpy
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)
;aritmtica de punteros
addi $s0,$s0,1
bne $t2, $zero, L1
;restaura los valores antiguos
; y retorna
lw $s0, 4($sp)
add $sp, $sp, 4
jr $ra
1.
2.
3.
4.
5.
$a0..$a3
Instruccin MIPS:
jal direccin_subrutina
Ejecucin del cdigo de la
subrutina
$v0-$v1
$ra: contiene la direccin
de retorno. La instruccin
jr $r0 devuelve el control
al programa llamador.
Instrucciones JAL y JR
(call y return)
Jump and Link: salta y enlaza
Cambia el valor del PC por la direccin
especificada en la instruccin y almacena en
el registro $r0 la direccin de retorno
(PC+4).
La instruccin JR $r0 se utiliza para el
retorno del procedimiento
La Pila
Que sucede si el programa necesita utilizar ms registros
Las variables g a j se
corresponden con $a0..$a3,
y f se corresponde con $s0.
$sp
$sp
Antes de instruccin *
$s0
0($sp)
$t0
4($sp)
$t1
8($sp)
Convenciones
Los compiladores establecen una convencin 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
Procedimientos anidados
A
Si B recibe de A en
$a0..$a4 sus
parmetros, deber
salvarlos en la pila
antes de llamar a C
Bloque de Activacin
Bloque de Activacin
$FP
Argumentos
Direccin de
Retorno
Registros Salvados
$SP
Variables Locales
El puntero $fp, a
diferencia de $sp, se
mantiene fijo durante
toda la ejecucin del
procedimiento,
brindando un registro
base estable para
acceder a parmetros y
variables.
Convenciones
Nombre
$zero
$at
$v0-$v1
$a0-$a3
$t0-$t7
$s0-$s7
$t8-$t9
$k0-$k1
$gp
$sp
Nmero
0
1
2-3
4-7
8-15
16-23
24-25
26-27
28
29
Uso
valor constante cero
reservado para el ensamblador
resultados y evaluacin expresiones
argumentos
temporales
salvados
temporales
reservado para el sistema operativo
puntero glogal
puntero pila
Preservado
n.a.
no
no
si
no
si
no
no
si
si
Resumen
MIPS operands
Name
Example
$s0-$s7, $t0-$t9, $zero,
32 registers $a0-$a3, $v0-$v1, $gp,
$fp, $sp, $ra, $at
Memory[0],
30
words
Comments
Fast locations for data. In MIPS, data must be in registers to perform
arithmetic. MIPS register $zero alw ays equals 0. Register $at is
reserved for the assembler to handle large constants.
Accessed only by data transfer instructions. MIPS uses byte addresses, so
sequential w ords differ by 4. Memory holds data structures, such as arrays,
and spilled registers, such as those saved on procedure calls.
Memory[4294967292]
Arithmetic
Instruction
add
Example
add $s1, $s2, $s3
Meaning
$s1 = $s2 + $s3
subtract
Data transfer
Conditional
branch
Unconditional jump
$s1 = 100 * 2
16
Comments
branch on equal
beq
$s1, $s2, 25
if ($s1 == $s2) go to
PC + 4 + 100
bne
$s1, $s2, 25
if ($s1 != $s2) go to
PC + 4 + 100
slt
slti
jump
j
jr
jal
jump register
jump and link
else $s1 = 0
2500
$ra
2500
Compilacin, Ensamblage,
Linkedicin y Carga
Programa .c
Programa .s
Compilador
Ensamblador
Objeto .o
Libreras de rutinas
Montador
Ejecutable (LM)
Cargador
Memoria
Ensamblador
Traduce pseudoinstrucciones, por ejemplo
move
$t0, $t1
Es traducida a:
add
$t0,$zero, $t1
Cabecera
Segmento de Texto
Segmento de Datos
Informacin de reubicacin
Tabla de Smbolos
Informacin para depuracin
Montador, Linker
Une distintos programas objeto en un nico ejecutable
til para reutilizar cdigo ya ensamblado (por ejemplo, libreras de rutinas
standard)
Funciones:
Sita simblicamente en memoria los datos y el cdigo
Determina las direcciones de los datos y de las etiquetas de instrucciones
Resuelve las referencias externas
Convencin MIPS de
distribucin de memoria
$sp
7fff ffff
Pila
Datos Dinmicos
$gp
pc
1000 8000
1000 0000
0040 0000
0000 0000
Datos Estticos
Cdigo
Reservado
Cargador
Para ejecutar el programa, el sistema operativo realiza
las siguientes acciones:
Lee la cabecera del archivo ejecutable para determinar el
tamao de los segmentos de cdigo 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)
FIN
MIPS