Codificación de Instrucciones Cecilia Hernández
Codificación de Instrucciones <ul><li>Lenguaje assembly </li></ul><ul><ul><li>Representación simbólica de instrucciones de...
Codificación de instrucciones <ul><li>ISA define  </li></ul><ul><ul><li>Formato de instrucciones (sintaxis) </li></ul></ul...
Codificación de instrucciones MIPS <ul><li>MIPS es RISC, por lo tanto pocos formatos de instrucciones </li></ul><ul><ul><l...
Formato tipo-R (tipo Registro) <ul><li>Usado en instrucciones aritméticas, lógicas y de comparación </li></ul>Op  rs  rt  ...
Ejemplo Instrucción tipo-R Op =0, funct = 34 rs  rt  rd  0  8  9  7  0  34 Bits no usados sub $7,$8,$9 # $7 = $8 - $9 Op  ...
Formato tipo Immediato <ul><li>Se usa en instrucciones donde un operando de entrada es una constante de 16 bits </li></ul>...
Ejemplo Instrucción tipo-I 08  12  4  33 En Hexa:  21840021 Op(6)  rs(5)  rt(5)  immediato (16) <ul><ul><li>Addi $a0,$12,3...
Extensión de signo <ul><li>Internamente la ALU trata con números de 32 bits </li></ul><ul><li>Qué ocurre con una constante...
Instrucciones load/store <ul><li>MIPS=RISC= arquitectura load/store </li></ul><ul><ul><li>Load: lee dato de memoria a regi...
Direccionando instrucciones load/store <ul><li>La dirección se calcula como la suma </li></ul><ul><ul><li>De contenido de ...
Ejemplos de instrucciones Load/store <ul><li>Lee de memoria a registro </li></ul><ul><ul><li>Lw rt, rs, offset #rt <- Memo...
Formato Load/Store <ul><li>Se necesita  </li></ul><ul><ul><li>Código de operación </li></ul></ul><ul><ul><li>Registro dest...
Cargando constantes en registro <ul><li>Si la constante es pequeña (codificada en a lo mas 16 bits) se usa el campo immedi...
Cargando constantes en registro <ul><li>Si la constante no cabe en 16 bits  </li></ul><ul><ul><li>Lui (load upper imm) par...
Instrucciones para control de flujo <ul><li>Comparación </li></ul><ul><ul><li>Registro con 0 </li></ul></ul><ul><ul><ul><l...
Transferencias de control incondicionales <ul><li>Saltos incondicionales </li></ul><ul><ul><li>b target (pseudoinstrucción...
Formato de saltos condicionales <ul><li>Código de operación, uno o dos registros y offset </li></ul><ul><ul><li>No hay reg...
Cómo direccionar operandos <ul><li>ISA especifica modos de direccionamiento </li></ul><ul><li>MIPS es RISC sólo algunos mo...
Codificación de Instrucciones <ul><li>Lenguaje assembly </li></ul><ul><ul><li>Representación simbólica de instrucciones de...
Codificación de instruciones MIPS <ul><li>Instrucciones tipo R: </li></ul><ul><ul><li>Instrucciones con 3 registros </li><...
Codificación de instrucciones MIPS <ul><li>Instrucciones tipo I: </li></ul><ul><ul><li>Instrucciones con operandos inmedia...
Codificación de instrucciones MIPS <ul><li>Instrucciones tipo J: </li></ul><ul><ul><li>Instrucciones de salto incondiciona...
Upcoming SlideShare
Loading in …5
×

Codificacion

7,802 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,802
On SlideShare
0
From Embeds
0
Number of Embeds
80
Actions
Shares
0
Downloads
128
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Codificacion

  1. 1. Codificación de Instrucciones Cecilia Hernández
  2. 2. Codificación de Instrucciones <ul><li>Lenguaje assembly </li></ul><ul><ul><li>Representación simbólica de instrucciones del lenguaje de máquina </li></ul></ul><ul><ul><li>Conveniencias para programación (menmónicos, labels, directivas, etc.) </li></ul></ul><ul><li>Lenguaje de máquina </li></ul><ul><ul><li>Instrucciones en memoria representadas en binario </li></ul></ul><ul><ul><li>Procesador las transforma en señales de control para ejecutar la instrucción </li></ul></ul><ul><li>Campos de una instrucción </li></ul><ul><ul><li>Código de operación (opcode) </li></ul></ul><ul><ul><li>Operandos inmediatos (constantes, desplazamientos) </li></ul></ul><ul><ul><li>Registros operando </li></ul></ul><ul><ul><li>Información adicional (ej. Opcode extendido, continuación de la instrucción, etc.) </li></ul></ul><ul><li>Objetivos de la codificación de instrucciones </li></ul><ul><ul><li>Simplicidad (más fácil de decodificar) </li></ul></ul><ul><ul><li>Regular (campos de la instrucción son fijos) </li></ul></ul><ul><ul><li>Compacto (reduce el tamaño en memoria de los programas) </li></ul></ul>
  3. 3. Codificación de instrucciones <ul><li>ISA define </li></ul><ul><ul><li>Formato de instrucciones (sintaxis) </li></ul></ul><ul><ul><li>El significado de una instrucción (semántica) </li></ul></ul><ul><li>Codificación corresponde a formato </li></ul><ul><ul><li>Cada formato de instrucción tiene varios campos </li></ul></ul><ul><ul><li>El campo “código de operación” proporciona la semántica de la instrucción (add, lw, etc) </li></ul></ul><ul><ul><li>Campos operandos especifican los datos de entrada y salida de la ejecución de la instrucción </li></ul></ul>
  4. 4. Codificación de instrucciones MIPS <ul><li>MIPS es RISC, por lo tanto pocos formatos de instrucciones </li></ul><ul><ul><li>Tipo Registro </li></ul></ul><ul><ul><li>Tipo Immediato </li></ul></ul><ul><ul><li>Tipo Jump </li></ul></ul><ul><li>Todas las instrucciones son del mismo largo (32 bits) </li></ul><ul><li>Formatos consistentes entre sí </li></ul><ul><ul><li>Código de operación siempre en el mismo lugar </li></ul></ul><ul><ul><li>Constante immediata siempre en el mismo lugar </li></ul></ul>
  5. 5. Formato tipo-R (tipo Registro) <ul><li>Usado en instrucciones aritméticas, lógicas y de comparación </li></ul>Op rs rt rd shft func 6bits 5bits 5bits 5bits 5bits 6bits <ul><li>Op: Código de operación </li></ul><ul><li>Rs: Registro fuente (source) </li></ul><ul><li>Rt: Registro fuente (source) </li></ul><ul><li>Rd: Registro destino </li></ul><ul><li>Shft: Cantidad de desplazamiento </li></ul><ul><li>Func: Permite expandir el código de operación </li></ul>
  6. 6. Ejemplo Instrucción tipo-R Op =0, funct = 34 rs rt rd 0 8 9 7 0 34 Bits no usados sub $7,$8,$9 # $7 = $8 - $9 Op rs rt rd shft func
  7. 7. Formato tipo Immediato <ul><li>Se usa en instrucciones donde un operando de entrada es una constante de 16 bits </li></ul><ul><li>Op: 6 bits para el código de operación </li></ul><ul><li>rt: aquí se usa como registro destino </li></ul><ul><li>rs: registro de entrada </li></ul><ul><li>Immediato: constante de 16 bits </li></ul><ul><li>Ejemplo: </li></ul><ul><ul><li>Addi $4, $7, 78 # $4 = $7 + 78 </li></ul></ul>Op rs rt immediato 6bits 5bits 5bits 16 bits
  8. 8. Ejemplo Instrucción tipo-I 08 12 4 33 En Hexa: 21840021 Op(6) rs(5) rt(5) immediato (16) <ul><ul><li>Addi $a0,$12,33 # $4 = $12 +33 </li></ul></ul><ul><ul><li># $a0 es $4 </li></ul></ul><ul><ul><li># Op Addi 08 </li></ul></ul>
  9. 9. Extensión de signo <ul><li>Internamente la ALU trata con números de 32 bits </li></ul><ul><li>Qué ocurre con una constante de 16 bits? </li></ul><ul><ul><li>Se extiende a 32 </li></ul></ul><ul><li>Si la instrucción es sin signo (addiu) </li></ul><ul><ul><li>Completar los 16 bits de arriba con 0s </li></ul></ul><ul><li>Si la instrucción es con signo (addi) </li></ul><ul><ul><li>Completar los 16 bits de arriba con el bit más significativo de la constante de 16 bits </li></ul></ul><ul><ul><ul><li>Agrega 0s si la constante es positiva </li></ul></ul></ul><ul><ul><ul><li>Agrega 1s si la constante es negativa </li></ul></ul></ul>
  10. 10. Instrucciones load/store <ul><li>MIPS=RISC= arquitectura load/store </li></ul><ul><ul><li>Load: lee dato de memoria a registro </li></ul></ul><ul><ul><li>Store: escribe dato de registro a memoria </li></ul></ul><ul><li>Cada instrucción load/store debe especificar </li></ul><ul><ul><li>La unidad de info a ser transferida de o hacia memoria (byte, half-word, word…) </li></ul></ul><ul><ul><li>La dirección de memoria </li></ul></ul><ul><li>Dirección de memoria es de 32 bits </li></ul>
  11. 11. Direccionando instrucciones load/store <ul><li>La dirección se calcula como la suma </li></ul><ul><ul><li>De contenido de un registro base (rs) </li></ul></ul><ul><ul><li>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 </li></ul></ul><ul><li>Por lo tanto, uno puede direccionar cualquier byte dentro de +-32KB de la dirección apuntada por el contenido del registro base </li></ul>
  12. 12. Ejemplos de instrucciones Load/store <ul><li>Lee de memoria a registro </li></ul><ul><ul><li>Lw rt, rs, offset #rt <- Memoria[rs + offset] </li></ul></ul><ul><li>Almacena en memoria contenido de registro </li></ul><ul><ul><li>Sw rt, rs, offset #rt-> Memoria[rs + offset] </li></ul></ul><ul><li>Para caso de datos de tipo bytes y half-words </li></ul><ul><ul><li>Para loads es necesario especificar si los datos al almacenar son con o sin signo </li></ul></ul><ul><ul><li>Lb rt, rs, offset #rt<-ext-signo(Memoria[rs+offset]) </li></ul></ul><ul><ul><li>Lbu rt,rs, offset #rt<-ext-ceros(Memoria[rs+offset]) </li></ul></ul><ul><ul><li>Sb rt,rs,offset #BMS (rt) ->Memoria[rs+offset] </li></ul></ul><ul><ul><li>Sh rt, rs, offset #HMS (rt) ->Memoria[rs+offset] </li></ul></ul>
  13. 13. Formato Load/Store <ul><li>Se necesita </li></ul><ul><ul><li>Código de operación </li></ul></ul><ul><ul><li>Registro destino para lectura y fuente para escritura : rt </li></ul></ul><ul><ul><li>Registro base : rs </li></ul></ul><ul><ul><li>Offset : campo immediato </li></ul></ul><ul><li>Ejemplo </li></ul><ul><ul><li>Lw $14, 8($sp) # $14 cargado con contenido </li></ul></ul><ul><ul><li># del tope del stack + 8 </li></ul></ul>35 29 14 8
  14. 14. Cargando constantes en registro <ul><li>Si la constante es pequeña (codificada en a lo mas 16 bits) se usa el campo immediato </li></ul><ul><ul><li>Li $14, 8 # $14<- 8 </li></ul></ul><ul><ul><li>Sin embargo, no existe código de operación para li, debido a que es una pseudoinstrucción </li></ul></ul><ul><ul><li>SPIM la reconoce y la traduce a una instrucción entendida por MIPS (un Addi o ori) </li></ul></ul><ul><ul><ul><li>Ori $14, $0, 8 #$14<- $0 +8 </li></ul></ul></ul>
  15. 15. Cargando constantes en registro <ul><li>Si la constante no cabe en 16 bits </li></ul><ul><ul><li>Lui (load upper imm) para cargar 16 bits más significativos, pone ceros en los 16 bits menos significativos </li></ul></ul><ul><ul><li>Usar ori para los 16 bits menos significativos </li></ul></ul><ul><ul><li>Ejemplo </li></ul></ul><ul><ul><ul><li>Lui $t0, 0x1A23 </li></ul></ul></ul><ul><ul><ul><li>Ori $t0, $t0, 0x9877 # $t0<- 0x1A239877 </li></ul></ul></ul><ul><ul><ul><ul><li>Estas se usan para implementar pseudoinstrucción “la” </li></ul></ul></ul></ul>
  16. 16. Instrucciones para control de flujo <ul><li>Comparación </li></ul><ul><ul><li>Registro con 0 </li></ul></ul><ul><ul><ul><li>Instrucciones bne, beq, bgt, blt, etc </li></ul></ul></ul><ul><ul><li>Beq rs,rt,target #salta a target if rs = rt </li></ul></ul><ul><ul><li>Beqz rs, target #salta a target if rs = 0 </li></ul></ul><ul><ul><li>Entre registros, usan un tercer registro </li></ul></ul><ul><ul><ul><li>Instrucciones </li></ul></ul></ul><ul><ul><li>slt rd,rs,rt # rd = 1 if rs < rt else rd = 0 </li></ul></ul><ul><ul><li>ejemplo: </li></ul></ul><ul><ul><li>slt $10,$5,$6 # $10 = 1 if $5 < $6 # sino $10 = 0 </li></ul></ul>
  17. 17. Transferencias de control incondicionales <ul><li>Saltos incondicionales </li></ul><ul><ul><li>b target (pseudoinstrucción) begz target </li></ul></ul><ul><ul><ul><li>Corto alcance, solo 16 bits (+-32K instrucciones) </li></ul></ul></ul><ul><ul><li>Instrucciones jump </li></ul></ul><ul><ul><ul><li>J target #formato: cod op mas 26 bits target </li></ul></ul></ul><ul><ul><ul><li>Jr $rs #salta a direccion almacenada en rs </li></ul></ul></ul><ul><ul><li>Llamadas a funciones/procedimientos </li></ul></ul><ul><ul><ul><li>Jal target # salta a target y $ra<- PC + 1 </li></ul></ul></ul><ul><ul><ul><li>Jr $31 # salta a dirección en #31 ($ra) </li></ul></ul></ul>
  18. 18. Formato de saltos condicionales <ul><li>Código de operación, uno o dos registros y offset </li></ul><ul><ul><li>No hay registro base porque offset se suma a PC </li></ul></ul><ul><li>Dos posibles </li></ul><ul><ul><li>Beq $4, $5, 100 beqz $4, 100 </li></ul></ul>offset Cod-op rs Rt/func
  19. 19. Cómo direccionar operandos <ul><li>ISA especifica modos de direccionamiento </li></ul><ul><li>MIPS es RISC sólo algunos modos </li></ul><ul><ul><li>Modo registro: operando contenido en registro </li></ul></ul><ul><ul><li>Base + desplazamiento: para direccionar memoria: Operando se encuentra en dirección de memoria calculada por contenido de registro base + un offset </li></ul></ul><ul><ul><li>Modo immediato: Operando es una constante que viene definida en la instrucción </li></ul></ul><ul><ul><li>Modo relativo al PC: registro base es el PC (jal) </li></ul></ul>
  20. 20. Codificación de Instrucciones <ul><li>Lenguaje assembly </li></ul><ul><ul><li>Representación simbólica de instrucciones del lenguaje de máquina </li></ul></ul><ul><ul><li>Conveniencias para programación (menmónicos, labels, directivas, etc.) </li></ul></ul><ul><li>Lenguaje de máquina </li></ul><ul><ul><li>Instrucciones en memoria representadas en binario </li></ul></ul><ul><ul><li>Procesador las transforma en señales de control para ejecutar la instrucción </li></ul></ul><ul><li>Campos de una instrucción </li></ul><ul><ul><li>Código de operación (opcode) </li></ul></ul><ul><ul><li>Operandos inmediatos (constantes, desplazamientos) </li></ul></ul><ul><ul><li>Registros operando </li></ul></ul><ul><ul><li>Información adicional (ej. Opcode extendido, continuación de la instrucción, etc.) </li></ul></ul><ul><li>Objetivos de la codificación de instrucciones </li></ul><ul><ul><li>Simplicidad (más fácil de decodificar) </li></ul></ul><ul><ul><li>Regular (campos de la instrucción son fijos) </li></ul></ul><ul><ul><li>Compacto (reduce el tamaño en memoria de los programas) </li></ul></ul>
  21. 21. Codificación de instruciones MIPS <ul><li>Instrucciones tipo R: </li></ul><ul><ul><li>Instrucciones con 3 registros </li></ul></ul><ul><ul><li>Ej. add, subu, sla, jr </li></ul></ul><ul><ul><li>Ej: and $10, $14, $3 </li></ul></ul><ul><ul><li> 000000 01110 00011 01010 00000 000000 </li></ul></ul><ul><ul><li>Ej: or $10, $14, $3 </li></ul></ul><ul><ul><li> 000000 01110 00011 01010 00000 000001 </li></ul></ul>
  22. 22. Codificación de instrucciones MIPS <ul><li>Instrucciones tipo I: </li></ul><ul><ul><li>Instrucciones con operandos inmediatos </li></ul></ul><ul><ul><li>Ej. addi, subui, beq </li></ul></ul><ul><ul><li>Ej: andi $10, $14, 23 </li></ul></ul><ul><ul><li> 000001 01110 01010 0000 0000 0001 0111 </li></ul></ul><ul><ul><li>Ej: beq $10, $14, CLabel </li></ul></ul><ul><ul><li> 000010 01010 01110 0000 0000 0000 0101 </li></ul></ul>
  23. 23. Codificación de instrucciones MIPS <ul><li>Instrucciones tipo J: </li></ul><ul><ul><li>Instrucciones de salto incondicional </li></ul></ul><ul><ul><li>Ej: j Label </li></ul></ul><ul><ul><li>110000 00 0000 0000 0000 0000 0001 0111 </li></ul></ul><ul><li>Label de 26 bits no cubre espacio de direcciones completo! </li></ul><ul><ul><li>Direcciona instrucciones, no bytes </li></ul></ul><ul><ul><li>Dirección destino </li></ul></ul><ul><ul><ul><li>4 MSB son los mismos del PC actual </li></ul></ul></ul><ul><ul><ul><li>26 bits siguientes vienen del label </li></ul></ul></ul><ul><ul><ul><li>2 LSB son siempre cero </li></ul></ul></ul>

×