Sei sulla pagina 1di 21

Tema 1 - Representación de las instrucciones:

Lenguaje ensamblador
Grado en Ingeniería de la Salud
Arquitectura de Computadores y Sistemas Operativos

1
Índice de contenidos

1. Clases de instrucciones y registros


2. Instrucciones aritméticas
3. Instrucciones Lógicas
4. Instrucciones de acceso a memoria
5. Instrucciones de control

2
¿Juego de Instrucciones?

• Repertorio de instruciones de un
computador
• ≠ Ordenadores → ≠ Juegos de Instrucciones
– Pero muchos aspectos en común
• Primeros ordenadores → Juegos de
instrucciones muy simples
– Simplifica la implementación
• Muchos ordenadores modernos también
tienen juegos de instrucciones simples

3
MIPS-32 ISA

• Categorías Registros

– Aritméticas R0 - R31
– Lógicas
– Acceso Memoria
– Control
– Punto flotante PC
HI
– Especiales
LO
3 Formatos de Instrucciones: 32 bits

Op (6) Rs (5) Rt (5) Rd (5) Sa (5) Funct (6) R

Op (6) Rs (5) Rt (5) Immediato (16) I

Op (6) Salto (26) J

4
MIPS (RISC) Principios de Diseño

• La simplicidad favorece la regularidad


– Instrucciones de tamaño fijo
– Pocos formatos de instrucción
– El código de operación siempre son los primeros 6 bits
• Mientras más pequeño, más rápido
– Juegos de instrucciones limitado
– Número de registros limitado
– Modos de acceso a memoria limitados
• Hacer el “caso común” rápido
– Usar registros como operandos aritméticos
– Permitir a las instrucciones contener valores inmediatos
• Un buen diseño exige buenos compromisos
– Tres formatos de instrucciones

5
Registros MIPS

Register File
32 bits
• 32 Registros de 32 bits src1 addr
5 32 src1
– 2 puertos de lectura 5 data
src2 addr
– 1 puerto de escritura 32
5 locations
dst addr
32 src2
32
write data data
❑ Los registros son:
l Más rápidos que la memoria principal write control
- Pero los registros mayores son más lentos que el resto.
- Los puertos de lectura y escritura ralentizan el sistema de forma cuadrática
l Fáciles de usar para el compilador
l Pueden almacenar variables
- La densidad del código mejora (los registros son llamados con menor número
de bits que una dirección de memoria)

6
Índice de contenidos

1. Clases de instrucciones y registros


2. Instrucciones aritméticas
3. Instrucciones Lógicas
4. Instrucciones de acceso a memoria
5. Instrucciones de control

8
Operaciones Aritméticas

• Conjunto: add, addi, sub


– Dos orígenes y un destino
add rd, rs, rt
sub rd, rs, rt
addi rt, rs, inm
• add, sub: suma y resta utilizando registros
destino ($t0)  origen1($s1) op origen2($s2)

9
Índice de contenidos

1. Clases de instrucciones y registros


2. Instrucciones aritméticas
3. Instrucciones Lógicas
4. Instrucciones de acceso a memoria
5. Instrucciones de control

12
Operaciones Lógicas
• Conjunto: and, or, nor, andi, ori, sll, srl
– Dos orígenes y un destino
and rd, rs, rt
or rd, rs, rt
nor rd, rs, rt
andi rt, rs, inm
ori rt, rs, inm
sll rd, rs, sa
srl rd, rs, sa

13
• and, or, nor, sll, srl: Instrucciones Formato R
– Peculiaridad: sll y srl → desplazamientos
op rs rt rd sa funct

srl $t0, $s1, 10


A estos
desplazamientos se les
denomina “lógicos”,
destino  origen1 op sa porque rellenan con
ceros

0 0 17 8 10 0x02
• andi, ori: Instrucciones Formato I

14
Índice de contenidos

1. Clases de instrucciones y registros


2. Instrucciones aritméticas
3. Instrucciones Lógicas
4. Instrucciones de acceso a memoria
5. Instrucciones de control

15
Op. Acceso Memoria

• Conjunto: lw, sw, lh, lhu, sh, lb, lbu, sb, lui
– Un orígen, un destino y un desplazamiento
lw rt, inm(rs)→Carga de memoria
sw rt, inm(rs)→Alm. en memoria
lh rt, inm(rs)
sh rt, inm(rs)
lb rt, inm(rs)
sb rt, inm(rs)
lhu rt, inm(rs)
lbu rt, inm(rs)
lui rt, inm
– Carga (l*): desde la dirección de memoria dada (inm(rs)) al regitro
(rt)
– Almacenamiento (s*): del valor del registro (rt) en la dirección dada
(inm(rs))

16
Op. Acceso Memoria
• Muy útil direccionar por bytes: la mayoría de arquitecturas lo
hacen
– Restricción de alineamiento – la dirección de memoria de una
palabra debe estar en los límites de palabra naturales (en múltiplos
de 4 en el MIPS-32)
• Big Endian: el byte de más a la izquierda es la dirección de la
palabra
IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA
• Little Endian: el byte de más a la derecha es la dirección de la
palabra
Intel 80x86, DEC Vax, DEC Alpha (Windows NT)

little endian byte 0


3 2 1 0
msb lsb
0 1 2 3
big endian byte 0

18
Índice de contenidos

1. Clases de instrucciones y registros


2. Instrucciones aritméticas
3. Instrucciones Lógicas
4. Instrucciones de acceso a memoria
5. Instrucciones de control

19
• Saltos Condicionales:
bne $s0, $s1, Lbl #ir a Lbl si $s0$s1
beq $s0, $s1, Lbl #ir a Lbl si $s0=$s1

– Ejemplo: if (i==j) h = i + j;
bne $s0, $s1, Lbl1
add $s3, $s0, $s1
Lbl1: ...
¿?
❑ Instrucciones Formato I
0x05 16 17 16 bit offset

¿Cómo se especifica la dirección del destino del salto?

20
Especificando destinos

• Uso de un registro (como lw y sw) añadido a los 16 bits de offset


– ¿cuál? El registro de dirección de la instrucción (PC)
• PC se actualiza(PC+4) durante el ciclo de búsqueda de la siguiente
instrucción, así que mantiene la dirección de la siguiente instrucción
– La distancia de salto está limitada desde -215 hasta +215-1
(palabras) instrucciones desde la instrucción de salto, pero la
mayoría de los saltos son locales.
16

Signo extendido offset

00

32 32
Add
PC 32 Add
32 Dirección
4 32 ? destino del
32 32 salto

21
Mejoras de Saltos

• ¿Otros tipos de salto? → Uso de una instrucción de


comparación para aumentar la funcionalidad → slt
• Instrucción “Set on less than”:
slt $t0, $s0, $s1 # if $s0 < $s1 then
# $t0 = 1 else
# $t0 = 0

• Instrucción de Formato R
0 16 17 8 0x24

• Versiones alternativas de slt


slti $t0, $s0, 25 # if $s0 < 25 then $t0=1 ...
sltu $t0, $s0, $s1# if $s0 < $s1 then $t0=1 ...
sltiu $t0, $s0, 25# if $s0 < 25 then $t0=1 ...

22
Más Instrucciones de Salto

• Se puede usar slt, beq, bne, y el valor fijo a 0 del registro


$zero para crear otras condiciones
– Menor que blt $s1, $s2, Label
slt $at, $s1, $s2 #$at set to 1 if
bne $at, $zero, Label #$s1 < $s2

– Menor o igual a ble $s1, $s2, Label


– Mayor que bgt $s1, $s2, Label
– Mayor o igual a bge $s1, $s2, Label

❑ Estos saltos están incluídos como pseudo-instrucciones –


reconocidas por el ensamblador
l Este es el motivo de que el ensamblador necesite un registro
reservado ($at)

23
Otras instrucciones de Control

• El MIPS también posee una instrucción de salto


incondicional o instrucción jump:
j etiqueta #ir a etiqueta
❑ Formato de Instrucción J:
0x02 26-bit address

26

00

32
4
PC 32

25
Saltando más allá

• ¿Qué sucede si el destino del salto es más lejano de lo que puede


ser almacenado en 16 bits?

❑ ¡Ensamblador al rescate! – Inserta un salto incondicional al


destino e invierte la condición (¡ahora tenemos 26 bits!)
inverts the condition
beq $s0, $s1, L1
Se vuelve:
bne $s0, $s1, L2
j L1
L2:

26

Potrebbero piacerti anche