Aquí podéis descargar el programa que ayuda a hacerlo, se llama mars4_3
Sirve para programar MIPS
Sirve para programar MIPS
|
|
|
|
|
|
|
|
|
Formato R
|
|
|
||||
|
6 bits
|
5 bits
|
5 bits
|
5 bits
|
5 bits
|
6 bits
|
|
||||||||
|
Opcode
|
|
rs
|
|
rt
|
rd
|
|
Shift
|
|
Func.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Instrucción
|
Opcode
|
Func.
|
|
|
Descripción
|
|
|
|
|
|
|||||
Desplazamientos
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
sll $rd, $rt,
shift
|
000000
|
000000
|
Desplazamiento
lógico a la izquierda
|
|
|
||||||||||
|
$rs=0
|
||||||||||||||
srl $rd, $rt,
shift
|
000000
|
000010
|
Desplazamiento
lógico a la derecha
|
|
|||||||||||
sra $rd, $rt,
shift
|
000000
|
000011
|
Desplazamiento
aritmético a la derecha
|
|
|
||||||||||
|
|
||||||||||||||
sllv $rd, $rt,
$rs
|
000000
|
000100
|
Despl. lógico a
la izquierda variable
|
|
|||||||||||
srlv $rd, $rt,
$rs
|
000000
|
000110
|
Despl. lógico a
la derecha variable
|
|
|||||||||||
srav $rd, $rt,
$rs
|
000000
|
000111
|
Despl.
aritmético a la derecha variable
|
|
|||||||||||
Saltos
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
jr $rs
|
000000
|
001000
|
Salta a la
instr. cuya dirección está en $rs.
|
|
|||||||||||
jalr $rs, $rd
|
000000
|
001001
|
Salta a la
instr. cuya dirección está en $rs,
|
|
|||||||||||
|
|
|
|
|
|
salvando la dirección de la
instrucción
|
|
||||||||
|
|
|
|
|
|
siguiente en $rd (por defecto, $31)
|
|
||||||||
Transferencia de datos
|
|
|
|
|
|
|
|
|
|
|
|
||||
mfhi $rd
|
000000
|
010000
|
hi → $rd
|
|
|
|
|
|
|
|
|
||||
mflo $rd
|
000000
|
010010
|
lo → $rd
|
|
|
|
|
|
|
|
|
||||
Operaciones aritméticas
|
|
|
|
|
|
|
|
|
|
|
|
||||
mult $rs, $rt
|
000000
|
011000
|
Multiplicación.
Resultado = (hi, lo)
|
|
|||||||||||
multu $rs, $rt
|
000000
|
011001
|
Multiplicación
sin signo.
|
|
|
|
|
|
|||||||
div $rs, $rt
|
000000
|
011010
|
División con
desbordamiento.
|
|
|||||||||||
|
|
|
|
|
|
lo=cociente; hi=resto
|
|
|
|
|
|
||||
divu $rs, $rt
|
000000
|
011011
|
División sin
desbordamiento
|
|
|||||||||||
add $rd, $rs,
$rt
|
000000
|
100000
|
Suma con
desbordamiento
|
|
|
|
|
|
|||||||
addu $rd, $rs,
$rt
|
000000
|
100001
|
Suma sin
desbordamiento
|
|
|
|
|
|
|||||||
sub $rd, $rs,
$rt
|
000000
|
100010
|
Resta con
desbordamiento
|
|
|
|
|
|
|||||||
subu $rd, $rs,
$rt
|
000000
|
100011
|
Resta sin
desbordamiento
|
|
|
|
|
|
|||||||
Operaciones lógicas
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
and $rd, $rs,
$rt
|
000000
|
100100
|
AND lógico
|
|
|
|
|
|
|
|
|
||||
or $rd, $rs, $rt
|
000000
|
100101
|
OR lógico
|
|
|
|
|
|
|
|
|
||||
xor $rd, $rs,
$rt
|
000000
|
100110
|
OR exclusivo
lógico
|
|
|
|
|
|
|||||||
nor $rd, $rs,
$rt
|
000000
|
100111
|
NOR lógico
|
|
|
|
|
|
|
|
|
Página 1
Opcode
|
Func.
|
Descripción
|
|
|
|
|
|
Comparaciones
|
|
|
|
slt $rd, $rs, $rt
|
000000
|
101010
|
si $rs < $rt → $rd = 1
|
sltu $rd, $rs, $rt
|
000000
|
101011
|
si $rs < $rt → $rd = 1 (sin signo)
|
Otras
|
|
|
|
nop
|
000000
|
000000
|
No operación (no
hace nada).
|
syscall
|
000000
|
001100
|
Llamada a
sistema. Resto de campos = 0
|
|
|
|
|
|
|
|
|
|
|
|
Formato I
|
|
|||
|
6 bits
|
5 bits
|
|
5 bits
|
16 bits
|
|
|
|
|
||||||
|
Opcode
|
|
rs
|
|
rt
|
|
|
Inm.
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Instrucción
|
|
|
Opcode
|
|
|
Descripción
|
|
|
|
|
||||
|
Operaciones aritméticas
|
|
|
|
|
|
|
|
|
||||||
|
addi $rt, $rs, inm
|
|
001000
|
|
Suma con
inmediato (con desbordamiento)
|
|
|
||||||||
|
addiu $rt, $rs, inm
|
|
001001
|
|
Suma con
inmediato (sin desbordamiento)
|
|
|
||||||||
|
Comparaciones
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
slti $rt, $rs, inm
|
|
|
001010
|
|
Si $rs < inm → $rt=1
|
|
|
|
|
|
|
|||
|
sltiu $rt, $rs, inm
|
|
001011
|
|
Si $rs < inm → $rt=1 (sin signo)
|
|
|
|
|||||||
|
Operaciones lógicas
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
andi $rt, $rs, inm
|
|
001100
|
|
AND lógico con
inmediato
|
|
|
|
|
||||||
|
ori $rt, $rs, inm
|
|
|
001101
|
|
OR lógico con
inmediato
|
|
|
|
|
|||||
|
xori $rt, $rs, inm
|
|
|
001110
|
|
XOR lógico con
inmediato
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
Carga
|
|
|
|
|
|
|
|
|
|
|
||||
|
lui $rt, inm
|
|
|
001111
|
|
$rt = inm
<< 16;
|
|
|
|
|
|
|
|||
|
lb $rt, inm($rs)
|
|
|
100000
|
|
Carga un byte.
$rt = (inm + $rs)
|
|
|
|
||||||
|
lh $rt, inm($rs)
|
|
|
100001
|
|
Carga un valor
de 16 bits. $rt = (inm + $rs)
|
|
|
|||||||
|
lw $rt, inm($rs)
|
|
|
100011
|
|
Carga una
palabra. $rt = (inm + $rs)
|
|
|
|||||||
|
lbu $rt, inm($rs)
|
|
|
100100
|
|
Carga un byte
(sin signo). $rt = (inm + $rs)
|
|
|
|||||||
|
lhu $rt, inm($rs)
|
|
|
100101
|
|
Carga media
palabra (sin signo).
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Almacenamiento
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
||||||
|
sb $rt, inm($rs)
|
|
|
101000
|
|
(inm+$rs) = byte
de menos peso de $rt
|
|
|
|||||||
|
sh $rt, inm($rs)
|
|
|
101001
|
|
(inm+$rs) = 16
bits de menos peso de $rt
|
|
|
|||||||
|
sw $rt, inm($rs)
|
|
|
101011
|
|
(inm+$rs) = $rt
|
|
|
|
|
|
|
Página 2
Opcode
|
Descripción
|
|
|
||
|
|
|
|
|
|
Saltos
|
|
|
|
|
|
beq $rs, $rt, etiq
|
000100
|
Si $rs = $rt → salta etiq instrucciones
|
|
|
|
bne $rs, $rt, etiq
|
000101
|
Si $rs != $rt → salta etiq instrucciones
|
|
|
|
blez $rs, etiq
|
000110
|
Si $rs <= 0 → salta etiq instrucciones
|
|
|
|
$rt=0
|
|||||
bgtz $rs, etiq
|
000111
|
Si $rs > 0 → salta etiq instrucciones
|
|||
|
|
||||
|
|
|
|
|
|
Formato J
|
|
6 bits
|
|
26 bits
|
|
||
Opcode
|
|
|
Dirección
|
|
|
|
|
|
|
|
|
Instrucción
|
Opcode
|
Descripción
|
|
||
Saltos
|
|
|
|
|
|
j etiqueta
|
000010
|
Salta a la
instrucción etiqueta
|
|
||
jal etiqueta
|
000011
|
Salta a la
instrucción etiqueta.
Guarda la
|
|
||
|
|
|
dirección de la instrucción siguiente
en $31
|
|