Вы находитесь на странице: 1из 15

Tema 3 Apndice. Instrucciones y directivas MIPS.

Estructura de Computadores
Grado en Ingeniera Informtica

Apndice. Instrucciones y
directivas MIPS.
Luis Rincn
ngel Serrano

Tema 3 Apndice. Instrucciones y directivas MIPS.

Instrucciones MIPS
1. Instrucciones de transferencia de datos.
2. Instrucciones de transferencia entre registros.
3. Instrucciones aritmticas para enteros.
4. Instrucciones lgicas.
5. Instrucciones de activacin condicional.
6. Instrucciones de rotacin y desplazamiento.
7. Instrucciones de control de programa.
8. Instrucciones miscelneas.
9. Instrucciones de transferencia para FP.
10. Instrucciones aritmticas para FP.
11. Instrucciones de conversin Entero-FP.
12. Instrucciones de comparacin para FP.
2

Tema 3 Apndice. Instrucciones y directivas MIPS.

1. Instrucciones de transferencia de datos


Sintaxis
-------------------------la
rt,direccion
lb
rt,desp(rs)
lbu
rt,desp(rs)
ld
rt,direccion
lh
rt,desp(rs)
lhu
rt,desp(rs)
li
rd,inm32
lui
rd,inm16
lw
rt,desp(rs)
lwcZ
rt,desp(rs)
lwl
rt,desp(rs)
lwr
rt,desp(rs)
sb
rt,desp(rs)
sd
rt,direccion
sh
rt,desp(rs)
sw
rt,desp(rs)
swcZ
rt,desp(rs)
swl
rt,desp(rs)
swr
rt,desp(rs)
ulh
rt,direccion
ulhu
rt,direccion
ulw
rt,direccion
ush
rt,direccion
usw
rt,direccion

T
P
I
I
P
I
I
P
I
I
I
I
I
I
P
I
I
I
I
I
P
P
P
P
P

Descripcin
-------------------------------------rt = direccion
rt = ext_signo(Mem[desp+rs]7..0,32)
rt = ext_ceros(Mem[desp+rs]7..0,32)
rt = Mem[direccion]; rt+1 = Mem[direccion+4]
rt = ext_signo(Mem[desp+rs]15..0,32)
rt = ext_ceros(Mem[desp+rs]15..0,32)
rd = inm32
rd31..16 = inm16; rd15..0 = 0
rt = Mem[desp+rs]
coprocesadorZ(rt) = Mem[desp+rs]
rt31.16 = Mem[desp+rs]
rt15..0 = Mem[desp+rs]
Mem[desp+rs] = rt7..0
Mem[direccion] = rt; Mem[direccion+4] = r(t+1)
Mem[desp+rs] = rt15..0
Mem[desp+rs] = rt
Mem[desp+rs] = coprocesadorZ(rt)
Mem[desp+rs] = rt31.16
Mem[desp+rs] = rt15..0
rt = ext_signo(Mem[direccion]15..0,32)
rt = ext_ceros(Mem[direccion]15..0,32)
rt = Mem[direccion]
Mem[direccion] = rt15..0
Mem[direccion] = rt

En todas las pseudoinstrucciones, direccion puede ser una etiqueta o desp(rs).


Las instrucciones se pueden convertir en pseudoinstrucciones poniendo como segundo operando una
3
etiqueta.

Tema 3 Apndice. Instrucciones y directivas MIPS.

2. Instrucciones de transferencia entre registros


Sintaxis
-------------------------mfcZ
rt,rd
mfc1.d rd,fs
mfhi
rd
mflo
rd
move
rd,rs
mtcZ
rd,rt
mthi
rd
mtlo
rd

T
I
P
I
I
P
I
I
I

Descripcin
-------------------------------------rd = rt; rd: registro UCP; rt: registro del coprocesador Z
rd = fs; r(d+1) = f(s+1); fs y f(s+1) registros de coma flotante
rd = hi
rd = lo
rd = rs
rd = rt; rd: registro UCP; rt: registro del coprocesador Z
hi = rd
lo = rd

Tema 3 Apndice. Instrucciones y directivas MIPS.

3. Instrucciones aritmticas para enteros


Sintaxis
-------------------------abs
rd,rs
add
rd,rs,rt
addi
rd,rs,inm16
addu
rd,rs,rt
addiu
rd,rs,inm
div
rs,rt
div
rd,rs1,s2
divu
rs,rt
divu
rd,rs1,s2
mul
rd,rs1,s2
mulo
rd,rs1,s2
mulou
rd,rs1,s2
mult
rs,rt
multu
rs,rt
neg
rd,rs
negu
rd,rs
rem
rd,rs,rt
remu
rd,rs,rt
sub
rd,rs,rt
subu
rd,rs,rt

T
P
I
I
I
I
I
P
I
P
P
P
P
I
I
P
P
P
P
I
I

Descripcin
-------------------------------------rd = abs(rs)
rd = rs+rt
rd = rs+ext_signo(inm16,32)
rd = rs+rt
rd = rs+ext_signo(inm16,32)
lo = rs/rt; hi = rem(rs/rt)
rd = lo = rs1/s2; hi = rem(rs1,s2)
lo = rs/rt; hi = rem(rs/rt)
rd = lo = rs1/s2; hi = rem(rs1,s2)
hi-lo = rs1*s2; rd = lo
hi-lo = rs1*s2; rd = lo
hi-lo = rs1*s2; rd = lo
hi-lo = rs*rt
hi-lo = rs*rt
rd = -rs
rd = -rs
lo = rs/rt; rd = hi = rem(rs,rt)
lo = rs/rt; rd = hi = rem(rs,rt)
rd = rs-rt
rd = rs-rt

Tema 3 Apndice. Instrucciones y directivas MIPS.

4. Instrucciones lgicas
Sintaxis
-------------------------and
rd,rs,rt
andi
rd,rs,inm16
nor
rd,rs,rt
not
rd,rs
or
rd,rs,rt
ori
rd,rs,inm16
xor
rd,rs,rt
xori
rd,rs,inm16

T
I
I
I
P
I
I
I
I

Descripcin
-------------------------------------rd = rs AND rt
rd = rs AND ext_ceros(inm16,32)
rd = rs NOR rt
rd = NOT rs
rd = rs OR rt
rd = rs OR ext_ceros(inm16,32)
rd = rs XOR rt
rd = rs XOR ext_ceros(inm16,32)

Tema 3 Apndice. Instrucciones y directivas MIPS.

5. Instrucciones de activacin condicional


Sintaxis
-------------------------seq
rd,rs1,s2
sge
rd,rs1,s2
sgeu
rd,rs1,s2
sgt
rd,rs1,s2
sgtu
rd,rs1,s2
sle
rd,rs1,s2
sleu
rd,rs1,s2
slt
rd,rs,rt
slti
rd,rs,inm16
sltu
rd,rs,rt
sltiu
rd,rs,inm16
sne
rd,rs1,s2

T
P
P
P
P
P
P
P
I
I
I
I
P

Descripcin
-------------------------------------Si rs1 = s2, rd = 1; si no, rd = 0
Si rs1 >= s2, rd = 1; si no, rd = 0
Si rs1 >= s2, rd = 1; si no, rd = 0
Si rs1 > s2, rd = 1; si no, rd = 0
Si rs1 > s2, rd = 1; si no, rd = 0
Si rs1 <= s2, rd = 1; si no, rd = 0
Si rs1 <= s2, rd = 1; si no, rd = 0
Si rs < rt, rd = 1; si no, rd = 0
Si rs < ext_signo(inm16,32), rd = 1; si no, rd = 0
Si rs < rt, rd = 1; si no, rd = 0
Si rs < ext_signo(inm16,32), rd = 1; si no, rd = 0
Si rs1 = s2, rd = 1; si no, rd = 0

En pseudoinstrucciones, s2 puede ser un registro o un dato inmediato de 16 bits con


extensin de signo.

Tema 3 Apndice. Instrucciones y directivas MIPS.

6. Instrucciones de rotacin y desplazamiento


Sintaxis
-------------------------rol
rd,rt,s2
ror
rd,rt,s2
sll
rd,rt,shamt5
sllv
rd,rt,rs
sra
rd,rt,shamt5
srav
rd,rt,rs
srl
rd,rt,shamt5
srlv
rd,rt,rs

T
P
P
I
I
I
I
I
I

Descripcin
-------------------------------------rd = rotacion(rt,s2,izquierda)
rd = rotacion(rt,s2,derecha)
rd = desp_log(rt,shamt5,izquierda)
rd = desp_log(rt,rs4..0,izquierda)
rd = desp_arit(rt,shamt5,derecha)
rd = desp_arit(rt,rs4..0,derecha)
rd = desp_log(rt,shamt5,derecha)
rd = desp_log(rt,rs4..0,derecha)

Tema 3 Apndice. Instrucciones y directivas MIPS.

7. Instrucciones de control de programa


Sintaxis
-------------------------b
etiqueta
bcZf
etiqueta
bcZt
etiqueta
beq
rs,rt,etiqueta
beqz
rd,etiqueta
bge
rs1,s2,etiqueta
bgeu
rs1,s2,etiqueta
bgez
rs,etiqueta
bgezal rs,etiqueta
bgt
rs1,s2,etiqueta
bgtu
rs1,s2,etiqueta
bgtz
rs,etiqueta
ble
rs1,s2,etiqueta
bleu
rs1,s2,etiqueta
blez
rs,etiqueta
blt
rs1,s2,etiqueta
bltu
rs1,s2,etiqueta
bltz
rs,etiqueta
bltzal rs,etiqueta
bne
rs,rt,etiqueta
bnez
rd,etiqueta
j
objetivo
jal
objetivo
jalr
rs,rd
jr
rs

T
P
I
I
I
P
P
P
I
I
P
P
I
P
P
I
P
P
I
I
I
P
I
I
I
I

Descripcin
-------------------------------------Ramificar a etiqueta
Si flag(coprocesadorZ) = 0, ramificar a etiqueta
Si flag(coprocesadorZ) = 1, ramificar a etiqueta
Si rs = rt, ramificar a etiqueta
Si rd = 0, ramificar a etiqueta
Si rs1 >= s2, ramificar a etiqueta
Si rs1 >= s2, ramificar a etiqueta
Si rd >= 0, ramificar a etiqueta
Si rd >= 0, ramificar a etiqueta y enlazar ($ra = PC)
Si rs1 >= s2, ramificar a etiqueta
Si rs1 >= s2, ramificar a etiqueta
Si rd > 0, ramificar a etiqueta
Si rs1 <= s2, ramificar a etiqueta
Si rs1 <= s2, ramificar a etiqueta
Si rd <= 0, ramificar a etiqueta
Si rs1 < s2, ramificar a etiqueta
Si rs1 < s2, ramificar a etiqueta
Si rd < 0, ramificar a etiqueta
Si rd < 0, ramificar a etiqueta y enlazar ($ra = PC)
Si rs <> rt, ramificar a etiqueta
Si rd <> 0, ramificar a etiqueta
PC = PC31..28 || (objetivo << 2)
ra = PC; PC = PC31..28 || (objetivo << 2)
rd = PC; PC = rs
PC = rs

Tema 3 Apndice. Instrucciones y directivas MIPS.

8. Instrucciones miscelneas
Sintaxis
-------------------------rfe
syscall
break
codigo20
nop

T
I
I
I
I

Descripcin
-------------------------------------Restaurar desde excepcin (Restaura el registro Status)
Llamada a un servicio del sistema ($v0: nmero del servicio)
Provoca una excepcin (cdigo 1 reservado para el depurador)
No operacin

10

Tema 3 Apndice. Instrucciones y directivas MIPS.

9. Instrucciones de transferencia para FP


 Pseudoinstrucciones de carga y almacenamiento:
Sintaxis
-------------------------l.d
ft,direccion
l.s
ft,direccion
s.d
ft,direccion
s.s
ft,direccion

T
P
P
P
P

Descripcin
-------------------------------------ft = Mem[direccion]; ft registro de coma
ft = Mem[direccion]; ft registro de coma
Mem[direccion] = ft; ft registro de coma
Mem[direccion] = ft; ft registro de coma

flotante
flotante
flotante
flotante

de
de
de
de

64
32
64
32

bits
bits
bits
bits

En todas las pseudoinstrucciones, direccion puede ser una etiqueta o desp(rs)

 Instrucciones de transferencia entre registros:


Sintaxis
-------------------------mov.d
fd,fs
mov.s
fd,fs

T
I
I

Descripcin
-------------------------------------fd = fs; fd y fs: registros de coma flotante de 64 bits
fd = fs; fd y fs: registros de coma flotante de 32 bits

11

Tema 3 Apndice. Instrucciones y directivas MIPS.

10. Instrucciones aritmticas para FP


Sintaxis
-------------------------abs.d
fd,fs
abs.s
fd,fs
add.d
fd,fs,ft
add.s
fd,fs,ft
div.d
fd,fs,ft
div.s
fd,fs,ft
mul.d
fd,fs,ft
mul.s
fd,fs,ft
neg.d
fd,fs
neg.s
fd,fs
sub.d
fd,fs,ft
sub.s
fd,fs,ft

T
I
I
I
I
I
I
I
I
I
I
I
I

Descripcin
-------------------------------------fd = abs(fs)
fd = abs(fs)
fd = fs+ft
fd = fs+ft
fd = fs/ft
fd = fs/ft
fd = fs*ft
fd = fs*ft
fd = -fs
fd = -fs
fd = fs-ft
fd = fs-ft

12

Tema 3 Apndice. Instrucciones y directivas MIPS.

11. Instrucciones de conversin entero-FP


Sintaxis
-------------------------cvt.d.s fd,fs
cvt.d.w fd,fs
cvt.s.d fd,fs
cvt.s.w fd,fs
cvt.w.d fd,fs
cvt.w.s fd,fs

T
I
I
I
I
I
I

Descripcin
-------------------------------------fd = convertir(fs); precisin simple a precisin doble
fd = convertir(fs); entero a precisin doble
fd = convertir(fs); precisin doble a precisin simple
fd = convertir(fs); entero a precisin simple
fd = convertir(fs); precisin doble a entero
fd = convertir(fs); precisin simple a entero

13

Tema 3 Apndice. Instrucciones y directivas MIPS.

12. Instrucciones de comparacin para FP


Sintaxis
-------------------------c.eq.d fs,ft

T
I

Descripcin
-------------------------------------Si fs = ft, flag_coprocesador(1) = 1;
si no, flag_coprocesador(1) = 0

c.eq.s

fs,ft

Si fs = ft, flag_coprocesador(1) = 1;
si no, flag_coprocesador(1) = 0

c.le.d

fs,ft

Si fs <= ft, flag_coprocesador(1) = 1;


si no, flag_coprocesador(1) = 0

c.le.s

fs,ft

Si fs <= ft, flag_coprocesador(1) = 1;


si no, flag_coprocesador(1) = 0

c.lt.d

fs,ft

Si fs < ft, flag_coprocesador(1) = 1;


si no, flag_coprocesador(1) = 0

c.lt.s

fs,ft

Si fs < ft, flag_coprocesador(1) = 1;


si no, flag_coprocesador(1) = 0

14

Tema 3 Apndice. Instrucciones y directivas MIPS.

Directivas MIPS
1. Secciones.
2. Reserva de espacio en memoria (definicin de variables).
3. Control de traduccin.
4. Alineamiento.
5. Enlace entre mdulos.
6. Definicin de macroinstrucciones.
7. Definicin de smbolos explcitos.

15

Tema 3 Apndice. Instrucciones y directivas MIPS.

1. Directivas para secciones


 Secciones de cdigo:
Sintaxis:
.text

direccion

Efecto: comienza la seccin de cdigo de usuario en la direccin dada.

Sintaxis:
.ktext

direccion

Efecto: comienza la seccin de cdigo del ncleo (sistema operativo) en la


direccin dada.

16

Tema 3 Apndice. Instrucciones y directivas MIPS.

 Secciones de datos:
Sintaxis:
.data

direccion

Efecto: comienza la seccin de datos de usuario en la direccin dada.

Sintaxis:
.kdata direccion
Efecto: comienza la seccin de datos del ncleo (sistema operativo) en la
direccin dada.

17

Tema 3 Apndice. Instrucciones y directivas MIPS.

 Secciones de datos:
Sintaxis:
.rdata direccion
Efecto: comienza la seccin de datos en ROM.

Sintaxis:
.sdata direccion
Efecto: comienza una seccin de datos estticos pequeos.

 La directiva .section sirve para definir secciones arbitrariamente.

18

Tema 3 Apndice. Instrucciones y directivas MIPS.

2. Directivas para reserva de datos sin valor inicial


Sintaxis:
.comm

nombre,n

Efecto: reserva una variable global de n octetos llamada nombre.

Sintaxis:
.lcomm

nombre,n

Efecto: reserva una variable local de n octetos llamada nombre.

Sintaxis:
[etiq:] .space

Efecto: reserva n bytes (incrementa el CDE en n)


19

Tema 3 Apndice. Instrucciones y directivas MIPS.

3. Directivas para reserva de datos con valor inicial


 Se pueden reservar varios datos, separando sus valores por comas.
 Si existe etiqueta, se define el nombre simblico asocindolo a la direccin
del primer dato reservado.
Sintaxis:
[etiq:] .byte

Efecto: reserva espacio para un dato de 8 bits y le pone el valor entero N.


Sintaxis:
[etiq:] .half

Efecto: reserva espacio para un dato de 16 bits y le pone el valor entero N.


Sintaxis:
[etiq:] .word

Efecto: reserva espacio para un dato de 32 bits y le pone el valor entero N.

20

10

Tema 3 Apndice. Instrucciones y directivas MIPS.

Sintaxis:
[etiq:] .float

Efecto: reserva espacio para un dato de coma flotante de 32 bits y le pone el


valor N.

Sintaxis:
[etiq:] .double

Efecto: reserva espacio para un dato de coma flotante de 64 bits y le pone el


valor N.

En estas dos directivas el formato de los datos definidos es el de una constante


en coma flotante.
Ejemplos: 1.43245, 1e+19, 4.44561e-12, etc.
21

Tema 3 Apndice. Instrucciones y directivas MIPS.


Sintaxis:
[etiq:] .ascii

tira_de_caracteres

Efecto: reserva espacio para la tira de caracteres.


Sintaxis:
[etiq:] .asciiz

tira_de_caracteres

Efecto: reserva espacio para la tira de caracteres y coloca un nulo al final.


En estas dos directivas:
Cada carcter ocupa un octeto.
La tira va entre comillas dobles.

Smbolos especiales:

\0: carcter nulo


\n: salto de lnea
\: comilla
\t: tabulador
22

11

Tema 3 Apndice. Instrucciones y directivas MIPS.

4. Directivas de alineamiento y control de traduccin


Sintaxis:
.align

Efecto: especifica un alineamiento mayor que el necesario para la siguiente


directiva de datos. N especifica el alineamiento, y debe ser una potencia de 2.

Sintaxis:
.set

noat

Efecto: el ensamblador genera un mensaje de error si necesita usar el registro $1


($at) en una expansin de una pseudoinstruccin o macroinstruccin.

Sintaxis:
.set

at

Efecto: el ensamblador no genera un mensaje de error si necesita usar el registro


$1 ($at) en una expansin de una pseudoinstruccin o macroinstruccin.
23

Tema 3 Apndice. Instrucciones y directivas MIPS.

Sintaxis:
.set

noreorder

Efecto: marca el inicio de una regin del fichero fuente en la cual el ensamblador
no reordena las instrucciones del programa.

Sintaxis:
.set

reorder

Efecto: marca el final de una regin de no reordenacin. A partir de ella, el


ensamblador puede reordenar las instrucciones para mejorar la eficiencia del
programa.

24

12

Tema 3 Apndice. Instrucciones y directivas MIPS.

Sintaxis:
.set

volatile

Efecto: marca el inicio de una regin voltil.

Sintaxis:
.set

novolatile

Efecto: marca el fin de una regin voltil.

Dentro de una regin voltil las cargas y almacenamientos no se reordenan.

25

Tema 3 Apndice. Instrucciones y directivas MIPS.

Sintaxis:
.set

nomacro

Efecto: el ensamblador emite un aviso si una lnea de cdigo se traduce en dos o


ms instrucciones de ensamblador.

Sintaxis:
.set

macro

Efecto: se deshabilita el efecto de .set nomacro.

26

13

Tema 3 Apndice. Instrucciones y directivas MIPS.

5. Directivas de enlace entre mdulos


Sintaxis:
.globl

Simb

Efecto: indica que el smbolo es exportado (lo inserta en la tabla de smbolos


exportados).

Sintaxis:
.extern

Simb,t

Efecto: indica que el smbolos es importado y ocupa t octetos. Al tiempo, inserta el


smbolo en la tabla de smbolos.
Cada vez que un smbolo externo aparece en el programa se registra en la tabla de
smbolos importados.

27

Tema 3 Apndice. Instrucciones y directivas MIPS.

6. Macroinstrucciones
 Una macroinstruccin es una pseudoinstruccin definida por el programador.
 Las directivas para definir una macroinstruccin permiten dar un nombre a una
secuencia de instrucciones, pseudoinstrucciones y/o directivas, e incluso pasarle
parmetros.
 Sintaxis:
.macro nombre($arg1,$arg2,...,$argN)
...
bloque_sentencias
...
.end_macro

Efecto: crear una macroinstruccin llamada nombre con N argumentos.


Llamada a la macro:
nombre(p1,p2,...,pN)
28

14

Tema 3 Apndice. Instrucciones y directivas MIPS.

7. Definicin de Smbolos explcitos


 Para definir un smbolo explcito la sintaxis es la siguiente:
SIMB = valor
Efecto: se inserta SIMB en la tabla de smbolos, con el valor especificado.
 Una vez definido un smbolo explcito, dicho smbolo no puede ser redefinido.
 Se utiliza para definir constantes (igual que CONST en PASCAL).
 No se permiten referencias adelantadas.

29

Tema 3 Apndice. Instrucciones y directivas MIPS.

Bibliografa
 D.A. PATTERSON, J.L HENNESSY. Computer Organization and Design. Morgan
Kaufmann, 2005.
 D.A. PATTERSON, J.L HENNESSY. Estructura y diseo de computadores. Revert,
2000.
 D. SWEETMAN. See MIPS Run. Morgan Kaufmann, 2002.
 E. FARQUHAR, P. BUNCE. The MIPS Programmers Handbook. Morgan Kaufmann,
1994.
 J. GOODMAN, K. MILLER. A Programmers View of Computer Architecture. Saunders
College Pub., 1993.
 MIPS32 Architecture For Programmers Volume I: Introduction to the MIPS32
Architecture. MIPS Technologies Inc., 2003.
 MIPS32 Architecture For Programmers Volume II: The MIPS32 Instruction Set. MIPS
Technologies Inc., 2003.
 MIPS32 Architecture For Programmers Volume III: The MIPS32 Privileged Resource
Architecture. MIPS Technologies Inc., 2003.
 MIPS64 Architecture For Programmers Volume I: Introduction to the MIPS64
Architecture. MIPS Technologies Inc., 2003.
 MIPS64 Architecture For Programmers Volume II: The MIPS64 Instruction Set. MIPS
Technologies Inc., 2003.
 MIPS64 Architecture For Programmers Volume III: The MIPS64 Privileged Resource
Architecture. MIPS Technologies Inc., 2003.
 http://www.mips.com/
30

15

Вам также может понравиться