REGISTROS DEL MIPS R2000/R3000 Nombre Código del registro

Anuncio
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
F. Micó
REGISTROS DEL MIPS R2000/R3000
Nombre
$zero
$v0 - $v1
$a0 - $a3
$t0 - $t7
$s0 - $s7
$t8 - $t9
$ra
Código del
registro
0
2–3
4–7
8 – 15
16 – 23
24 – 25
31
Uso
Valor constante 0
Valores de retorno para las llamadas al sistema
Argumentos para las llamadas al sistema
Resultados temporales
Valores que se quieren mantener a lo largo del programa
Resultados temporales
Dirección de retorno
MODOS DE DIRECCIONAMIENTO
Las instrucciones del MIPS R2000/R3000 principalmente utilizan registros y números a
la hora de operar con los datos. A veces es necesario acceder a la memoria para
encontrar los operandos.
El procesador MIPS R2000/R3000 solo ofrece un modo de direccionamiento para el
acceso a memoria: num(rx)con el que se obtiene una dirección sumando el contenido
del registro rx y el valor inmediato num.
El simulador permite otros modos de direccionamiento para el acceso a memoria. Estos
modos solo se pueden utilizar con instrucciones que hagan referencia a una dirección.
Formato
(registro)
num
num (registro)
Cálculo de la dirección
La dirección está en el registro
El valor inmediato representa una dirección
La dirección es la suma del contenido del registro más el
valor inmediato
etiqueta
La etiqueta indica la dirección
etiqueta ± num
La dirección se calcula sumándole num a la dirección que
representa la etiqueta
etiqueta ± num (registro) La dirección se calcula sumándole a la dirección que
representa la etiqueta el contenido del registro y el valor
inmediato num
FORMATOS DE LAS INSTRUCCIONES DEL MIPS R2000/R3000
Tres son los diferentes formatos de instrucciones utilizados por el MIPS R2000/R3000.
Formato tipo R:
co
6
rs
5
rt
5
rd
5
desp
5
func
6
1
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
F. Micó
En este formato las instrucciones sólo utilizan registros. Los campos que componen este
formato de instrucciones son:
• co: código de operación
• rs: primera referencia a un registro fuente
• rt: segunda referencia a un registro fuente
• rd: referencia a un registro destino
• desp: valor numérico utilizado en las instrucciones de desplazamiento
• func: campo de función utilizado para seleccionar una variante del código de
operación.
Ejemplo:
add $t0,$t1,$t2
0
000000
codificación: 0x012A4020
9
01001
10
01010
rs
5
rd
5
8
01000
0
00000
32
100000
Formato tipo I:
co
6
num
16
En este formato las instrucciones utilizan dos registros y un número de 16 bits. Los
campos que componen este formato de instrucciones son:
• co: código de operación
• rs: referencia a un registro fuente
• rd: referencia a un registro destino
• num: valor numérico
Ejemplo:
ori $t0,$t1,1
13
001101
codificación: 0x35280001
9
01001
8
01010
1
0000000000000001
Formato tipo J:
co
6
etiqueta
26
Este formato solo se utiliza con instrucciones de salto incondicional. En este formato las
instrucciones no utilizan ningún registro. Los campos que componen este formato de
instrucciones son:
• co: código de operación
• etiqueta: nombre asignado a la dirección de la siguiente instrucción a ejecutar
2
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
F. Micó
LAS LLAMADAS AL SISTEMA
Cód.
Servicio
Argumentos
servicio
Escribir entero
1
$a0 = entero
Escribir coma flotante
2
$f12 = coma flotante
de simple precisión
Escribir coma flotante
3
$f12 = coma flotante
de doble precisión
$a0 = dir a partir de la
Escribir cadena
4
cual tenemos la cadena
Pedir entero
5
Pedir coma flotante de
6
simple precisión
Pedir coma flotante de
7
doble precisión
$a0 = dir a partir de la
cual se guardará la
Pedir cadena
8
cadena, $a1 = longitud
máxima permitida
Terminar programa
10
DIRECTIVAS
Directiva
.align n
.ascii “cad1”, …
.asciiz “cad1”, …
.byte b1,…
.data [dir]
.double d1, …
.float f1, …
.globl etiqueta
.half h1, …
.space n
.text [dir]
.word w1, …
Valor devuelto
$v0 = entero
$f0 = coma flotante
$f0 = coma flotante
$v0 = longitud de la
cadena introducida
Uso
Alinea los datos que siguen a la siguiente dirección múltiplo de 2n
Guarda cadenas sin terminación nula
Guarda cadenas con terminación nula en cada una de ellas
Guarda valores enteros de 1 byte
Todo lo que siga esta directiva se guarda como dato a partir de
dir. Si no se especifica dir, por defecto dir = 0x10010000
Guarda valores de coma flotante de doble precisión
Guarda valores de coma flotante de simple precisión
Declara etiqueta como global para todos los archivos
Guarda valores enteros de 2 bytes
Reserva n bytes contiguos en la memoria
Todo lo que siga esta directiva se guarda como instr. a partir de
dir. Si no se especifica dir, por defecto dir = 0x00400000
Guarda valores enteros de 4 bytes
TABLA ASCII
30
40
50
60
70
80
90
100
00
0
@
P
`
p
Ç
01
1
A
Q
a
q
ü
02
2
B
R
b
r
03
3
C
S
c
s
04
4
D
T
d
t
05
5
E
U
e
u
06
6
F
V
f
v
07
7
G
W
g
w
08
8
H
X
h
x
09
9
I
Y
i
y
0a
:
J
Z
j
z
0b
;
K
[
k
{
0c
<
L
\
l
|
0d
=
M
]
m
}
0e
>
N
^
n
~
0f
¿
O
_
o
⌂
æ
é
Æ
â
ô
ä
ö
à
ò
å
û
ç
ù
ê
ÿ
ë
Ö
è
Ü
ï
ø
î
£
ì
Ø
Ä
×
Å
ƒ
É
á
í
ó
ú
ñ
Ñ
ª
º
¿
®
¬
½
¼
¡
«
»
3
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
F. Micó
REPERTORIO DE INSTRUCCIONES UTILIZADO CON EL SIMULADOR PCSPIM
Leyenda:
R
I
J
Ps
Formato de instrucción tipo R
Formato de instrucción tipo I
Formato de instrucción tipo J
Pseudoinstrucción
Para las pseudoinstrucciones:
rdest Como destino hay que utilizar un registro entero
rori
Como origen hay que utilizar un registro entero
ori
Como origen se puede utilizar un registro entero o un valor inmediato entero
fdest
Como destino hay que utilizar un registro de coma flotante
Instrucción
Tipo
Campos
Instrucciones con registros de propósito general enteros
Sumas
add
rd, rs, rt
R
0
rs
rt
rd
addu rd, rs, rt
R
0
rs
rt
rd
addi rd, rs, num
I
0x8
rs
rd
addiu rd, rs, num
I
0x9
rs
rd
add
rdest, rori1, ori2
Ps
addu rdest, rori1, ori2
Ps
Valor absoluto
abs
rdest, rori
Ps
Restas
sub
rd, rs, rt
R
0
rs
rt
rd
subu rd, rs, rt
R
0
rs
rt
rd
sub
rdest, rori1, ori2
Ps
subu rdest, rori1, ori2
Ps
Comentarios
0
0
num
num
0x20
0x21
rd = rs + rt (con signo)
rd = rs + rt (sin signo)
rd = rs + num (con signo)
rd = rs + num (sin signo)
rdest = rori1 + ori2 (con signo)
rdest = rori1 + ori2 (sin signo)
rdest = | rori |
0
0
0x22
0x23
rd = rs – rt (con signo)
rd = rs – rt (sin signo)
rdest = rori1 - ori2 (con signo)
rdest = rori1 - ori2 (sin signo)
4
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
Instrucción
Tipo
Negación
neg
rdest, rori
Ps
Multiplicación
mult rs, rt
R
multu rs, rt
R
mul rdest, rori1, ori2
Ps
División
div
rs, rt
R
divu rs, rt
R
div
rdest, rori1, ori2
Ps
rem rdest, rori1, ori2
Ps
Lógicas
and
rd, rs, rt
R
andi rd, rs, num
I
and
rdest, rori1, ori2
Ps
or
rd, rs, rt
R
ori
rd, rs, num
I
or
rdest, rori1, ori2
Ps
xor
rd, rs, rt
R
xori rd, rs, num
I
xor
rdest, rori1, ori2
Ps
nor
rd, rs, rt
R
not
rdest, rori
Ps
Desplazamientos lógicos y rotación
sll
rd, rt, desp
R
sllv
rd, rt, rs
R
F. Micó
Campos
Comentarios
rdest = - rori
0
0
rs
rs
rt
rt
0
0
0
0
0x18
0x19
hi = rs x rt 63-32 , lo = rs x rt 31-0 (con signo)
hi = rs x rt 63-32 , lo = rs x rt 31-0 (sin signo)
rdest = rori1 x ori2
0
0
rs
rs
rt
rt
0
0
0
0
0x1a
0x1b
lo = rs / rt , hi = rs % rt (con signo)
lo = rs / rt , hi = rs % rt (sin signo)
rdest = rori1 / ori2
rdest = rori1 % ori2
0
0xc
rs
rs
rt
rd
rd
0
num
0x24
0
0xd
rs
rs
rt
rd
rd
0
num
0x25
0
0xe
rs
rs
rt
rd
rd
0
num
0x26
0
rs
rt
rd
0
0x27
rd = rs and rt
rd = rs and num
rdest = rori1 and ori2
rd = rs or rt
rd = rs or num
rdest = rori1 or ori2
rd = rs xor rt
rd = rs xor num
rdest = rori1 xor ori2
rd = rs nor rt
rdest = not rori
a la izquierda
0
0
rt
0
rs
rt
rd
rd
desp
0
0
0x4
rd = bits rt desplazados desp posiciones
rd = bits rt desplazados rs posiciones
5
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
Instrucción
Tipo
sll
rdest, rori1, ori2
Ps
rol
rdest, rori1, ori2
Ps
Desplazamientos lógicos y rotación a la derecha
srl
rd, rt, desp
R
0
0
srlv rd, rt, rs
R
0
rs
srl
rdest, rori1, ori2
Ps
ror
rdest, rori1, ori2
Ps
Desplazamientos aritméticos a la derecha
sra
rd, rt, desp
R
0
0
srav rd, rt, rs
R
0
rs
sra
rdest, rori1, ori2
Ps
Comparaciones
slt
rd, rs, rt
R
0
rs
sltu
rd, rs, rt
R
0
rs
slti
rd, rs, num
I
0xa
rs
sltiu rd, rs, num
I
0xb
rs
seq
rdest, rori1, ori2
Ps
sge
rdest, rori1, ori2
Ps
sgeu rdest, rori1, ori2
Ps
sgt
rdest, rori1, ori2
Ps
sgtu rdest, rori1, ori2
Ps
sle
rdest, rori1, ori2
Ps
sleu rdest, rori1, ori2
Ps
slt
rdest, rori1, ori2
Ps
sltu
rdest, rori1, ori2
Ps
sne
rdest, rori1, ori2
Ps
F. Micó
Campos
Comentarios
rdest = bits rori1 desplazados ori2 posic.
rdest = bits rori1 rotados ori2 posiciones
rt
rt
rd
rd
desp
0
0x2
0x6
rd = bits rt desplazados desp posiciones
rd = bits rt desplazados rs posiciones
rdest = bits rori1 desplazados ori2 posic.
rdest = bits rori1 rotados ori2 posiciones
rt
rt
rd
rd
desp
0
0x3
0x7
rd = bits rt desplazados desp posiciones
rd = bits rt desplazados rs posiciones
rdest = bits rori1 desplazados ori2 posic.
rt
rt
rd
rd
rd
rd
0x2a
0x2b
rd = 1 si rs < rt (con signo)
rd = 1 si rs < rt (sin signo)
rd = 1 si rs < num (con signo)
rd = 1 si rs < num (sin signo)
rdest = 1 si rori1 = ori2
rdest = 1 si rori1 ≥ ori2 (con signo)
rdest = 1 si rori1 ≥ ori2 (sin signo)
rdest = 1 si rori1 > ori2 (con signo)
rdest = 1 si rori1 > ori2 (sin signo)
rdest = 1 si rori1 ≤ ori2 (con signo)
rdest = 1 si rori1 ≤ ori2 (sin signo)
rdest = 1 si rori1 < ori2 (con signo)
rdest = 1 si rori1 < ori2 (sin signo)
rdest = 1 si rori1 ≠ ori2
0
0
num
num
6
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
Instrucción
Saltos incondicionales
j
etiqueta
jal
etiqueta
jalr
rs, rd
jr
rs
b
etiqueta
Saltos condicionales
beq
rs, rt, etiqueta
bgez rs, etiqueta
bgtz rs, etiqueta
blez rs, etiqueta
bltz rs, etiqueta
bne
rs, rt, etiqueta
beqz rori, etiqueta
bge
rori1,ori2, etiqueta
bgeu rori1,ori2, etiqueta
bgt
rori1,ori2, etiqueta
bgtu rori1,ori2, etiqueta
ble
rori1,ori2, etiqueta
bleu rori1,ori2, etiqueta
blt
rori1,ori2, etiqueta
bltu rori1,ori2, etiqueta
bnez rori, etiqueta
beq
rori1,ori2,etiqueta
bne
rori1,ori2,etiqueta
Tipo
F. Micó
Campos
J
J
R
R
Ps
0x2
0x3
0
0
I
I
I
I
I
I
Ps
Ps
Ps
Ps
Ps
Ps
Ps
Ps
Ps
Ps
Ps
Ps
0x4
0x1
0x7
0x6
0x1
0x5
rs
rs
0
0
etiqueta
etiqueta
rd
0
0
0
rs
rt
offset
rs
0x1
offset
rs
0
offset
rs
0
offset
rs
0
offset
rs
rt
offset
(offset = etiqueta – posición actual)
Comentarios
0x9
0x8
Salta a etiqueta
Salta a etiqueta , $ra = dir. sig. instr.
Salta a dir. en rs , rd = dir. instr. sig.
Salta a dir. en rs
Salta a etiqueta
Salta a etiqueta si rs = rt
Salta a etiqueta si rs ≥ 0
Salta a etiqueta si rs > 0
Salta a etiqueta si rs ≤ 0
Salta a etiqueta si rs < 0
Salta a etiqueta si rs ≠ rt
Salta a etiqueta si rori = 0
Salta a etiqueta si rori1 ≥ ori2 (con signo)
Salta a etiqueta si rori1 ≥ ori2 (sin signo)
Salta a etiqueta si rori1 > ori2 (con signo)
Salta a etiqueta si rori1 > ori2 (sin signo)
Salta a etiqueta si rori1 ≤ ori2 (con signo)
Salta a etiqueta si rori1 ≤ ori2 (sin signo)
Salta a etiqueta si rori1 < ori2 (con signo)
Salta a etiqueta si rori1 < ori2 (sin signo)
Salta a etiqueta si rori ≠ 0
Salta a etiqueta si rori1 = ori2
Salta a etiqueta si rori1 ≠ ori2
7
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
Instrucción
Tipo
F. Micó
Campos
Comentarios
Instrucciones de acceso a memoria
lb
rd, num(rs)
I
0x20
rs
rd
num
Carga 1 byte de dir = num + rs a rd (con)
lbu
rd, num(rs)
I
0x24
rs
rd
num
Carga 1 byte de dir = num + rs a rd (sin)
sb
rt, num(rs)
I
0x28
rs
rt
num
Almacena 1 byte de rt en dir = num + rs
lh
rd, num(rs)
I
0x21
rs
rd
num
Carga 2 bytes de dir = num + rs a rd (con)
lhu
rd, num(rs)
I
0x25
rs
rd
num
Carga 2 bytes de dir = num + rs a rd (sin)
sh
rt, num(rs)
I
0x29
rs
rt
num
Almacena 2 bytes de rt en dir = num + rs
lw
rd, num(rs)
I
0x23
rs
rd
num
Carga 4 bytes de dir = num + rs a rd
sw
rt, num(rs)
I
0x2b
rs
rt
num
Almacena 4 bytes de rt en dir = num + rs
(Nota: Se recuerda que el segundo operando se puede sustituir por cualquier modo de direccionamiento – En ese caso se están
utilizando pseudoinstrucciones – ver tabla correspondiente)
Transferencia de datos
lui
rd, num
I
0xf
0
rd
num
Carga num en los bits más sign. de rd
li
rdest, num
Ps
Pone num en rdest
la
rdest, etiqueta
Ps
Pone la dirección etiqueta en rdest
move rdest, rori
Ps
rdest = rori
Otros
syscall
R
0
0
0
0
0
0xc
Llamada al sistema
nop
R
0
0
0
0
0
0
Ninguna operación
Instrucciones con registros de propósito general de coma flotante
Aritméticas
add.s fd, fs, ft
R
0x11
0x10
ft
fs
fd
add.d fd, fs, ft
R
0x11
0x11
ft
fs
fd
sub.s fd, fs, ft
R
0x11
0x10
ft
fs
fd
sub.d fd, fs, ft
R
0x11
0x11
ft
fs
fd
0
0
1
1
fd = fs + ft (simple precisión)
fd = fs + ft (doble precisión)
fd = fs - ft (simple precisión)
fd = fs - ft (doble precisión)
8
Fundamentos y Arquitectura de Computadores (ITTSE – UV)
Instrucción
mul.s fd, fs, ft
mul.d fd, fs, ft
div.s fd, fs, ft
div.d fd, fs, ft
neg.s fd, fs
neg.d fd, fs
abs.s fd, fs
abs.d fd, fs
Transferencia
mov.s fd, fs
mov.d fd, fs
l.s
fdest, dirección
Tipo
R
R
R
R
R
R
R
R
R
R
Ps
l.d
fdest,dirección
Ps
s.s
fdest, dirección
Ps
s.d
fdest, dirección
Ps
F. Micó
0x11
0x11
0x11
0x11
0x11
0x11
0x11
0x11
0x10
0x11
0x10
0x11
0x10
0x11
0x10
0x11
Campos
ft
fs
ft
fs
ft
fs
ft
fs
0
fs
0
fs
0
fs
0
fs
0x11
0x11
0x10
0x11
0
0
fs
fs
fd
fd
fd
fd
fd
fd
fd
fd
2
2
3
3
7
7
5
5
fd
fd
6
6
Comentarios
fd = fs x ft (simple precisión)
fd = fs x ft (doble precisión)
fd = fs / ft (simple precisión)
fd = fs / ft (doble precisión)
fd = - fs (simple precisión)
fd = - fs (doble precisión)
fd = | fs | (simple precisión)
fd = | fs | (doble precisión)
fd = fs (simple precisión)
fd = fs (doble precisión)
Carga un número en coma flotante de
simple precisión desde etiqueta al registro
fdest
Carga un número en coma flotante de
doble precisión desde etiqueta al registro
fdest
Guarda a partir de etiqueta el número en
coma flotante de simple precisión que hay
en fdest
Guarda a partir de etiqueta el número en
coma flotante de doble precisión que hay
en fdest
9
Descargar