Modo Inmediato

Anuncio
ELO311
Estructuras de Computadores Digitales
Operaciones MIPS Inmediatas
Tomás Arredondo Vidal
Este material está basado en:
material de apoyo del texto de David Patterson, John Hennessy,
"Computer Organization & Design", (segunda y tercera edición),
Morgan Kaufmann, CA. 2005
material del curso anterior ELO311 del Prof. Leopoldo Silva
material del curso CSE331 de Mary Jane Irving de Penn State
www.wikipedia.org
Cray was a legend in computers … said that he
liked to hire inexperienced engineers right out
of school, because they do not usually know
what’s supposed to be impossible.
The Soul of a New Machine, Kidder, pg. 77
Repaso: MIPS ISA hasta ahora
Category
Instr
Op Code
Example
Meaning
Arithmetic
add
0 and 32 add $s1, $s2, $s3
$s1 = $s2 + $s3
(R format)
subtract
0 and 34 sub $s1, $s2, $s3
$s1 = $s2 - $s3
Data
Transfer
load word
35
lw
$s1, 100($s2)
$s1 = Memory($s2+100)
store word
43
sw $s1, 100($s2)
Memory($s2+100) = $s1
(I format)
load byte
32
lb
$s1, 101($s2)
$s1 = Memory($s2+101)
store byte
40
sb
$s1, 101($s2)
Memory($s2+101) = $s1
br on equal
4
beq $s1, $s2, L
if ($s1==$s2) go to L
br on not equal
5
bne $s1, $s2, L
if ($s1 !=$s2) go to L
Cond.
Branch
(I & R
format)
Uncond.
Jump
(J & R
format)
set on less than
2
j
2500
if ($s2<$s3) $s1=1 else
$s1=0
go to 10000
jump register
0 and 8
jr
$t1
go to $t1
jump and link
3
jal
2500
go to 10000; $ra=PC+4
jump
0 and 42 slt
$s1, $s2, $s3
Repaso: Organización MIPS hasta ahora
Processor
Memory
Register File
src1 addr
src2 addr
5
5
dst addr
write data
5
1…1100
src1
data
32
32
registers
($zero - $ra)
read/write
addr
src2
data
32
32
32
32 bits
br offset
32
Fetch
PC = PC+4
Exec
32 Add
PC
32 Add
4
read data
32
32
32
write data
32
Decode
230
words
32
32 ALU
32
32
7
3
6
2
5
1
32 bits
byte address
(little Endian)
4
0
0…1100
0…1000
0…0100
0…0000
word address
(binary)
Bifurcaciones a Distancia Mayor (Far Branch)
Que pasa si la distancia de una bifurcación es mayor
de la que puede ser hecha en 16 bits?
El ensamblador viene al rescate – inserta un salto
incondicional al objetivo de la bifurcación e inverte la
condición
beq
$s0, $s1, L1
se convierte en
bne
j
L2:
$s0, $s1, L2
L1
Tratando con Constantes
Valores constantes se usan frecuentemente (muchas
veces el 50% de los operandos)
e.g.,
A = A + 5;
B = B + 1;
C = C - 18;
Solución?
Permitir instrucciones MIPS como
addi
slti
andi
ori
$sp,
$t0,
$t0,
$t0,
$sp,
$t1,
$t0,
$t0,
4
10
6
4
Como se hace funcionar?
Operandos Inmediatos
Instrucciones MIPS inmediatas:
addi $sp, $sp, 4
#$sp = $sp + 4
slti $t0, $s2, 15
#$t0 = 1 if $s2<15
Formato de Máquina:
op
rs
rt
16 bit immediate
8
29
29
4
10
18
8
15
I format
La constante se mantiene en la instrucción misma!
I format – Formato inmediato
Limites de valores se limita al rango +215–1 a -215
Como Usar Constantes Mayores?
Queremos cargar constantes de 32 bits en un registro
Hay dos instrucciones, cargar superior inmediato o
"load upper immediate"
lui $t0, 1010101010101010
16
0
8
1010101010101010
Y una para hacer un OR con los bits menores:
ori $t0, $t0, 1010101010101010
1010101010101010
0000000000000000
0000000000000000
1010101010101010
Como Usar Constantes Mayores?
Queremos cargar constantes de 32 bits en un registro
Hay dos instrucciones, cargar superior inmediato o
"load upper immediate"
lui $t0, 1010101010101010
16
0
8
1010101010101010
Y una para hacer un OR con los bits menores:
ori $t0, $t0, 1010101010101010
1010101010101010
0000000000000000
0000000000000000
1010101010101010
1010101010101010
1010101010101010
Modos de Direccionamiento
Registro – operando es un registro
Base (desplazamiento) – operando es en la ubicacion de
memoria cuya direccion es la suma de un registro y de
una constante de 16-bits contenida en la instrucción
Inmediato – operando es una constante de 16-bits
contenida en la instrucción
PC-relativo – dirección de la instruccion es la suma del
PC y una constante de 16-bits contenida en la
instrucción
Seudo-directo – dirección de la instrucción e la constante
de 26-bits contenida en la instrucción concatenado con
los 4 bits superiores del PC
Direccionamiento Ilustrado
1. Register addressing
op
rs
rt
rd
funct
Register
word operand
2. Base addressing
op
rs
rt
offset
Memory
word or byte operand
base register
3. Immediate addressing
op
rs
rt
operand
4. PC-relative addressing
op
rs
rt
offset
Memory
branch destination instruction
Program Counter (PC)
5. Pseudo-direct addressing
op
Memory
jump address
||
Program Counter (PC)
jump destination instruction
Principios de Diseño
Simplicidad beneficia regularidad
Instrucciones de tamaño fijo – 32-bits
Pequeño numero de formatos de instrucciones
Pequeño es mas rápido
Conjunto limitado de instrucciones
Número limitado de registros en conjunto de registros
(register file)
Número limitado de modos de direccionamiento
Buen diseño requiere compromisos
Tres formatos de instrucciones
Hacer el caso común mas rápido
Operandos aritméticos del conjunto de registros (maquina
load-store)
Permite instrucciones con operandos inmediatos
Repaso: MIPS ISA hasta ahora
Category
Instr
Op Code
Example
Meaning
Arithmetic
add
0 and 32 add $s1, $s2, $s3
$s1 = $s2 + $s3
(R & I
format)
subtract
0 and 34 sub $s1, $s2, $s3
$s1 = $s2 - $s3
add immediate
8
addi $s1, $s2, 6
$s1 = $s2 + 6
or immediate
13
ori $s1, $s2, 6
$s1 = $s2 v 6
Data
Transfer
load word
35
lw
$s1, 24($s2)
$s1 = Memory($s2+24)
store word
43
sw $s1, 24($s2)
Memory($s2+24) = $s1
(I format)
load byte
32
lb
$s1, 25($s2)
$s1 = Memory($s2+25)
store byte
40
sb
$s1, 25($s2)
Memory($s2+25) = $s1
load upper imm
15
lui
$s1, 6
$s1 = 6 * 216
br on equal
4
beq $s1, $s2, L
if ($s1==$s2) go to L
br on not equal
5
bne $s1, $s2, L
if ($s1 !=$s2) go to L
Cond.
Branch
(I & R
format)
Uncond.
Jump
(J & R
format)
set on less than
0 and 42 slt
$s1, $s2, $s3
if ($s2<$s3) $s1=1 else
$s1=0
if ($s2<6) $s1=1 else
$s1=0
set on less than
immediate
10
slti $s1, $s2, 6
jump
2
j
2500
go to 10000
jump register
0 and 8
jr
$t1
go to $t1
jump and link
3
jal
2500
go to 10000; $ra=PC+4
Descargar