Codificacion
-
Upload
stefano-salvatori -
Category
Technology
-
view
7.109 -
download
1
Transcript of Codificacion
Codificación de Instrucciones
Cecilia Hernández
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)
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
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
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
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
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
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
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
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
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
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]
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
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
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”
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
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)
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
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)
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)
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
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
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