Você está na página 1de 2

Gua rpida del ensamblador del MIPS 32

Registros del MIPS y usos

Llamadas al sistema

Nombre
del
registro
zero
at
v0

Nmero

Uso

Servicio

0
1
2

v1

a0
a1
a2
a3
t0..t7
s0..s7
t8, t9
k0, k1

4
5
6
7
8..15
16..23
24, 25
26, 27

gp
sp
fp
ra

28
29
30
31

Constante 0
Reservada para ensamblador
Evaluacin de expresiones y resultado de
funciones
Evaluacin de expresiones y resultado de
funciones
Argumento 1
Argumento 2
Argumento 3
Argumento 4
Temporal (no se guarda valor entre llamadas)
Temporal (el valor se guarda entre llamadas)
Temporal (no se guarda valor entre llamadas)
Reservado para el kernel del sistema
operativo
Puntero al rea global
Puntero de pila
Puntero de marco de pila
Direccin de retorno, usada por llamadas a
funcin

print_int
print_float
print_double
print_string
read_int
read_float

Cdigo de
llamada
1
2
3
4
5
6

read_double

read_string

sbrk

exit

10

Argumentos

Resultado

$a0 = entero
$f12 = real (32 bits)
$f12 = real (64 bits)
$a0 = cadena
Entero (en $v0)
Real 32 bits (
en $f0)
Real 64 bits (en
$f0)
$a0=buffer, $a1 =
longitud
$a0 = cantidad

Direccin (en
$v0)

Directivas del ensamblador


.ascii cadena
.assciiz cadena
.byte b1, ..., bn
.data
.double d1, ..., dn
.extern etiqueta n

.float f1, ..., fn


.globl smbolo
.half h1, ..., hn
.text
.word w1, ..., wn

Almacena la cadena en memoria, pero no termina con null (\0).


Almacena la cadena en memoria y coloca un null (\0) al final de esta.
Almacena n valores en bytes sucesivos de memoria
Las siguientes definiciones de datos que aparezcan se almacenan en el segmento de datos. Puede llevar un
argumento que indica la direccin a partir de donde se empezarn a almacenar los datos.
Almacena n valores reales de doble precisin en direcciones consecutivas de memoria.
Declara que los datos almacenados a partir de etiqueta ocupan n bytes y que etiqueta es un smbolo global. Esta
directiva permite al ensamblador almacenar datos en una zona del segmento de datos que puede ser accedida a
travs del registro $gp
Almacena n reales de precisin simple en posiciones consecutivas de memoria
Declara un smbolo global que se puede referenciar desde otros programas
Almacena n nmeros de 16 bits en medias palabras consecutivas
Las instrucciones que siguen a esta directiva se ponen en el segmento de cdigo. Pude llevar un parmetro que
indica donde empieza la zona de cdigo.
Almacena n cantidades de 32 bits (una palabra) en posiciones consecutivas de memoria.

Instrucciones aritmticas y lgicas


En todas las instrucciones siguientes, Src2 puede ser tanto un registro como un valor inmediato (un entero de 16 bits).
abs Rdest, Rsrc
add Rdest, Rsrc1, Src2
addu Rdest, Rsrc1, Src2
and Rdest, Rsrc1, Src2
div Rsrc1, Rsrc2
divu Rsrc1, Rsrc2
div Rdest, Rsrc1, Src2
div Rdest, Rsrc1, Src2
mul Rdest, Rsrc1, Src2
mulo Rdest, Rsrc1, Src2
mulou Rdest, Rsrc1, Src2
mult Rsrc1, Rsrc2
mult Rsrc1, Rsrc2
neg Rdest, Rsrc
negu Rdest, Rsrc
nor Rdest, Rsrc1, Src2
not Rdest, Rsrc
or Rdest, Rsrc1, Src2
rem Rdest, Rsrc1, Src2
rol Rdest, Rsrc1, Src2
ror Rdest, Rsrc1, Src2
sll Rdest, Rsrc1, Src2
srl Rdest, Rsrc1, Src2
sra Rdest, Rsrc1, Rsrc2
sub Rdest, Rsrc1, Src2
subu Rdest, Rsrc1, Src2
xor Rdest, Rsrc1, Src2

Valor absoluto
Suma con desbordamiento
Suma sin desbordamiento
Operacin lgica AND
Divide con desbordamiento. Deja el cociente en el registro lo y el resto en el registro hi
Divide sin desbordamiento. Deja el cociente en el registro lo y el resto en el registro hi
Divide con desbordamiento
Divide sin desbordamiento
Multiplica sin desbordamiento
Multiplica con desbordamiento
Multiplicacin con signo y con desbordamiento
Multiplica, la parte baja del resultado se deja en el registro lo y la parte alta en el registro hi
Multiplica con signo, la parte baja del resultado se deja en el registro lo y la parte alta en el registro hi
Niega el valor (detecta desbordamiento)
Niega el valor (sin desbordamiento)
Operacin Lgica NOR
Operacin Lgica NOT
Operacin Lgica OR
Resto (Mdulo), pone el resto de dividir Rsrc1 por Src2 en el registro Rdest.
Rotar a la izquierda
Rotar a la derecha
Desplazamiento lgico de bits a la izquierda
Desplazamiento lgico de bits a la derecha
Desplazamiento aritmtico de bits a la derecha
Resta (con desbordamiento)
Resta (sin desbordamiento)
Operacin Lgica XOR

Instrucciones de manipulacin de constantes


li Rdest, inmediato
lui Rdest, inmediato

Cargar valor inmediato


Cargar los 16 bits de la parte baja del valor inmediato en la parte alta del registro. Los bits de la parte baja se
pone a 0.

Instrucciones de comparacin
En todas las instrucciones siguientes, Src2 puede ser un registro o un valor inmediato (de 16 bits).
seq Rdest, Rsrc1, Src2
sge Rdest, Rsrc1, Src2
sgeu Rdest, Rsrc1, Src2
sgt Rdest, Rsrc1, Src2
sgtu Rdest, Rsrc1, Src2
sle Rdest, Rsrc1, Src2
sleu Rdest, Rsrc1, Src2
slt Rdest, Rsrc1, Src2
sltu Rdest, Rsrc1, Src2
sne Rdest, Rsrc1, Src2

Pone Rdest a 1 si Rsrc1 y Src2 son iguales, en otro caso pone 0.


Pone Rdest a 1 si Rsrc1 es mayor o igual a Src2, y 0 en otro caso (para nmeros con signo).
Pone Rdest a 1 si Rsrc1 es mayor o igual a Src2, y 0 en otro caso (para nmeros sin signo).
Pone Rdest a 1 si Rsrc1 es mayor que Src2, y 0 en otro caso (para nmeros con signo).
Pone Rdest a 1 si Rsrc1 es mayor que Src2, y 0 en otro caso (para nmeros sin signo).
Pone Rdest a 1 si Rsrc1 es menor o igual a Src2, en otro caso pone 0 (para nmeros con signo).
Pone Rdest a 1 si Rsrc1 es menor o igual a Src2, en otro caso pone 0 (para nmeros sin signo).
Pone Rdest a 1 si Rsrc1 es menor a Src2, en otro caso pone 0 (para nmeros con signo).
Pone Rdest a 1 si Rsrc1 es menor a Src2, en otro caso pone 0 (para nmeros sin signo).
Pone Rdest to 1 si el registro Rsrc1 no es igual a Src2 y 0 en otro caso.

Instrucciones de almacenamiento
sb Rsrc, direccin
sd Rsrc, direccin
sh Rsrc, direccin
sw Rsrc, direccin

Almacena el byte ms bajo de Rsrc en la direccin indicada.


Almacena un double (64 bits) en la direccin indicada, el valor de 64 bits es proviene de Rsrc y Rsrc + 1.
Almacena la media palabra (16 bits) baja de un registro en la direccin de memoria indicada.
Almacena la Rsrc en la direccin indicada.

Instrucciones de bifurcacin y salto


En todas las instrucciones siguientes, Src2 puede ser un registro o un valor inmediato. Las instrucciones de bifurcacin (branch) usan un desplazamiento de 16
bits con signo; por lo que se puede saltar 215-1 instrucciones hacia delante o 215 instrucciones hacia atrs. Las instrucciones de salto (jump) contienen un campo
de direccin de 26 bits.
b etiqueta
Bif. incondicional a la instruccin que est en etiqueta.
beq Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 es igual a Src2.
beqz Rsrc, etiqueta
Bif. condicional si el registro Rsrc es igual a 0.
bge Rsrc1, Src2, etiqueta
Bif. condicional si el registro Rsrc1 es mayor o igual a Src2 (con signo).
bgeu Rsrc1, Src2, etiq
Bif.. condicional si el registro Rsrc1 es mayor o igual a Src2 (sin signo).
bgez Rsrc, etiqueta
Bif. condicional si el registro Rsrc es mayor o igual a 0.
bgezal Rsrc, etiqueta
Bif. condicional si el registro Rsrc es mayor o igual a 0. Guarda la direccin actual en el registro $ra ($31)
bgt Rsrc1, Src2, etiqueta
Bif. condicional si el registro Rsrc1 es mayor que Src2 (con signo).
bgtu Rsrc1, Src2, etiqueta
Bif. condicional si el registro Rsrc1 es mayor que Src2 (sin signo.
bgtz Rsrc, etiqueta
Bif. condicional si Rsrc es mayor que 0.
ble Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 es menor o igual a Src2 (con signo).
bleu Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 es menor o igual a Src2 (sin signo).
blez Rsrc, etiqueta
Bif. condicional si Rsrc es menor o igual a 0.
bltzal Rsrc, etiqueta
Bif. condicional si Rsrc es menor que 0. Guarda la direccin actual en el registro $ra ($31).
blt Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 es menor que Src2 (con signo).
bltu Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 es menor que Src2 (sin signo).
bltz Rsrc, etiqueta
Bif. condicional si Rsrc es menor que 0.
bne Rsrc1, Src2, etiqueta
Bif. condicional si Rsrc1 no es igual a Src2.
bnez Rsrc, etiqueta
Bif. condicional si Rsrc no es igual a 0.
j etiqueta
Salto incondicional.
jal etiqueta
Salto incondicional, almacena la direccin actual en $ra ($31).
jalr Rsrc
Salto incondicional, almacena la direccin actual en $ra ($31).
jr Rsrc
Salto incondicional.

Instrucciones de carga
la Rdest, direccin
lb Rdest, direccin
lbu Rdest, direccin
ld Rdest, direccin
lh Rdest, direccin
lhu Rdest, direccin
lw Rdest, direccin

Carga direccin en Rdest (el valor de direccin, no el contenido)


Carga el byte de la direccin especificada y extiende el signo
Carga el byte de la direccin especificada, no extiende el signo
Carga Rdest y Rdest + 1 con el valor del double (64 bits) que se encuentra a partir de la direccin
especificada.
Carga 16 bits de la direccin especificada, se extiende el signo
Carga 16 bits de la direccin especificada, no se extiende signo
Carga una palabra de la direccin especificada.

Instrucciones de transferencia de datos


move Rdest, Rsrc
mfhi Rdest
mflo Rdest
mthi Rsrc
mtlo Rsrc

Mueve el contenido del registro Rsrc al registro Rdest.


Mueve el contenido del registro HI al registro Rdest.
Mueve el contenido del registro LO al registro Rdest.
Mueve el contenido del registro Rsrc al registro HI.
Mueve el contenido del registro Rsrc al registro LO.

Você também pode gostar