Академический Документы
Профессиональный Документы
Культура Документы
Estructura de Computadores
Grado en Ingeniera Informtica
Apndice. Instrucciones y
directivas MIPS.
Luis Rincn
ngel Serrano
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
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
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
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
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)
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
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)
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
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
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
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
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
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
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
c.le.s
fs,ft
c.lt.d
fs,ft
c.lt.s
fs,ft
14
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
direccion
Sintaxis:
.ktext
direccion
16
Secciones de datos:
Sintaxis:
.data
direccion
Sintaxis:
.kdata direccion
Efecto: comienza la seccin de datos del ncleo (sistema operativo) en la
direccin dada.
17
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.
18
nombre,n
Sintaxis:
.lcomm
nombre,n
Sintaxis:
[etiq:] .space
20
10
Sintaxis:
[etiq:] .float
Sintaxis:
[etiq:] .double
tira_de_caracteres
tira_de_caracteres
Smbolos especiales:
11
Sintaxis:
.set
noat
Sintaxis:
.set
at
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
24
12
Sintaxis:
.set
volatile
Sintaxis:
.set
novolatile
25
Sintaxis:
.set
nomacro
Sintaxis:
.set
macro
26
13
Simb
Sintaxis:
.extern
Simb,t
27
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
14
29
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