Codificacion

23
Codificación de Instrucciones Cecilia Hernández

Transcript of Codificacion

Page 1: Codificacion

Codificación de Instrucciones

Cecilia Hernández

Page 2: Codificacion

Codificación de Instrucciones

Lenguaje assembly Representación simbólica de instrucciones del lenguaje de máquina Conveniencias para programación (menmónicos, labels, directivas,

etc.) Lenguaje de máquina

Instrucciones en memoria representadas en binario Procesador las transforma en señales de control para ejecutar la

instrucción Campos de una instrucción

Código de operación (opcode) Operandos inmediatos (constantes, desplazamientos) Registros operando Información adicional (ej. Opcode extendido, continuación de la

instrucción, etc.) Objetivos de la codificación de instrucciones

Simplicidad (más fácil de decodificar) Regular (campos de la instrucción son fijos) Compacto (reduce el tamaño en memoria de los programas)

Page 3: Codificacion

Codificación de instrucciones

ISA define Formato de instrucciones (sintaxis) El significado de una instrucción (semántica)

Codificación corresponde a formato Cada formato de instrucción tiene varios campos El campo “código de operación” proporciona la

semántica de la instrucción (add, lw, etc) Campos operandos especifican los datos de

entrada y salida de la ejecución de la instrucción

Page 4: Codificacion

Codificación de instrucciones MIPS

MIPS es RISC, por lo tanto pocos formatos de instrucciones Tipo Registro Tipo Immediato Tipo Jump

Todas las instrucciones son del mismo largo (32 bits)

Formatos consistentes entre sí Código de operación siempre en el mismo lugar Constante immediata siempre en el mismo lugar

Page 5: Codificacion

Formato tipo-R (tipo Registro)

Usado en instrucciones aritméticas, lógicas y de comparación

Op rs rt rd shft func

6bits 5bits 5bits 5bits 5bits 6bits

Op: Código de operación Rs: Registro fuente (source) Rt: Registro fuente (source) Rd: Registro destino Shft: Cantidad de desplazamiento Func: Permite expandir el código de operación

Page 6: Codificacion

Ejemplo Instrucción tipo-R

Op =0, funct = 34rs rt rd

0 8 9 7 0 34

Bits no usados

sub $7,$8,$9 # $7 = $8 - $9

Op rs rt rd shft func

Page 7: Codificacion

Formato tipo Immediato

Se usa en instrucciones donde un operando de entrada es una constante de 16 bits

Op: 6 bits para el código de operación rt: aquí se usa como registro destino rs: registro de entrada Immediato: constante de 16 bits Ejemplo:

Addi $4, $7, 78 # $4 = $7 + 78

Op rs rt immediato

6bits 5bits 5bits 16 bits

Page 8: Codificacion

08 12 4 33

En Hexa: 21840021

Op(6) rs(5) rt(5) immediato (16)

Ejemplo Instrucción tipo-I Addi $a0,$12,33 # $4 = $12 +33

# $a0 es $4# Op Addi 08

Page 9: Codificacion

Extensión de signo

Internamente la ALU trata con números de 32 bits

Qué ocurre con una constante de 16 bits? Se extiende a 32

Si la instrucción es sin signo (addiu) Completar los 16 bits de arriba con 0s

Si la instrucción es con signo (addi) Completar los 16 bits de arriba con el bit más

significativo de la constante de 16 bits Agrega 0s si la constante es positiva Agrega 1s si la constante es negativa

Page 10: Codificacion

Instrucciones load/store

MIPS=RISC= arquitectura load/store Load: lee dato de memoria a registro Store: escribe dato de registro a memoria

Cada instrucción load/store debe especificar La unidad de info a ser transferida de o hacia

memoria (byte, half-word, word…) La dirección de memoria

Dirección de memoria es de 32 bits

Page 11: Codificacion

Direccionando instrucciones load/store

La dirección se calcula como la suma De contenido de un registro base (rs) 16 bits de desplazamiento, definido en la sección

immediata de la instrucción. Este se suma, como un número con signo, al contenido del registro base

Por lo tanto, uno puede direccionar cualquier byte dentro de +-32KB de la dirección apuntada por el contenido del registro base

Page 12: Codificacion

Ejemplos de instrucciones Load/store

Lee de memoria a registro Lw rt, rs, offset #rt <- Memoria[rs + offset]

Almacena en memoria contenido de registro Sw rt, rs, offset #rt-> Memoria[rs + offset]

Para caso de datos de tipo bytes y half-words Para loads es necesario especificar si los datos al

almacenar son con o sin signo Lb rt, rs, offset #rt<-ext-signo(Memoria[rs+offset]) Lbu rt,rs, offset #rt<-ext-ceros(Memoria[rs+offset]) Sb rt,rs,offset #BMS (rt) ->Memoria[rs+offset] Sh rt, rs, offset #HMS (rt) ->Memoria[rs+offset]

Page 13: Codificacion

Formato Load/Store

Se necesita Código de operación Registro destino para lectura y fuente para escritura : rt Registro base : rs Offset : campo immediato

Ejemplo

Lw $14, 8($sp) # $14 cargado con contenido# del tope del stack + 8

35 29 14 8

Page 14: Codificacion

Cargando constantes en registro

Si la constante es pequeña (codificada en a lo mas 16 bits) se usa el campo immediato Li $14, 8 # $14<- 8 Sin embargo, no existe código de operación para

li, debido a que es una pseudoinstrucción SPIM la reconoce y la traduce a una instrucción

entendida por MIPS (un Addi o ori) Ori $14, $0, 8 #$14<- $0 +8

Page 15: Codificacion

Cargando constantes en registro

Si la constante no cabe en 16 bits Lui (load upper imm) para cargar 16 bits más

significativos, pone ceros en los 16 bits menos significativos

Usar ori para los 16 bits menos significativos Ejemplo

Lui $t0, 0x1A23 Ori $t0, $t0, 0x9877 # $t0<- 0x1A239877

Estas se usan para implementar pseudoinstrucción “la”

Page 16: Codificacion

Instrucciones para control de flujo

Comparación Registro con 0

Instrucciones bne, beq, bgt, blt, etc

Beq rs,rt,target #salta a target if rs = rtBeqz rs, target #salta a target if rs = 0

Entre registros, usan un tercer registro Instrucciones

slt rd,rs,rt # rd = 1 if rs < rt else rd = 0ejemplo: slt $10,$5,$6 # $10 = 1 if $5 < $6

# sino $10 = 0

Page 17: Codificacion

Transferencias de control incondicionales

Saltos incondicionales b target (pseudoinstrucción) begz target

Corto alcance, solo 16 bits (+-32K instrucciones)

Instrucciones jump J target #formato: cod op mas 26 bits target Jr $rs #salta a direccion almacenada en rs

Llamadas a funciones/procedimientos Jal target # salta a target y $ra<- PC + 1 Jr $31 # salta a dirección en #31 ($ra)

Page 18: Codificacion

Formato de saltos condicionales

Código de operación, uno o dos registros y offset No hay registro base porque offset se

suma a PC Dos posibles

Beq $4, $5, 100 beqz $4, 100

offsetCod-op rs Rt/func

Page 19: Codificacion

Cómo direccionar operandos

ISA especifica modos de direccionamiento MIPS es RISC sólo algunos modos

Modo registro: operando contenido en registro Base + desplazamiento: para direccionar

memoria: Operando se encuentra en dirección de memoria calculada por contenido de registro base + un offset

Modo immediato: Operando es una constante que viene definida en la instrucción

Modo relativo al PC: registro base es el PC (jal)

Page 20: Codificacion

Codificación de Instrucciones

Lenguaje assembly Representación simbólica de instrucciones del lenguaje de máquina Conveniencias para programación (menmónicos, labels, directivas,

etc.) Lenguaje de máquina

Instrucciones en memoria representadas en binario Procesador las transforma en señales de control para ejecutar la

instrucción Campos de una instrucción

Código de operación (opcode) Operandos inmediatos (constantes, desplazamientos) Registros operando Información adicional (ej. Opcode extendido, continuación de la

instrucción, etc.) Objetivos de la codificación de instrucciones

Simplicidad (más fácil de decodificar) Regular (campos de la instrucción son fijos) Compacto (reduce el tamaño en memoria de los programas)

Page 21: Codificacion

Codificación de instruciones MIPS

Instrucciones tipo R: Instrucciones con 3 registros Ej. add, subu, sla, jr Ej: and $10, $14, $3

000000 01110 00011 01010 00000 000000 Ej: or $10, $14, $3

000000 01110 00011 01010 00000 000001

Opcode Rs Rt Rd Shamt Function6b 6b5b 5b 5b 5b

Page 22: Codificacion

Codificación de instrucciones MIPS

Instrucciones tipo I: Instrucciones con operandos inmediatos Ej. addi, subui, beq Ej: andi $10, $14, 23 000001 01110 01010 0000 0000 0001

0111 Ej: beq $10, $14, CLabel 000010 01010 01110 0000 0000 0000

0101Opcode Rs Rt

6b 5b 5bImmediate (CLabel)

16b

Page 23: Codificacion

Codificación de instrucciones MIPS

Instrucciones tipo J: Instrucciones de salto incondicional Ej: j Label 110000 00 0000 0000 0000 0000 0001 0111

Label de 26 bits no cubre espacio de direcciones completo! Direcciona instrucciones, no bytes Dirección destino

4 MSB son los mismos del PC actual 26 bits siguientes vienen del label 2 LSB son siempre cero

Opcode6b

Label26b