MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
1
ARQUITECTURA DE
COMPUTADORES
1. Introduccin.
2. Instrucciones aritmticas.
3. Instrucciones de transferencia de datos.
4. Representacin de las instrucciones.
5. Instrucciones para tomar decisiones.
6. Procedimientos.
7. Constantes.
8. Direccionamiento en saltos y
bifurcaciones.
9. Ejemplos.
Instrucciones.
Grado de Ingeniera en Informtica
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
2
-Para dar rdenes al hardware del computador hay que hablar
en su lenguaje.
-Las instrucciones que utilizaremos provienen de la MIPS
Computer Company.
-Ejemplo de instruccin MIPS:
add a, b, c
#Suma las dos variables b y c ponga su suma en a.
-Ejemplo: Hacer la siguiente suma: a=b+c+d+e
1. Introduccin.
add a, b, c # La suma de b y c se coloca en a.
add a, a, d # La suma de b, c y d est ahora en a.
add a, a, e # La suma de b, c, d y e est ahora en a.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 3
2. Instrucciones aritmticas.
Categora Instruccin Ejemplo Significado Comentario
Aritmtica
Sumar add a,b,c a=b+c Siempre 3
operandos
Restar sub a,b,c a=b-c Siempre 3
operandos
Ejemplo. Se tiene la siguiente sentencia en lenguaje C que contiene cinco
variables: f=(g+h)-(i+j)
Solucin
Esta sentencia podra ser compilada en las tres instrucciones MIPS siguientes:
add t0,g,h # La variable temporal t0 contienen g+h.
add t1,i,j # La variable temporal t1 contiene i+j.
sub f,t0,t1 # f es t0-t1, es decir (g+h)-(i+h)
Nota.- El compilador ha creado dos nuevas vbles t0 y t1.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
Nombre Nmero Utilizacin
$zero 0 Constante 0
$at 1 Reservado por el ensamblador
$k0 y $k1 26 y 27 Reservado por el sistema operativo
$v0 y $v1 2 y 3 Paso de valores entre funciones
$a0..$a3 4..7 Paso de argumentos a las rutinas (el resto se pasan a la pila)
$t0..$t9 8..15,
24 y 25
Temporal (no necesitan ser preservado en la llamada)
$s0..$s7 16..23 Guardado temporalmente (preservado a travs de llamada)
$gp 28 Pntero de rea global
$sp 29 Puntero de pila (apunta a la primera posicin libre)
$fp 30 Puntero de encuadre
$ra 31 Direccin de vuelta de una llamada de procedimiento
Registros de MIPS y convenio de utilizacin
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 5
Los operandos de las instrucciones aritmticas no pueden ser variables
cualesquiera, deben proceder de una serie limitada de posiciones especiales
denominadas registros.
El tamao de un registro en la arquitectura MIPS es de 32 bits.
MIPS tiene 32 registros: $0, $1,...,$31.
En el ejemplo anterior, si se le asignan los registros $16, $17, $18, $19 y $20 a
las variables f, g, h, i, y j respectivamente, tenemos:
add $8,$17,$18
add $9,$19,$20
Sub $16,$8,$9
2. Instrucciones aritmticas.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
6
Categora Instruccin Ejemplo Significado Comentario
Transferencia
de datos
Cargar
palabra
lw $1,100($2) $1=Memoria[$2+100] Dato de
memoria a
registro
Almacenar
palabra
sw $1,100($2) Memoria[$2+100]=$1 Dato de
registro a
memoria
3. Instrucciones de transferencia de datos.
Las operaciones aritmticas slo se realizan en los registros, por lo que
existen instrucciones que transfieren datos entre la memoria y los registros. A
estas instrucciones se las denominan instrucciones de transferencia de datos.
Ejemplo lw -> cargar palabra (load word).
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
7
3. Instrucciones de transferencia de datos.
Ejemplo:
Suponer que A es un array y que el compilador tiene asociadas
las vbles g, h e i a los registros $17, $18 y $19. Supongamos
tambin que el array comienza en la direccin 100. Traducir la
siguiente sentencia C:
g=h+A[i]
Nota.- utilizar $8 como registro temporal ($t0).
Solucin:
lw $8,100($19) # El reg temporal $8 obtiene A[i]
add $17,$18,$8 # g=h+A[i]
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
8
3. Instrucciones de transferencia de datos.
Ejemplo:
Con los mismos datos que el ejemplo anterior...
cul es el cdigo ensamblador MIPS para la siguiente
instruccin C?
A[i]=h+A[i]
Solucin:
lw $8,100($19) # El reg temporal $8 obtiene A[i]
add $8,$18,$8 # El reg temporal $8 obtiene h+A[i]
sw $8,100($19) # Almacena h+A[i] en A[i]
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
9
4. Representacin de las instrucciones.
Instruccin MIPS: Tipo R (Registro).
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt
5 bits
funct
6 bits
op.- operacin de la instruccin.
rs.- primer registro del operando fuente.
rt.- segundo registro del operando fuente.
rd.- registro del operando destino. Obtiene el resultado de la operacin.
shamt.- Cantidad de desplazamiento.
funct.- (funcin), este campo selecciona la variante de la operacin del campo op.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
10
4. Representacin de las instrucciones.
Ejemplo: add $8,$17,$18
op
6 bits
rs
5 bits
rt
5 bits
rd
5 bits
shamt
5 bits
funct
6 bits
0 17 18 8 0 32
000000 10001 10010 01000 00000 100000
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
11
4. Representacin de las instrucciones.
Instruccin MIPS: Tipo I (Instrucciones de transf. de datos).
op
6 bits
rs
5 bits
rt
5 bits
direccin
16 bits
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
12
4. Representacin de las instrucciones.
Codificacin de instrucciones MIPS:
Instr. Formato op rs rt rd shamt funct direccin
add R 0 reg reg reg 0 32 n.a.
add R 0 reg reg reg 0 34 n.a.
lw I 35 reg reg n.a. n.a. n.a. direccin
sw I 43 reg reg n.a. n.a. n.a. direccin
Ejemplo:
Sigamos con nuestro ejemplo anterior...
Suponiendo que el registro $19 tiene el valor 4 x i, la sentencia en C:
A[i]=h+A[i] se compila en...
lw $8,1200($19) # El reg temporal $8 obtiene A[i]
add $8,$18,$8 # El reg temporal $8 obtiene h+A[i]
sw $8,1200($19) # Almacena h+A[i] en A[i]
Cul es el cdigo del lenguaje mquina MIPS para estas tres instrucciones?
Nota.- Direccin de comienzo del array A (1200
10
) es 0000 0100 1011 0000
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
13
4. Representacin de las instrucciones.
Solucin:
Op Rs Rt (Rd) (shamt) Direccin/funct
35 19 8 1200
0 18 8 8 0 32
43 19 8 1200
100011 10011 01000 0000 0100 1011 0000
000000 10010 01000 01000 0000 100000
101011 10011 01000 0000 0100 1011 0000
Lw
Add
sw
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
14
5. Instrucciones para tomar decisiones.
Categora Instruccin Ejemplo Significado Comentario
Salto
condicional
Saltar si
igual
beq $1,$2,L Si ($1==$2) ir a L Test de igual y
salta
Saltar si no
igual
bne $1,$2,L Si ($1!=$2) ir a L Test de no igual
y salta
Inic. si
menor
slt $1,$2,$3 Si ($2<$3) $1=1;
si no $1=0
Compara
menor que para
beq, bne
Bifurcacin
incondicional
Bifurcar j 10000 Ir a 10000 Bifurca a
direccin
destino
Bifurcar a
un registro
jr $31 Ir a $31 Para sentencias
switch
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
15
Los compiladores MIPS utilizan slt, beq, bne y el valor fijo 0 en el registro
$0 para crear todas las condiciones relativas.
Ejemplo 1:
Realizar un salto a la etiqueta L en el caso que la variable a sea menor que
la variable b.
Nota.-
La variable a se encuentra en $16
La variable b se encuentra en $17
$1 es un registro temporal libre.
5. Instrucciones para tomar decisiones.
Solucin:
slt $1,$16,$17 # $1 vale 1 si $16<$17 (a<b)
bne $1,$0, L # va a L si $1 != $0 (si a<b)
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
16
Ejemplo 2:
Las cinco variables f, g, h, i y j pertenecen a los registros $16, $17, $18,
$19 y $20. Obtener el cdigo MIPS para el siguiente cdigo C:
if (i==j) goto L1;
f=g+h;
L1: f=f-i;
5. Instrucciones para tomar decisiones.
Solucin:
beq $19,$20,L1 # ir a L1 si i es igual a j
add $16,$17,$18 # f=g+h (se hace cuando i y j no son iguales)
L1: sub $16,$16,$19 # f=f-i
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
17
Ejemplo 3:
Utilizando las mismas variables y registros del ejemplo anterior. Obtener
el cdigo MIPS para el siguiente cdigo C:
if (i==j)
f=g+h;
else
f=g-h; ...
5. Instrucciones para tomar decisiones.
Solucin:
bne $19,$20,Else # ir a Else si i es diferente a j
add $16,$17,$18 # f=g+h
j Exit # Ir a Exit
Else: sub $16,$17,$18 # f=g-h
Exit: ...
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 18
Ejemplo 4: Obtener el cdigo MIPS para el siguiente cdigo C:
Salto: g=g+A[i];
i=i+j;
if (i != h) goto Salto;
Supongamos que el array comienza en la direccin 100.
Las variables g, h, i y j se asocian a los registros $17, $18, $19 y $20.
En el registro $10 se encuentra el valor 4.
mult a,b,c hace la siguiente multiplicacin: a=b*c
Utilizar $9 y $8 como registros temporales.
Nota.- Recordar que el direccionamiento en bytes significa que necesitamos
multiplicar el ndice i por 4 antes de que podamos utilizarlo en la instruccin de
carga.
5. Instrucciones para tomar decisiones.
Solucin:
Salto: mult $9,$19,$10 # reg temporal $9=i*4
lw $8,100($9) # reg temporal $8=A[i]
add $17,$17,$8 # g=g+A[i]
add $19,$19,$20 # i=i+j
bne $19,$18,Salto # ir a Salto si i es distinto de j
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
19
Ejemplo 5:
Obtener el cdigo MIPS para el siguiente cdigo C:
while (A[i]==k)
i=i+j;
Supongamos que el array comienza en la direccin 100.
Las variables i, j y k se asocian a los registros $19, $20 y $21.
En el registro $10 se encuentra el valor 4.
Utilizar $9 y $8 como registros temporales.
5. Instrucciones para tomar decisiones.
Solucin:
Loop: mult $9,$19,$10 # reg temporal $9=i*4
lw $8,100($9) # reg temporal $8=A[i]
bne $8,$21,Exit # ir a Exit si A[i] es diferente a k
add $19,$19,$20 # i=i+j
j Loop # ir a Loop
Exit:
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
20
Ejemplo 6:
Obtener el cdigo MIPS para el siguiente cdigo C:
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;
}
Las variables de la i a la k se asocian a los registros del $16 al $21.
En el registro $10 se encuentra el valor 4.
Utilizar $9 y $8 como registros temporales.
Nota.- MIPS crea un array que contendr las etiquetas L0, L1, L2 y L3.
Supongamos que este array comienza en la direccin 100.
5. Instrucciones para tomar decisiones.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 21
5. Instrucciones para tomar decisiones.
Ejemplo 6: Continuacin... 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;
}
Solucin:
Loop: mult $9,$10,$21 # reg temporal $9=k*4
lw $8,100($9) # reg temp. $8 valdr L0, L1, L2 y L3
jr $8 # bifurca segn el registro $8
L0: add $16,$19,$20 # si k=0, f vale i+j
j Exit # Salimos, vamos a Exit
L1: add $16,$17,$18 # si k=1, f vale g+h
j Exit # Salimos, vamos a Exit
L2: add $16,$17,$18 # si k=2, f vale g-h
j Exit # Salimos, vamos a Exit
L3: add $16,$19,$20 # si k=3, f vale i-j
Exit: # fin de la sentencia switch
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
22
6. Procedimientos.
Categora Instruccin Ejemplo Significado Comentario
Bifurcacin
incondicional
Bifurcar y
enlaza
jal 10000 $31=PC+4
Ir a 10000
Para llamada a
procedimiento
jal bifurca a una direccin y simultneamente guarda la direccin de la siguiente
instruccin en el registro $31 direccin de vuelta.
Qu ocurre cuando un procedimiento llama a otro procedimiento?
A B C
$29 puntero al tope de la pila.
La pila crece desde las posiciones superiores a las inferiores.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
23
6. Procedimientos.
Ejemplo: Llamada entre procedimientos.
A B C
A:
jal B
B:
sub $29,$29,$24
sw $31,0($29)
jal C
lw $31,0($29)
add $29,$29,$24
jr $31
C:
jr $31
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
24
7. Constantes.
Categora Instruccin Ejemplo Significado Comentario
Aritmtica
Sumar
inmediato
addi $1,$2,100 $1=$2+100 Usado para
sumar
constantes
Transferencia
de datos
Cargar
superior
inmediato
lui $1,100 $1=100*2
16
Cargar ctes. en
16 bits
superiores
Salto
condicional
Inicializa
menor que
inm.
slti $1,$2,100 Si ($2<100) $1=1;
si no $1=0
Compara
menor que
constante
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
25
8. Direccionamiento en saltos y bifurcaciones.
Los modos de direccionamiento en MIPS son:
Direccionamiento de registros.- donde el operando es un registro.
Direccionamiento base o desplazamiento.- donde el operando est en la
posicin de memoria cuya direccin es la suma de un registro y una
direccin de la instruccin.
Direccionamiento inmediato.- donde el operando es una constante que
est en la misma instruccin.
Direccionamiento relativo al PC.- donde la direccin es la suma del PC y
una constante de la instruccin.
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
26
9. Ejemplos.
Ejemplo 1.
Obtener el cdigo MIPS para el siguiente procedimiento en C:
intercambia(int v[], int k)
{
int temp;
temp=v[k];
v[k]=v[k+1];
v[k+1]=temp;
}
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
27
9. Ejemplos. Ej 1. Solucin.
Parte 1. Guardamos los registros:
intercambia: addi $29, $29, -12
sw $2, 0($29)
sw $15, 4($29)
sw $16, 8($29)
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
28
9. Ejemplos. Ej 1. Solucin.
Parte 2. Cuerpo del procedimiento:
# $4 contiene el argumento v
# $5 contiene el argumento k
muli $2, $5, 4 # reg $2=k*4
add $2, $4, $2 # reg $2=v+(k*4); $2 tiene la direcc de v[k]
lw $15, 0($2) # reg $15 (temp) = v[k]
lw $16, 4($2) # reg $16=v[k+1]
sw $16, 0($2) # v[k]=reg $16
sw $15, 4($2) # v[k+1]=reg $15 (temp)
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
29
9. Ejemplos. Ej 1. Solucin.
Parte 3. Restauramos los registros:
lw $2, 0($29)
lw $15, 4($29)
lw $16, 8($29)
addi $29, $29, 12
Parte 4. Vuelta al procedimiento:
jr $31
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 30
9. Ejemplos. Ej 1. Solucin. Todo junto.
#Guardar registros.
intercambia: addi $29, $29, -12
sw $2, 0($29)
sw $15, 4($29)
sw $16, 8($29)
#Cuerpo del procedimiento.
muli $2, $5, 4
add $2, $4, $2
lw $15, 0($2)
lw $16, 4($2)
sw $16, 0($2)
sw $15, 4($2)
#Restaurar registros.
lw $2, 0($29)
lw $15, 4($29)
lw $16, 8($29)
addi $29, $29, 12
#Vuelta al procedimiento.
jr $31
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
31
9. Ejemplos.
Ejemplo 2.
Obtener el cdigo MIPS para el siguiente procedimiento en C que
realiza la ordenacin de burbuja sobre un array v.
int v[10000]
ordena (int v[], int n)
{
int i, j ;
for (i=0; i<n; i=i+1) {
for (j=i-1; j>=0 && v[j]>v[j+1]; j=j-1) {
intercambia(v,j);
}
}
}
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
32
Ordenacin de un array de 10.000 nmeros enteros.
Parmetros del procedimiento:
v $4
n $5
Variables:
i $19
j $17
El cdigo consta de tres partes:
Bucle externo (vble i)
Bucle interno (vble j)
Llamada al procedimiento intercambia.
9. Ejemplos. Ej 2. Solucin.
int v[10000]
ordena (int v[], int n)
{
int i, j ;
for (i=0; i<n; i=i+1) {
for (j=i-1; j>=0 && v[j]>v[j+1]; j=j-1) {
intercambia (v,j);
}
}
}
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
33
Bucle externo:
for (i=0; i<n; i=i+1) {
9. Ejemplos. Ej 2. Solucin.
Inicializacin
Seguir mientras
Incremento
add $19,$0,$0 # i=0
cont1: slt $8,$19,$5 # reg $8=0 si $19>=$5 (i>=n)
beq $8,$0,salida1 # ir a salida1 si $19>=$5 (i>=n)
addi $19,$19,1 # i=i+1
# Cuerpo del primer bucle for
j cont1
salida1:
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 34
# Cuerpo del segundo bucle for
j cont2
salida2:
Bucle interno:
for (j=i-1; j>=0 && v[j]>v[j+1]; j=j-1) {
9. Ejemplos. Ej 2. Solucin.
Inicializacin
Seguir mientras (Y)
Decremento
addi $17,$19,-1 # j=i-1
cont2: # Primera condicin del bucle
slti $8,$17,0 # reg $8=1 si $17<0 (j<0)
bne $8,$0,salida2 # ir a salida2 si $17<0 (j<0)
addi $17,$17,-1 # j=j-1
# Segunda condicin del bucle
muli $15,$17,4 # reg $15=j*4
add $16,$4,$15 # reg $16=v+(j*4); es v[j]
lw $24,0($16) # reg $24=v[j]
lw $25,4($16) # reg $25=v[j+1]
slt $8,$25,$24 # reg $8=0 si $25>=$24
beq $8,$0,salida2 # ir a salida2 si $25>=$24
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
UCAM 2009-10 35
Llamada al procedimiento intercambia:
intercambia(v,j);
9. Ejemplos. Ej 2. Solucin.
jal intercambia
Paso de parmetros:
# Copiamos los parmetros de ordena en otros registros para dejar...
# ...libres los registros $4 y $5 (utilizados para paso de parmetros).
move $18,$4 # copia el parmetro $4 en $18
move $20,$5 # copia el parmetro $5 en $20
# Ahora nuestro procedimiento trabajar con $18 y $20
# Pasamos los parmetros al procedimiento intercambia
move $4,$18 # copia el primer parmetro (v)
move $5,$17 # copia el segundo parmetro (j)
Nota.- copiar $18 en $4 (move $4,$18) no es necesario.
1.-
2.-
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
36
Guardar los registros utilizados:
9. Ejemplos. Ej 2. Solucin.
addi $29,$29,-36 # hace sitio para 9 registros
sw $15,0($29) # guarda $15 en la pila
sw $16,4($29) # guarda $16 en la pila
sw $17,8($29)
sw $18,12($29)
sw $19,16($29)
sw $20,20($29)
sw $24,24($29)
sw $25,28($29) # guarda $25 en la pila
sw $31,32($29) # guardamos la direccin de vuelta para cuando...
# ...se llame al procedimiento intercambia
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
37
Restaurar los registros utilizados:
9. Ejemplos. Ej 2. Solucin.
lw $15,0($29) # restaura $15 de la pila
lw $16,4($29)
lw $17,8($29)
lw $18,12($29)
lw $19,16($29)
lw $20,20($29)
lw $24,24($29)
lw $25,28($29)
lw $31,32($29) # restaura $31 de la pila
addi $29,$29,36 # restaura el puntero de la pila
Y finalmente... # Vuelta a la rutina que lo invoc:
jr $31
Arquitectura de Computadores
MIPS.
01101001 01101110
01000111 01001010
move $a0,$2
addu $sp,$sp,32
00011010
38
9. Ej 2. El procedim. completo quedara...
ordenar: addi $29,$29,-36
sw $15,0($29)
sw $16,4($29)
sw $17,8($29)
sw $18,12($29)
sw $19,16($29)
sw $20,20($29)
sw $24,24($29)
sw $25,28($29)
sw $31,32($29)
move $18,$4
move $20,$5
add $19,$0,$0
cont1: slt $8,$19,$20
beq $8,$0,salida1
addi $17,$19,-1
cont2: slti $8,$17,0
bne $8,$0,salida2
muli $15,$17,4
add $16,$18,$15
lw $24,0($16)
lw $25,4($16)
slt $8,$25,$24
beq $8,$0,salida2
move $4,$18
move $5,$17
jal intercambia
addi $17,$17,-1
j cont2
salida2: addi $19,$19,1
j cont1
salida1: lw $15,0($29)
lw $16,4($29)
lw $17,8($29)
lw $18,12($29)
lw $19,16($29)
lw $20,20($29)
lw $24,24($29)
lw $25,28($29)
lw $31,32($29)
addi $29,$29,36
jr $31