You are on page 1of 25

Iniciaci

on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

3. Instrucciones: lenguaje de la maquina


Fundamentos de Computadores
Ingeniera de Telecomunicacion

l Dura
n Daz
Rau
Departamento de Autom
atica
Escuela Polit
ecnica Superior

Curso academico 20092010

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

1 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Contenidos

Iniciaci
on a la arquitectura de la maquina MIPS

Repertorio de instrucciones y modos de direccionamiento

Subrutinas

Programando y ejecutando

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

2 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Introduccion

Para manejar la maquina, hablamos su lenguaje.


Las palabras son instrucciones.
El vocabulario es el ((repertorio de instrucciones)).

Las instrucciones deben ser


lo mas sencillas que sea posible, pero. . .
deben permitir cualquier operacion, es decir, el repertorio debe
ser completo.

En la practica, los repertorios de instrucciones de todas las


maquinas se parecen.

Revisi
on: 1.8

l Dura
n Daz
Rau

3 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Concepto de programa almacenado

La idea clave de von Neumann es representar las instrucciones


mediante c
odigos numericos, susceptibles de ser almacenados
en memoria como cualquier otro tipo de dato.
Nosotros no manejamos directamente los codigos numericos,
sino un mnem
onico asociado a cada instruccion.
Al conjunto de todos los mnemonicos lo llamamos lenguaje
maquina.
Existe un formato de instruccion, que nos permitira traducir
los c
odigos numericos a lenguaje maquina y viceversa.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

4 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Arquitectura MIPS

Tipo RISC (reduced intruction set computer):


esto significa mnimo n
umero de instrucciones, todas muy
simples.
Dotado con 32 registros de proposito general y el contador de
programa, todos ellos de 32 bits.
Observaci
on
Limitar el n
umero de registros es bueno para poder conseguir una
elevada velocidad de operacion en el hardware.

Revisi
on: 1.8

l Dura
n Daz
Rau

5 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Arquitectura MIPS

Esta arquitectura es del tipo carga-almacenamiento:


S
olo permite operaciones con valores en los registros.
Interact
ua con la memoria por medio de u
nicamente un par de
instrucciones de carga (lectura de memoria a registro) y
almacenamiento (escritura de registro a memoria).

La memoria es como un gran vector, direccionable byte a byte.


Lo normal es acceder en direcciones m
ultiplos del tama
no
accedido.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

6 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Excursus: acceso a memoria big endian

El byte 0 esta en la posicion mas alta.


Usado en IBM 370, Sun SPARC, HP-PARISC, etc.
31

24

23

8
4
0

16

15

9
5
1

10
6
2

11
7
3

Direcciones
altas

Direcciones
bajas

Revisi
on: 1.8

l Dura
n Daz
Rau

7 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Excursus: acceso a memoria little endian

El byte 0 esta en la posicion mas baja.


Usado en x86, Digital VAX, Digital Alpha, Digital Unix, etc.
31

24
11
7
3

23

16
10
6
2

15

8
9
5
1

0
8
4
0

Direcciones
altas

Direcciones
bajas

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

8 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Arquitectura MIPS: registros

Los registros se nombran $0, $1,. . . ,$31.


Son casi de proposito general, excepto:
el registro 1, llamado $at, reservado al ensamblador;
los registros 2627, llamados $k0 y $k1, reservados al kernel;
los registros 2831, reservados a ciertos punteros.

El resto tiene un uso convenido, pero arbitrario.


Al final, todos tienen un sinonimo. Veamos el siguiente cuadro.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

9 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Nombres de los registros en MIPS


Nombre
$zero
$v0$v1
$a0$a3
$t0$t7
$s0$s7
$t8$t9
$gp
$sp
$fp
$ra

N
umero
0
23
47
815
1623
2425
28
29
30
31

Uso
constante 0
resultados, evaluacion de expresiones
argumentos
temporales
preservados en llamadas
temporales
puntero global
puntero de pila
puntero de cuadro
direccion de retorno

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

10 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Instrucciones para operaciones aritmeticas


C
omo ensamblamos un codigo como este?
Ejemplo en C
int i, j, f, g, h;
f = (g + h) - (i + j);
Podemos asignar las variables a registros y usar la
instrucciones de suma y resta enteras:
Lo mismo, ensamblado
add $t0, $s3, $s4
add $t1, $s0, $s1
sub $s2, $t0, $t1
en donde las instrucciones de suma y resta significan:
Regs[x] = Regs[y ] Regs[z]
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

11 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Instrucciones de acceso a memoria

Ejemplo en C
int g, h, A[100];
g = h + A[8];
Lo mismo, ensamblado
lw $t0, 32($s2)
add $s0, $t0, $s1

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

12 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Instrucciones de acceso a memoria


Ejemplo en C
int h, A[100];
A[4] = h + A[8];
A[4] += 5;
Lo mismo, ensamblado
lw
$t0, 32($s1)
add $t0, $t0, $s0
sw
$t0, 16($s1) ; se puede eliminar
addi $t0, $t0, 5
sw
$t0, 16($s1)
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

13 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Instrucciones de acceso a memoria


Ejemplo en C
int i, g, h, A[100];
g = h + A[i];
Lo mismo, ensamblado
add $t0, $s0, $s0
add $t0, $t0, $t0
add $t0, $t0, $s3
lw $t1, 0($t0)
add $s1, $s2, $t1
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

14 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Observaciones respecto a lo visto

En un programa hay mas variables que registros. . .


p
onganse en registros las variables mas usadas.

El direccionamiento tipo base + desplazamiento es u


til para
direccionar vectores y campos de estructuras.
Los operandos de todas las instrucciones estan siempre en
registros.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

15 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Instrucciones de desplazamiento logico y aritmetico

Operaci
on
Shift left
Shift right
AND bit a bit
OR bit a bit

en C
<<
>>
&
|

en ensamblador
sll $s1,$s2,d
srl $s1,$s2,d
and $s1,$s2,$s3
or $s1,$s2,$s3

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

16 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Resumen de instrucciones basicas


Instrucci
on
add $r3, $r2, $r1
sub $r3, $r2, $r1
addi $r2, $r1, n
lw $r2, n($r1)
sw $r1, n($r2)
sll $r1, $r2, d
srl $r1, $r2, d
and $r1, $r2, $r3
or $r1, $r2, $r3

Funci
on
$r3 $r1 + $r2
$r3 $r1 - $r2
$r2 $r1 + n
$r2 M[$r1 + n]
M[$r2 + n] $r1
$r1 $r2 << d
$r1 $r2 >> d
$r1 $r2 & $r3
$r1 $r2 | $r3

Atenci
on: El n
umero n puede ser positivo o negativo.
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

17 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Tomando decisiones

La gran potencia de la programacion es la toma dinamica de


decisiones: para ello introducimos los saltos condicionales.
La idea es que la ejecucion del codigo salte a una zona u
otra en funci
on del resultado de la comparacion de dos
registros.
Las instrucciones basicas son
beq $r1, $r2, Etiq1 ; Ir a Etiq1 si $r1 = $r2
bne $r1, $r2, Etiq2 ; Ir a Etiq2 si $r1 =
6 $r2
Tambien existe el salto incondicional
j Etiqueta ; salta a Etiqueta incondicionalmente.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

18 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Ensamblamos una sentencia if-then-else


Ejemplo en C
int i, j, f, g, h;
if (i == j) f = g + h; else f = g - h;
Lo mismo, ensamblado
bne $s0, $s1, Else
add $s2, $s3, $s4
j Fin
Else:
sub $s2, $s3, $s4
Fin:
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

19 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Ensamblamos un bucle
Ejemplo en C
int i, j, k, A[100];
while (A[i] == k) i = i + j;
Lo mismo, ensamblado
Bucle: add $t0, $s0, $s0
add $t0, $t0, $t0
add $t0, $t0, $s3
lw $t1, 0($t0)
bne $t1, $s2, Fin
add $s0, $s0, $s1
j
Bucle
Fin:
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

20 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Mas instrucciones de control de flujo

Para comparar un menor que tenemos:


slt $r3, $r1, $r2
$r3 recibe un 1 si $r1 < $r2 y un 0 en caso contrario.
Tenemos tambien
slti $r2, $r1, n
$r2 recibe un 1 si $r1 < n y un 0 en caso contrario.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

21 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Y otra instruccion de salto

Tenemos una instruccion que nos permite saltar a una


direcci
on variable, que este contenida en un registro:
jr $r1
La instrucci
on siguiente a esta sera la que resida en la
direcci
on que esta contenida en el registro $r1.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

22 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Resumen de instrucciones de control de flujo

Instrucci
on
beq $r1, $r2, etiq
bne $r1, $r2, etiq
slt $r1, $r2, $r3
slti $r1, $r2, n
j etiq
jr $r1
jal etiq

Funci
on
($r1 == $r2)? $PC $PC+etiq :
($r1 != $r2)? $PC $PC+etiq :
($r2 < $r3)? $r1 1 : $r1 0
($r2 < n)? $r1 1 : $r1 0
$PC etiq
$PC $r1
$ra $PC+4; $PC etiq

Atenci
on: Como antes, el n
umero n puede ser positivo o negativo.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

23 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones

Las instrucciones se representan binariamente, usando bytes.


En MIPS, todas las instrucciones tienen 4 bytes.
Los 32 bits se reparten en campos, algunos de los cuales son
fijos.
De esta forma, la interpretacion de la instruccion es mas
sencilla y uniforme.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

24 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones


Para las instrucciones tipo R (varios registros involucrados):
op code
6 bits

RS
5 bits

RT
5 bits

RD
5 bits

SHAMT
5 bits

FUNC
6 bits

Significado de los campos


op code: codigo de operacion basica
RS:
registro fuente 1
RT:
registro fuente 2
RD:
registro destino
SHAMT: shift amount
FUNC:
codigo de funcion concreta

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

25 / 50

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones

Para las instrucciones tipo I (valores inmediatos involucrados):


op code
6 bits

RS
5 bits

RT
5 bits

direccion
16 bits

Significado de los campos


op code: codigo de operacion basica
RS:
registro fuente
RT:
registro destino
direcci
on: n
umero de 16 bits (32767)

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

26 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones

Para las instrucciones tipo J (transferencia de control):


op code
6 bits

direccion de salto
26 bits

Significado de los campos


op code:
c
odigo de operacion basica
direcci
on de salto: direccion de la siguiente instruccion a ejecutar

Revisi
on: 1.8

l Dura
n Daz
Rau

27 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones basicas

add
sub
addi
lw
sw
j

Tipo
R
R
I
I
I
J

Opcode
0
0
8
35
43
2

RS
reg
reg
reg
reg
reg
n/a

RT
reg
reg
reg
reg
reg
n/a

RD
reg
reg
n/a
n/a
n/a
n/a

SHAMT
0
0
n/a
n/a
n/a
n/a

FUNC
32
34
n/a
n/a
n/a
n/a

dir
n/a
n/a
inm
dir
dir
n/a

Traducir el lenguaje ensamblador a codigo maquina es el papel del


as (o programa ensamblador).

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

28 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones de control

beq
bne
slt
jr
jal

Tipo
I
I
R
R
J

Opcode
4
5
0
0
3

RS
reg
reg
reg
reg
n/a

RT
reg
reg
reg
0
n/a

RD
n/a
n/a
reg
0
n/a

SHAMT
n/a
n/a
0
0
n/a

FUNC
n/a
n/a
42
8
n/a

dir
dir
dir
n/a
n/a
n/a

Revisi
on: 1.8

l Dura
n Daz
Rau

29 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Representacion de las instrucciones logicas

sll
srl
sra
and
or

Tipo
R
R
R
R
R

Opcode
0
0
0
0
0

RS
0
0
0
reg
reg

RT
reg
reg
reg
reg
reg

RD
reg
reg
reg
reg
reg

SHAMT
d
d
d
0
0

FUNC
0
2
3
36
37

dir
n/a
n/a
n/a
n/a
n/a

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

30 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Instrucciones b
asicas
Instrucciones de control de flujo
Representaci
on de las instrucciones

Resumen de modos de direccionamiento

Registro: los operandos estan en registros.

Inmediato: El operando es una constante contenida en la


propia instrucci
on.

Indexado, (base mas desplazamiento): Un operando esta en


memoria. La direcci
on es la suma del contenido de un registro
y de un valor inmediato.

Relativo a $PC: La direccion del operando es la suma del


registro $PC mas una constante contenida en la instruccion.

Directo: La direcci
on de salto esta (casi) contenida en la
instrucci
on.

Revisi
on: 1.8

l Dura
n Daz
Rau

31 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Subrutinas o procedimientos

Las subrutinas o procedimientos estructuran el codigo: se les


pasan valores (argumentos) y devuelven resultados.
Permiten el reuso del software.
Aslan unas piezas del codigo de otras, facilitando el
mantenimiento.
Es un sirviente al que se le dan unos datos (los argumentos)
y nos devuelve un resultado (valor de retorno).

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

32 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Subrutinas o procedimientos

Para ejecutar correctamente una subrutina, los pasos son:


Actor
Principal:
Principal:
Subrutina:
Subrutina:
Subrutina:
Subrutina:

n
Accio
coloca argumentos en un lugar accesible a la subrutina.
transfiere el control.
reserva espacio para su ejecucion.
ejecuta su funcion.
coloca el resultado en un lugar accesible al principal.
devuelve el control al punto de partida.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

33 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Mas registros. . .

Para el intercambio de datos se utilizan ciertos registros


convenidos:
Nombre Uso
$a0$a3 para pasar argumentos
$v0$v1 para devolver los resultados
$ra
para la direccion de retorno

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

34 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

. . . y una nueva instruccion

Una instrucci
on especialmente pensada nos permite saltar
al comienzo de la subrutina al tiempo que se guarda la
direcci
on de retorno en el registro $ra.
jal Procedimiento
El nombre jal significa jump-and-link. El sentido es que
conservamos en $ra la direccion a la que se debe retornar.
La direcci
on de la instruccion que se ha de ejecutar se guarda
en el registro de instruccion, o $PC. Por tanto la direccion que
se ha de guardar en $ra es $PC+4.

Revisi
on: 1.8

l Dura
n Daz
Rau

35 / 50

3. Instrucciones: lenguaje de la m
aquina

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Resumen de llamada a la subrutina

Los pasos para la llamada seran:


1

El principal coloca en $a0$a3 los argumentos necesarios para


la ejecuci
on de la subrutina.

Esta
realiza los calculos y devuelve el/los resultado(s) en
$v0$v1.
Devuelve el control con un simple jr $ra.

Y si no bastan con los registros de que se dispone? Ahora lo


vemos.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

36 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Un nuevo registro y la pila


Es muy probable que una subrutina necesite mas registros que
los $a0$a3 y $v0$v1.
Antes de poder usar otros registros, estos se deben archivar.
Para ello, se dedica un trozo de memoria, suficientemente
grande, como repositorio temporal.
Este repositorio se llama pila (en ingles, stack).
Se usa un registro, $sp, para saber en donde comienza el
espacio libre. Cada vez que se almacena o se extrae algo, se
ajusta.
Por razones historicas, crece hacia las direcciones bajas de
memoria.
Las operaciones de almacenamiento y extraccion se llaman
push y pop, respectivamente.
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

37 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Ensamblando una subrutina

Subrutina en C
int sub1(int g, int h, int i, int j)
{
int f;
f = (g + h) - (i + j);
return f;
}

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

38 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Ensamblando una subrutina


Subrutina
sub1:
subi
sw
sw
sw
add
add
sub

en ensamblador
$sp,
$t0,
$t1,
$s0,

$sp, 12
8($sp)
4($sp)
0($sp)

$t0, $a0, $a1


$t1, $a2, $a3
$s0, $t0, $t1

...
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

39 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Ensamblando una subrutina

Subrutina en ensamblador
...
add

$v0, $s0, $zero

lw
lw
lw
addi

$s0,
$t1,
$t0,
$sp,

jr

$ra

0($sp)
4($sp)
8($sp)
$sp, 12

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

40 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Convenios sobre el uso de registros

Convenimos en que los registros $t0$t9 son temporales y no


hace falta guardarlos antes de usarlos.
En cambio, los registros $s0$s7 s deben ser salvados
antes de ser usados.
En la subrutina anterior nos ahorramos dos pushes.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

41 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Y si la subrutina llama a otra?

Si una subrutina llama a otra, probablemente necesita usar


tambien los registros $a0$a3, y guardar en $ra la direccion
de retorno. Hay un conflicto en el uso de los registros.
La soluci
on es guardarlos en la pila antes de modificarlos,
restaurando su valor al final.

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

42 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Subrutina recursiva

Subrutina en C
int fact(int n)
{
if (n == 1) return 1;
else
return n*fact(n - 1);
}

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

43 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Subrutina recursiva
Subrutina ensamblada (I)
fact:
subi $sp, $sp, 8
sw
$ra, 4($sp)
sw
$a0, 0($sp)
subi $t0, $a0, 1
bne
$t0, $zero, F1
addi
addi
jr

$v0, $zero, 1
$sp, $sp, 8
$ra

...
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

44 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Subrutina recursiva
Subrutina ensamblada (II)
...
F1: subi
jal

$a0, $a0, 1
fact

lw
lw
addi

$a0, 0($sp)
$ra, 4($sp)
$sp, $sp, 8

mul
jr

$v0, $v0, $a0


$ra
Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

45 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Estado de los registros en llamadas a subrutinas

Por convenio, el comportamiento es as:


Preservados
$s0$s7
$sp
$ra
Memoria encima de $sp

No preservados
$t0$t9
$a0$a3
$v0$v1
Memoria debajo de $sp

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

46 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Ciclo de programacion

Programa C

Cdigo ensamblado

Compilador

Cdigo mquina

Ejecutable

Linker

Ensamblador

Programa cargado

Cargador

Figura: Procesos y resultados del ciclo de programacion

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

47 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Estructura del programa cargado


$sp

$gp

7fff fffc

1000 8000

Pila

Datos dinmicos
Datos estticos

1000 0000
Cdigo (texto)
pc

0040 0000
Reservado
0

Figura: Zonas de memoria, una vez cargado el programa


Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

48 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Estructura de un fichero objeto


Cabecera fichero objeto

Segmento de cdigo

Segmento de datos

Informacin de realojo

Tabla de smbolos

Informacin de depuracin

Figura: Partes de un fichero objeto, con extension .o


Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

49 / 50

Iniciaci
on a la arquitectura de la m
aquina MIPS
Repertorio de instrucciones y modos de direccionamiento
Subrutinas
Programando y ejecutando

Lenguajes de programacion de alto nivel

COBOL, PL/I
FORTRAN
PASCAL, C
ADA
Java, C++, SmallTalk
...

Revisi
on: 1.8

l Dura
n Daz
Rau

3. Instrucciones: lenguaje de la m
aquina

50 / 50

You might also like