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($