Você está na página 1de 8

Registros del MIPS y usos

Nombre del registro Nmero Uso


zero 0 Constante 0
at 1 Reservada para ensamblador
v0 2 Evaluacin de expresiones y resultado de funciones
v1 3 Evaluacin de expresiones y resultado de funciones
a0 4 Arumento 1
a1 ! Arumento 2
a2 " Arumento 3
a3 # Arumento 4
t0$$t# %$$1! &emporal 'no se uarda valor entre llamadas(
s0$$s# 1"$$23 &emporal 'el valor se uarda entre llamadas(
t%) t* 24) 2! &emporal 'no se uarda valor entre llamadas(
+0) +1 2") 2# Reservado para el +ernel del sistema operativo
p 2% ,untero al -rea lobal
sp 2* ,untero de pila
fp 30 ,untero de marco de pila
ra 31 .ireccin de retorno) usada por llamadas a funcin
Servicios del sistema
Servicio Cdigo de
llamada
Argumentos Resultado
print/int 1 0a0 1 entero
print/float 2 0f12 1 real '32 bits(
print/double 3 0f12 1 real '"4 bits(
print/strin 4 0a0 1 cadena
read/int ! Entero 'en 0v0(
read/float " Real 32 bits ' en 0f0(
read/double # Real "4 bits 'en 0f0(
read/strin % 0a01buffer) 0a1 1 lonitud
sbr+ * 0a0 1 cantidad .ireccin 'en 0v0(
exit 10
Directivas del ensamblador
.ascii cadena Almacena la cadena en memoria) pero no termina con null '2304($
.assciiz cadena Almacena la cadena en memoria y pone un null '2304( al final de esta$
.byte b1, ..., bn Almacena n valores en bytes sucesivos de memoria$
.data 5as siuientes definiciones de datos 6ue aparezcan se almacenan en el
semento de datos$ ,uede llevar un arumento 6ue indica la direccin a partir de donde
se empezar-n a almacenar los datos$
.double d1, ..., dn Almacena n valores reales de doble precisin en direcciones
consecutivas de memoria$
.extern etiueta n .eclara 6ue los datos almacenados a partir de etiqueta ocupan n
bytes y 6ue etiqueta es un s7mbolo lobal$ Esta directiva permite al ensamblador
almacenar datos en una zona del semento de datos 6ue puede ser accedida a trav8s del
reistro 0p$
.!lota !1, ..., !n Almacena n reales de precisin simple en posiciones consecutivas de
memoria$
.globl s"mbolo .eclara un s7mbolo lobal 6ue se puede referenciar desde otros
proramas$
.#al! #1, ..., #n Almacena n n9meros de 1" bits en medias palabras consecutivas$
.text 5as instrucciones 6ue siuen a esta directiva se ponen en el semento de
cdio$ ,ude llevar un par-metro 6ue indica donde empieza la zona de cdio$
.$ord $1, ..., $n Almacena n cantidades de 32 bits 'una palabra( en posiciones
consecutivas de memoria$
Juego de instrucciones del SPIM
Instrucciones aritmticas y lgicas
En todas las instrucciones siuientes) :rc2 puede ser tanto un reistro como un valor
inmediato 'un entero de 1" bits($
abs Rdest) Rsrc ;alor absoluto
add Rdest) Rsrc1) :rc2 :uma con desbordamiento
addu Rdest) Rsrc1) :rc2 :uma sin desbordamiento
and Rdest) Rsrc1) :rc2 <peracin lica A=.
div Rsrc1) Rsrc2 .ivide con desbordamiento$ .e>a el cociente en el
reistro lo y el resto en el reistro hi
divu Rsrc1) Rsrc2 .ivide sin desbordamiento$ .e>a el cociente en el
reistro lo y el resto en el reistro hi
div Rdest) Rsrc1) :rc2 .ivide con desbordamiento
div Rdest) Rsrc1) :rc2 .ivide sin desbordamiento
mul Rdest) Rsrc1) :rc2 ?ultiplica sin desbordamiento
mulo Rdest) Rsrc1) :rc2 ?ultiplica con desbordamiento
mulou Rdest) Rsrc1) :rc2 ?ultiplicacin con sino y con desbordamiento
mult Rsrc1) Rsrc2 ?ultiplica) la parte ba>a del resultado se de>a en el
reistro lo y la parte alta en el reistro hi
mult Rsrc1) Rsrc2 ?ultiplica con sino) la parte ba>a del resultado se de>a
en el reistro lo y la parte alta en el reistro hi
ne Rdest) Rsrc =iea el valor 'detecta desbordamiento(
neu Rdest) Rsrc =iea el valor 'sin desbordamiento(
nor Rdest) Rsrc1) :rc2 <peracin 5ica =<R
not Rdest) Rsrc <peracin 5ica =<&
or Rdest) Rsrc1) :rc2 <peracin 5ica <R
rem Rdest) Rsrc1) :rc2 Resto '?dulo() pone el resto de dividir Rsrc1 por :rc2
en el reistro Rdest$
rol Rdest) Rsrc1) :rc2 Rotar a la iz6uierda
ror Rdest) Rsrc1) :rc2 Rotar a la derec@a
sll Rdest) Rsrc1) :rc2 .esplazamiento lico de bits a la iz6uierda
srl Rdest) Rsrc1) :rc2 .esplazamiento lico de bits a la derec@a
sra Rdest) Rsrc1) Rsrc2 .esplazamiento aritm8tico de bits a la derec@a
sub Rdest) Rsrc1) :rc2 Resta 'con desbordamiento(
subu Rdest) Rsrc1) :rc2 Resta 'sin desbordamiento(
xor Rdest) Rsrc1) :rc2 <peracin 5ica A<R
Instrucciones manipulacin de constantes
li Rdest) inmediato Carar valor inmediato
lui Rdest) inmediato Carar los 1" bits de la parte ba>a del valor inmediato en la
parte alta del reistro$ 5os bits de la parte ba>a se pone a 0$
Instrucciones de comparacin
En todas las instrucciones siuientes) :rc2 puede ser un reistro o un valor inmediato
'de 1" bits($
se6 Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 y :rc2 son iuales) en otro caso
pone 0$
se Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es mayor o iual a :rc2) y 0 en
otro caso 'para n9meros con sino($
seu Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es mayor o iual a :rc2) y 0 en
otro caso 'para n9meros sin sino($
st Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es mayor 6ue :rc2) y 0 en otro
caso 'para n9meros con sino($
stu Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es mayor 6ue :rc2) y 0 en otro
caso 'para n9meros sin sino($
sle Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es menor o iual a :rc2) en otro
caso pone 0 'para n9meros con sino($
sleu Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es menor o iual a :rc2) en otro
caso pone 0 'para n9meros sin sino($
slt Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es menor a :rc2) en otro caso pone
0 'para n9meros con sino($
sltu Rdest) Rsrc1) :rc2 ,one Rdest a 1 si Rsrc1 es menor a :rc2) en otro caso pone
0 'para n9meros sin sino($
sne Rdest) Rsrc1) :rc2 ,one Rdest to 1 si el reistro Rsrc1 no es iual a :rc2 y 0
en otro caso$
Instrucciones de bifurcacin y salto
En todas las instrucciones siuientes) :rc2 puede ser un reistro o un valor inmediato$
5as instrucciones de bifurcacin 'branc@( usan un desplazamiento de 1" bits con sinoB
por lo 6ue se puede saltar 2C1!D1 instrucciones @acia delante o 2C1! instrucciones @acia
atr-s$ 5as instrucciones de salto '>ump( contienen un campo de direccin de 2" bits$
b eti6ueta Eif$ incondicional a la instruccin 6ue est- en eti6ueta$
be6 Rsrc1) :rc2) eti6ueta Eif$ condicional si Rsrc1 es iual a :rc2$
be6z Rsrc) eti6ueta Eif$ condicional si el reistro Rsrc es iual a 0$
be Rsrc1) :rc2) eti6ueta Eif$ condicional si el reistro Rsrc1 es mayor o iual a
:rc2 'con sino($
beu Rsrc1) :rc2) eti6 Eif$$ condicional si el reistro Rsrc1 es mayor o iual a
:rc2 'sin sino($
bez Rsrc) eti6ueta Eif$ condicional si el reistro Rsrc es mayor o iual a 0$
bezal Rsrc) eti6ueta Eif$ condicional si el reistro Rsrc es mayor o iual a 0$
Fuarda la direccin actual en el reistro 0ra '031($
bt Rsrc1) :rc2) eti6ueta Eif$ condicional si el reistro Rsrc1 es mayor 6ue :rc2
'con sino($
btu Rsrc1) :rc2) eti6ueta Eif$ condicional si el reistro Rsrc1 es mayor 6ue :rc2 'sin
sino$
btz Rsrc) eti6ueta Eif$ condicional si Rsrc es mayor 6ue 0$
ble Rsrc1) :rc2) eti6ueta Eif$ Condicional si Rsrc1 es menor o iual a :rc2 'con
sino($
bleu Rsrc1) :rc2) eti6ueta Eif$ Condicional si Rsrc1 es menor o iual a :rc2 'sin
sino($
blez Rsrc) eti6ueta Eif$ Condicional si Rsrc es menor o iual a 0$
bltzal Rsrc) eti6ueta Eif$ Condicional si Rsrc es menor 6ue 0$ Fuarda la
direccin actual en el reistro 0ra '031($
blt Rsrc1) :rc2) eti6ueta Eif$ Condicional si Rsrc1 es menor 6ue :rc2 'con sino($
bltu Rsrc1) :rc2) eti6ueta Eif$ Condicional si Rsrc1 es menor 6ue :rc2 'sin sino($
bltz Rsrc) eti6ueta Eif$ Condicional si Rsrc es menor 6ue 0$
bne Rsrc1) :rc2) eti6ueta Eif$ Condicional si Rsrc1 no es iual a :rc2$
bnez Rsrc) eti6ueta Eif$ Condicional si Rsrc no es iual a 0$
> eti6ueta :alto incondicional$
>al eti6ueta :alto incondicional) almacena la direccin actual en 0ra
'031($
>alr Rsrc :alto incondicional) almacena la direccin actual en 0ra
'031($
>r Rsrc :alto incondicional$
Instrucciones de carga
la Rdest) direccin Cara direccin en Rdest 'el valor de direccin) no el
contenido(
lb Rdest) direccin Cara el byte de la direccin especificada y extiende el sino
lbu Rdest) direccin Cara el byte de la direccin especificada) no extiende el sino
ld Rdest) direccin Cara Rdest y Rdest G 1 con el valor del double '"4 bits( 6ue
se encuentra a partir de la direccin especificada$
l@ Rdest) direccin Cara 1" bits de la direccin especificada) se extiende el sino
l@u Rdest) direccin Cara 1" bits de la direccin especificada) no se extiende
sino
lH Rdest) direccin Cara una palabra de la direccin especificada$
lHcz Rdest) direccin Cara una palabra en el reistro Rdest del coprocesador z$
lHl Rdest) direccin Cara bytes en la palabra por la iz6uierda de la palabra
desalineada$
lHr Rdest) direccin Cara bytes en la palabra por la derec@a de la palabra
desalineada$
ul@ Rdest) direccin Cara media palabra '1" bits( de palabras desalineadas$
ul@u Rdest) direccin Cara media palabra '1" bits( de palabras desalineadas
'extiende el sino($
ulH Rdest) direccin Cara una palabra '32 bits( de direcciones de memoria
desalineadas$
Instrucciones de almacenamiento
sb Rsrc) direccin Almacena el byte m-s ba>o de Rsrc en la direccin indicada$
sd Rsrc) direccin Almacena un double '"4 bits( en la direccin indicada) el valor
de "4 bits es proviene de Rsrc y Rsrc G 1$
s@ Rsrc) direccin Almacena la media palabra '1" bits( ba>a de un reistro en la
direccin de memoria indicada$
sH Rsrc) direccin Almacena la Rsrc en la direccin indicada$
sHcz Rsrc) direccin Almacena el valor del reistro Rsrc del coprocesador z$
sHl Rsrc) direccin Almacena los bytes del reistro empezando por la derec@a en la
direccin de memoria indicada$
sHr Rsrc) direccin Almacena los bytes del reistro empezando por la iz6uierda en
la direccin de memoria indicada$
us@ Rsrc) direccin Almacena la parte ba>a del reistro en una direccin desalineada$
usH Rsrc) direccin Almacena la palabra del reistro en una direccin desalineada$
Instrucciones de movimiento de datos
move Rdest) Rsrc ?ueve el contenido del reistro Rsrc al reistro Rdest$
mf@i Rdest ?ueve el contenido del reistro IJ al reistro Rdest$
mflo Rdest ?ueve el contenido del reistro 5< al reistro Rdest$
mt@i Rsrc ?ueve el contenido del reistro Rsrc al reistro IJ$
mtlo Rsrc ?ueve el contenido del reistro Rsrc al reistro 5<$
mfcz Rdest) C,src ?ueve el contenido del reistro C,src del coprocesador z al
reistro de la C,K Rdest$
mfc1$d Rdest) LRsrc1 ?ueve el contenido de los reistros LRrc1 y LRsrc1G1 a los
reistros de la C,K Rdest y Rdest G 1$
mtcz Rsrc) C,dest ?ueve los contenidos del reistro Rsrc de la C,K al reistro
Cpdest del coprocesador z$
Instrucciones de excepcin y trap
rfe Retorno de una excepcin) restaura el reistro de estado$
syscall 5lamada al sistema) el reistro v0 contiene el n9mero de la llamada al
sistema$
brea+ n ,rovoca una excepcin de valor n$
nop =o operation) no @ace nada$
Instrucciones del coprocesador 32 bits
abs$s fd) fs ;alor absoluto
add$s fd) fs) ft :uma de los reistros fs y ft
c$e6$s fs) ft Compara fs y ft) si son iuales pone el fla de condicin de coma
flotante true$ :e deben utilizar bc1t o bclf para comprobar el valor
del fla$
c$le$s fs) ft :i fs es menor o iual 6ue ft pone el fla de condicin de coma
flotante true$ :e deben utilizar bc1t o bclf para comprobar el valor
del fla$
c$lt$s fs) ft :i fs es menor 6ue ft pone el fla de condicin de coma flotante
true$ :e deben utilizar bc1t o bclf para comprobar el valor del fla$
div$s fd) fs) ft .ivide fs entre ft y de>a el resultado en fd
l$s fdest) direc 5ee de la direccin de memoria indicada un real y lo almacena en
fd$
mov$s fd) fs ?ueve el contenido del reistro fs al reistro fd$
mul$s fd) fs) ft ?ultiplica los reistros fs y ft y de>a su resultado en fd$
ne$s fd) fs =iea el valor del real contenido en fs y lo almacena el fd
s$s fd) direc Escribe en la direccin de memoria indicada el real contenido en el
reistro fd
sub$s fd) fs) ft Resta el contenido de dos reistros y almacen el resultado en fd$
bc1t dir/relativa ,asa a e>ecutar el cdio de la direccin indicada si el fla de coma
flotante es 1 'true($
bc1f dir/relativa ,asa a e>ecutar el cdio de la direccin indicada si el fla de coma
flotante es 0 'false($

Você também pode gostar