Pr. Dr. Xavier Bonnaire - Departamento de Informática

Anuncio
Pr. Dr. Xavier Bonnaire
Slide 1 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Temario
●
Introducción
●
Estructura Básica de un Computador
●
Lenguaje de Máquina Básico
●
Instrucciones para decisiones
●
Procedimientos
●
Direccionamiento
●
Assemblers y Linkers
Slide 2 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Introducción
●
Para programar un computador digital
–
Se debe usar su propio lenguaje de programación
●
●
●
Es decir el lenguaje de programación del procesador
El lenguaje de programacion del
procesador
–
La palabras del lenguaje se denominan
instrucciones
–
El vocabulario se llama el conjunto de
instrucciones
Varios lenguajes
–
Casi todo los procesadores tienen un conjunto de
instrucciones diferente
–
Algunos son compatibles (Intel P4 y AMD Athlon,
etc...)
Cada uno tiene instrucciones especiales
Slide 3 Pr. Dr.● Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Estructura Básica de un Computador
●
●
Un computador digital se compone de 3
grandes bloques
–
El Procesador
–
El Sistema de Memoria
–
El Sistema de Entrada / Salida
El Procesador es el elemento principal
–
Se implementa con un Chip VLSI
–
Está formado por
La Unidad de Control
El Camino de Datos
Slide 4 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Estructura de un Computador
Compilador
Unidad
de
Control
Entrada
MEMORIA
Camino
de
Datos
Salida
Procesador
Slide 5 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Estructura de un Computador
Unidad
de
Control
Camino
de
Datos
Entrada
MEMORIA
Salida
PCI BUS
Procesado
r
Tarjeta
Video
Disco
Duro
Slide 6 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Estructura de un Computador
PCI Slot
AGP Slot
Procesador
Socket
Chipset
Clock CMOS
Li-Ion Bat.
RAM Slolts
Hard Disk
IDE Conectors
Power
Conector
Slide 7 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Procesador Conector
Slide 8 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Lenguaje de Máquina Básico
●
Consideraremos la máquina MIPS para
nuestro estudio
–
●
El procesador MIPS tiene 32 bits
–
●
Procesadores R3000 y R4000
Se desarrolló con tecnología RISC
Su diseño es lo suficientemente general
como para entender el lenguaje de máquina
de cualquier procesador.
–
Los procesadores tipo Pentium 4, AMD Athlon XP,
etc.. pueden tener un conjunto de instrucciones
muchos más grande que el MIPS
Slide 9 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Lenguaje Assembly y de Máquina
●
●
●
Lenguage Assembly
–
Una forma de representar las instrucciones y
operandos del lenguaje del procesador
–
Forma que puede entender el ser humano
Lenguaje de Máquina
–
La representacion del lenguaje del procesador al
nivel binario
–
Una serie de bytes que representan las
instrucciones y operandos
El Assembler
–
El programa que permite pasar de la forma Assembly
a la forma lenguaje de máquina
Slide 10 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Lenguaje de Alto Nivel - Procesador
Compilador
Lenguaje de
Alto Nivel
(C, Java, ...)
No depende del
Procesador
Assembler
Lenguaje
Assembly
Lenguaje
Máquina
Linker
Lenguaje
Máquina
Ejecutable
Slide 11 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Aritmética (Assembly)
●
●
Todo computador debe ser capaz de
realizar operaciones aritméticas.
Sumas y restas en MIPS se realizan de la
siguiente manera:
add a,b,c#a ←
b + c
sub a,b,c
#a ←
b - c
Oper 1
destino
Oper 2
Oper 2
Regla 1 de diseño:
Simplicidad → regularidad → desempeño
Slide 12 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplos
Código en C:
a=b+c;
d=a-e;
Código en C:
f=(g+h)-(i+j)
Lenguaje de
Máquina:
add a,b,c
sub d,a,e
¿..?
Slide 13 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Operadores y Registros
●
A diferencia de los lenguajes de alto
nivel
–
●
●
●
●
●
Los operandos de las instrucciones aritméticas no
pueden ser variable. Son memorias muy rápidas
llamadas registros.
Un registro de la máquina MIPS tiene 32
bits.
Un grupo de 32 bits, se denomina palabra
(Word)
Una colección de 32 registros rápidos se
denomina Archivo de Registros
¿Por qué el archivo de registros tiene
sólo 32 registros?
Lo pequeño es rápido (regla 2 de diseño)
Slide 14 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Operadores y Registros
●
●
La identificación de los registros se
puede hacer usando números (del 0 al 31)
Usaremos $s0, $s1, ..., $sN
–
●
Para designar registros que corresponden a
variables de programas.
Usaremos $t0, $t1, ..., $tN
–
Para designar registros que corresponden a
variables temporales.
Slide 15 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplos
f=(g+h)-(i+j)
add $t0,$s1,$s2
g+h
# $t0 ←
add $t1,$s3,$s4
i+j
f g+h i+j
sub $s0,$t0,$t1
$t0-$t1
# $t1 ←
# f ←
Slide 16 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Tratamiento de Arreglos
●
Los lenguajes de programación
–
●
●
Además de manejar variables simple. Son capaces de
manipular estructuras más complejas.
Estructuras de datos como los arreglos,
son mantenidos en memoria principal.
Para llevar una palabra de memoria a un
registro se utiliza la instrucción Load
Word
lw Reg1, Const(Reg2)
Ex: lw $s1, 100($s2)
$s1 = Memory[$s2 + 100]
Slide 17 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo
●
Compilar “a mano”, la siguiente
expresión en C:
g=h+A[8];
Constante
Segundo registro
Resultado
lw $t0,8($s3)
#$t0 ← A[8]
add $s1,$s2,$t0
#g ← h+A[8]
Resultado Final
h
La dirección de memoria se obtiene
sumando una constante con el contenido
del segundo registro
Slide 18 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Offset y Registro Base
lw $t8,8($s3)
Offset
Registro Base
La constante en una instrucción de transferencia se denomina offet y
registro que se le suma para formar la dirección, se denomina registr
Slide 19 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Restricción de Alineamiento
●
La memoria principal está organizada en
Bytes.
–
●
Los procesadores están organizados en
registros de 32 bits (palabras)
–
●
Esto significa que las direcciones son direcciones
de Bytes
32 Bits = 4 Bytes
La forma de ubicar Bytes en palabras da
origen a dos organizaciones distintas
Big Endian (MIPS, Sparc, PowerPC, ...)
Little Endian (Intel Familly, AMD,
...)
Slide 20 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Big Endian y Little Endian
32 Bits
Byte 3
Byte 2
Byte 1
Byte 0
Most Significant Byte Least Significant Byte
Memoria Big Endian
Memoria Little Endian
0
3
2
1
0
Bytes
0
0
1
2
3
Bytes
4
7
6
5
4
Bytes
4
4
5
6
7
Bytes
Direcciónes
de palabras
Slide 21 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo - Arreglo con variable
índice
g=h+A[i]
●
Asumir que A tiene 100 elementos. La base
está en el registro $s3 y además el
compilador asocia las variables:
g ← $s1
h ← $s2
i
●
← $s4
Se pide el código assembly
correspondiente a la sentencia C anterior
Slide 22 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo - Solución
g=h+A[i]
●
●
Antes de cargar A[i] en un registro
temporal
–
Se necesita su dirección.
–
Antes de sumar i a la base del arreglo para
generar su dirección, es necesario multiplicar el
índice i por 4, debido a la forma de direccionar
bytes.
La multiplicación por dos se puede
generar: i+i=2i, 2i+2i=4i, etc..
Slide 23 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo - Solución
add $t1,$s4,$s4
#$t1 ← 2*i
add $t1,$t1,$t1
#$t1 ← 4*i
Para obtener la dirección de A[i],
necesitamos sumar $t1 con la base de A que
está en $s3
add $t1,$t1,$s3 # $t1 ← dirección A[i]
con esta dirección se puede cargar A[i] en
un registro temporal
lw $t0, 0($t1)
# $t0 ← A[i]
Finalmente el resultado queda en g:
add $s1,$s2,$t0 # g ← h+ A[i]
Slide 24 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Assembly a Máquina
●
La instrucción que se representa en
assembly por add $t0,$s1,$s2 en una
instrucción de máquina (notación
decimal) queda:
Formato tipo R
6b
5b
5b
5b
5b
6b
OP
rs
rt
rd
shamt
funct
0
17
18
8
0
add
$s1
$s2
$t0
32
add
Slide 25 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Campos del Formato
●
op: código de operación
●
rs: Primer operando fuente
●
rt: Segundo operando fuente
●
rd: Registro destino
●
●
shamt: Shift amount (se usa en
instrucciones de desplazamiento)
funct: selecciona una variación
específica del código de operación
(Código de operación expandido)
Slide 26 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Formato Tipo I (Inmediato)
●
Consideremos la instrucción assembly:
lw $t0, 32($s3) # $t0 ← A[8]
Formato tipo I
6b
5b
5b
16b
OP
rs
rt
dirección
35
17
18
32
lw
$s3
$t0
Slide 27 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Formato Tipo I (Inmediato)
●
Consideremos la instrucción assembly:
sw $t0, 32($s3) # A[8] ← $t0
Formato tipo I
6b
5b
5b
16b
OP
rs
rt
dirección
43
17
18
32
sw
$s3
$t0
Slide 28 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Resumen de Formatos
●
Es un buen principio de diseño tomar
compromisos:
–
Bits
R
I
regularidad de formatos y tamaño del código de
operación (número de instrucciones)
6
op
op
5
rs
rs
5
rt
rt
5
rd
5
6
shamt funct
Dirección
Slide 29 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Pseudo Instrucciones
●
●
Muchas instrucciones Assembly no existen
en el Lenguaje de Máquina, pero pueden
ser generadas con otras instrucciones. Un
ejemplo es la instrucción move que
permite copiar un registro en otro. Esta
instrucción no existe en la máquina MIPS
Ejemplo
move $s1,$s2
#$s1 ← $s2
El Assembler MIPS genera:
add $s1,$0,$s2
#$s1 ← $s2+ 0
Slide 30 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Instrucciones para decisiones
●
●
La máquina MIPS presenta dos
instrucciones para la toma de decisiones:
Beq (Branch Equal)
beq reg1, reg2, L1
–
●
If (reg1 == reg2) goto L1
Bne (Branch Not Equal)
bne reg1, reg2, L1
–
If (reg1 != reg2) goto L1
Slide 31 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo 1
●
Generar el lenguaje de máquina para el
codigo C:
if(i==j) goto L1;
f=g+h;
L1: f=f-i;
●
Asumir que las 5 variables: f,g,h,i,j;
corresponden a los 5 registros:
$s0,....,$s5
Slide 32 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
beq $s3,$s4,L1
add $s0,$s1,$s2
L1: sub $s0,$s0,$s3
# if(i==j) goto L1
# f=g+h
# f=f-i
L1 representa la dirección de la instrucción de
Slide 33 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo 2
●
Usando las mismas variables y registros
del ejemplo anterior, generar código de
máquina para
if(i==j)
f=g+h;
else
f=g-h;
Slide 34 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Este ejercicio introduce otro tipo de
salto llamado salto incondicional.
–
●
La instrucción MIPS se denomina jump y se abrevia
j
J dirección
bne $s3,$s4,Else #if(i!=j)goto Else
add $s0,$s1,$s2
#f=g+h
j Exit
#goto Exit
Else: sub $s0, $s1, $s2 #f=g-h
Exit:
Slide 35 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Saltos Incondicionales
●
j Exit
#goto Exit
●
jr $t1
#goto $t1
J es del tipo J
6b
26b
dirección
OP
Jr es del tipo R
6b
5b
5b
5b
5b
6b
OP
rs
rt
rd
shamt
funct
0
rs
0
0
0
8
Slide 36 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Compilación de Loops
●
Compilar el código C:
while (A[i]==k) i=i+j;
●
●
●
Asumiremos que i,j k corresponden a los
registros $s3, $s4, y $s5.
Además la base del arreglo A está
guardada en $s6.
El primer paso es cargar A[i] en un
registro temporal:
Slide 37 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Compilación de Loops
Loop:
add $t1,$s3,$s3
add $t1,$t1,$t1
add $t1,$t1,$s6
#$t1=2*i
#$t1=4*i
#$t1 es la
dirección de A[i]
lw $t0,0($t1)
#$t0=A[i]
bne $t0,$s5,Exit # ir a Exit si A[i]!= k
add $s3,$s3,$s4 #i=i+j
j Loop
Exit:
Slide 38 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Comparaciones
●
●
La máquina MIPS tiene dos instrucciones
de comparación:
slt $s1,$s2,$s3 #set on less than
#if $s2<$s3
$s1←1
else
$s1←0
Slide 39 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Comparaciones
●
Saltar Menor Que: se puede construir:
slt $s1,$s2,$s3
bne $s1,$0, Menos #va a Menos si
#$s1←0, o sea si $s2 < $s3
●
Existe la pseudo instrucción blt (branch
less than), pero el compilador genera las
dos instrucciones anteriores si encuentra
blt
Slide 40 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Ejemplo 3 – El Switch
●
Compilar el código C:
switch(k)
case 0:
case 1:
case 2:
case 3:
}
●
{
f=i+j;
f=g+h;
f=g-h;
f=i-h;
break;
break;
break;
break;
//k=0
//k=1
//k=2
//k=3
asumiremos que las 6 variables desde f a
k, corresponden a los registros $s0 a
$s5. El registro $t2 contiene el valor 4
Slide 41 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Switch – Valores de Registros
f ↔
$s0
g ↔
$s1
h ↔
$s2
i ↔
$s3
j ↔
$s4
Slide 42 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
k ↔
Solución
●
●
slt
bne
slt
beq
Usaremos la variable k para indexar una
tabla de salto. El salto se hace vía el
valor cargado.
Lo primero es verificar rangos para k
$t3,$s5,$0
$t3,$0,Exit
$t3,$s5,$t2
$t3,$0,Exit
#
#
#
#
¿k <0?
si k<0, goto Exit
¿k<4?
si k >=4 goto Exit
Slide 43 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Hay que multiplicar por 4 el valor de k
para convertirlo en dirección de byte
add $t1,$s5,$s5
add $t1,$t1,$t1
●
# $t1=2*k
# $t1=4*k
Las direcciones de los códigos
correspondientes a los distintos valores
de k, se mantienen en una tabla de salto
Slide 44 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Asumiremos una secuencia de 4 palabras de
memoria, comenzando de la dirección
almacenada en $t4. Obtenemos así la
dirección de L0, L1,L2 y L3
Tabla de Saltos
L0
L1
L2
L3
Slide 45 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Obtención de la dirección de L0, L1,L2 y
L3
add $t1,$t1,$t4 #$t1=dirección de
Tabla Salto [k]
lw $t0,0($t1)
#$t0=Tabla Salto[k]
Slide 46 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Los primeros tres casos de switch son los
parecidos:
jr $t0
#salto basado en registro $t0
L0: add $s0,$s3,$s4
j Exit
L1: add $s0,$s1,$s2
j Exit
L2: sub $s0,$s1,$s2
j Exit
Slide 47 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Solución
●
Finalmente:
L3: sub $s0,$s3,$s4
Exit:
Slide 48 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Procedimientos
●
●
Los procedimientos o subrutinas son las
herramientas más poderosas para
estructurar programas.
En la ejecución de un procedimiento un
programa sigue los siguientes pasos:
–
Poner parámetros en un lugar accesible
–
Transferir el control al procedimiento
–
Realizar la tarea
–
Poner el resultado en lugar accesible
–
Volver el control al punto original
Slide 49 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Procedimientos
●
●
●
●
●
El software MIPS asigna los siguientes
registros a Procedimientos:
$a0-$a3: Argumentos para el paso de
parámetros
$v0-$v1: Registros para el retorno de
valores
$ra: Dirección de retorno para volver al
punto original
La máquina MIPS incluye la instrucción
jal (Jump And Link)
jal DirecciónProcedimiento
Slide 50 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Jal – Jump And Link
●
La instrucción
jal DirecciónProcedimiento
●
●
●
Tiene como efecto saltar a la dirección
indicada, pero simultáneamente salva la
dirección de retorno en $ra
La dirección almacenada en $ra se
denomina dirección de retorno.
Esto es necesario ya que el mismo
procedimiento puede ser invocado en
diferentes partes del programa
Slide 51 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
El Program Counter - PC
●
●
●
●
Es necesario disponer de un registro que
permita almacenar la dirección de la
instrucción que está siendo ejecutada.
Por razones históricas este registro se
denomina PC: Program Counter.
Debería llamarse IAR (Instruction Address
Registre).
La instrucción jal salva PC+4 en el
registro $ra para establecer la dirección
de retorno
Slide 52 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
El Program Counter - PC
Addr 0
PC
PC+4
Memoria
Instr
Instrucción en ejecución
Slide 53 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Retorno de procedimiento
●
La instrucción que permite volver al
punto inicial es: jr $ra
Procedimiento
Prog. Principal
Dir1
PC
instruc1
jal Dir1
PC+4
jr $ra
Slide 54 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Procedimientos Anidados
●
Lo normal en el desarrollo de un programa
es que un procedimiento pueda llamar a
otro, y que también se pueda llamar a si
mismo en forma directa o indirecta
(Recursividad)
A
...
Jal B
B
instb
.....
jal C;
.......
jr $ra
C
inst1
.......
jr $ra
Slide 55 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
El Stack
●
Es necesario el uso de un stack para
permitir flexiblemente usar
procedimientos anidados y recursividad
Addr 0
Registro sp
(Stack Pointer)
Addr n
Slide 56 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
El Stack – Agregar Datos (PUSH)
Addr 0
Addr 0
sp
sp
$s0
sp = sp - 4
Addr n
Add Inmediate
Addr n
addi $sp, $sp,-4
sw $s0, 0($sp)
Slide 57 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Código usando Stack
B
A
.......
jal B;
......
......
addi $sp,$sp,-4
sw $ra,0($sp)
jal C;
lw $ra,0($sp)
addi $sp,$sp,4
.......
jr $ra
C
.......
.......
jr $ra
Slide 58 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Direccionamiento
●
¿Dónde ir a buscar un operando? ¿A qué
dirección transferir el control del
programa?
–
●
La Máquina MIPS presenta todos los modos de
direccionamiento de las máquinas reales
Los mecanismos de direccionamiento que
estudiaremos son:
–
Tipo Registro
–
Operandos Inmediatos
–
Direccionamientos Absolutos
–
Direccionamientos relativos al PC
–
Direccionamiento Registro Base
Slide 59 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Tipo Registro
●
●
Lo más fácil es que el operando se
encuentre en un registro. Este es el caso
de las instrucciones tipo R.
Ejemplo: add,$s1,$s2,$s3
Formato tipo R
6b
5b
5b
5b
5b
6b
OP
rs
rt
rd
shamt
funct
0
18
19
17
0
add
$s1
$s2
$s0
32
add
Slide 60 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Operandos Inmediatos
●
●
●
Estadísticas de programas muestran que el
50% de los operandos son constantes, y
estas constantes son números
relativamente pequeños.
Una forma es almacenar las constantes en
la memoria principal y recuperar mediante
una instrucción lw
Ejemplo en C: a=a+5;
Slide 61 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Operandos Inmediatos
●
●
Supongamos que el número 5 lo guardamos
en la dirección DIREC, y que la variable
a la almacenamos en el registro $s1
Entonces
a=a+5 se genera:
lw $t1,DIREC($0)
add $s1,$s1,$t1
●
¿Existe una mejor solución?
Slide 62 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Instrucciones Inmediatas: addi
●
Una alternativa al código anterior es:
addi $s1,$s1,5
Formato tipo I
6b
5b
5b
16b
OP
rs
rt
Operando Inmediato
8
rs
rt
valor
addi
Pb: limitación a 16bits para el operando inmediato
Slide 63 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Instrucciones Inmediatas: slti,lui
●
Otras instrucciones con operandos
inmediatos son:
slti $t1,$s1,5 #Set on Less Than
Inmediate)
if($s1<5)$t1=1
●
Y
lui $s1,255 #Load Upper Inmediate
Slide 64 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
lui
●
lui $s1,255 #Load Upper Inmediate
6b
5b
5b
16b
OP
rs
rt
Operando Inmediato
$S0
255
$s0 0000000011111111 0000000000000000
16 bits upper
más significativos
16 bits lower
menos significativos
Slide 65 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Direccionamiento Absoluto
●
j 1000 # goto 1000
Formato tipo J
6b
26b
2
1000
El espacio de direcciones alcanzable es de 64MB
El código que se genera no es relocalizable
Slide 66 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Direccionamiento Relativo al PC
bne $s1,$s2,Exit # goto Exit si $s1 !=$s2
Formato tipo I
6b
5
5b
5b
rs($s1) rt($s2)
16b
Exit
El espacio de direcciones alcanzable es de 216 Bytes
Para aumentar este espacio, se considera que el cam
de 16bits son direcciones de palabras de 32bits
Slide 67 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Direccionamiento Relativo al PC
Memoria
PC
Limitado por 16 Bits
Slide 68 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Direccionamiento Relativo al PC
Ejemplo:
a: bne $s2,$s3,FIN
add $t4,$s4,$s6
j a
FIN:
80000
5
8
21
2
80004
0
19 20 19
0
80008
2
32
80000
80012
$s2 ← 8, $s3 ← 21
$t4 ← 19, $s6 ← 20
a: Dirección 80000
Slide 69 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Resumen Direccionamientos
Tipo
Registro
OP
rs
rt
rd
shamt
funct
Memoria
Tipo
Base
OP
rs
registro
rt
dirección
+
Slide 70 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Resumen Direccionamientos
Inmediat
o
OP
Relativo al
PC
OP
rs
rs
PC
rt
rt
dirección
Memoria
+
Slide 71 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Resumen Direccionamientos
Absoluto
OP
Memoria
Dirección
Slide 72 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Assemblers y Linkers
●
●
●
El lenguaje assembly es la representación
simbólica de la codificación binaria de
un programa.
El lenguaje assembly tiene directivas que
no generan código: .data, .global
Los roles que tiene el lenguaje assembly
son:
–
Lenguaje intermedio para un compilador
–
Embedded computers
Slide 73 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Compilacion y Link
Programa
Compilador
Assembler
Lenguaje Assembly
Computador
Ejecutable
Linker
Slide 74 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
¿Conviene programar en Assembly?
●
●
●
Programar en Assembly tiene varias
desventajas:
–
Específico a una máquina (baja portabilidad)
–
La relación entre líneas de código de un lenguaje
de alto nivel y Assembly se denomina factor de
expansión
Estudios demuestran que un
escribe el mismo número de
código por día programando
programando en un lenguaje
programador
líneas de
en Assembly o
de alto nivel.
Si x es el factor de expansión, la
productividad de un Lenguaje de Alto
Nivel respecto a Assembly es X
Slide 75 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Pero ...
●
A veces es necesario programar en
Assembly
–
Algunas partes de los Sistemas Operativos
●
–
Cuando se busca la máxima velocidad posible
●
–
–
Clock Interruption Routine
Códigos críticos
Para unos embedded softwares
●
Aviones
●
Autos
Para Devices Drivers
Slide 76 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María
María – Departamento de
Informática
Descargar