ELO311 Estructuras de Computadores Digitales Operaciones MIPS Inmediatas Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design", (segunda y tercera edición), Morgan Kaufmann, CA. 2005 material del curso anterior ELO311 del Prof. Leopoldo Silva material del curso CSE331 de Mary Jane Irving de Penn State www.wikipedia.org Cray was a legend in computers … said that he liked to hire inexperienced engineers right out of school, because they do not usually know what’s supposed to be impossible. The Soul of a New Machine, Kidder, pg. 77 Repaso: MIPS ISA hasta ahora Category Instr Op Code Example Meaning Arithmetic add 0 and 32 add $s1, $s2, $s3 $s1 = $s2 + $s3 (R format) subtract 0 and 34 sub $s1, $s2, $s3 $s1 = $s2 - $s3 Data Transfer load word 35 lw $s1, 100($s2) $s1 = Memory($s2+100) store word 43 sw $s1, 100($s2) Memory($s2+100) = $s1 (I format) load byte 32 lb $s1, 101($s2) $s1 = Memory($s2+101) store byte 40 sb $s1, 101($s2) Memory($s2+101) = $s1 br on equal 4 beq $s1, $s2, L if ($s1==$s2) go to L br on not equal 5 bne $s1, $s2, L if ($s1 !=$s2) go to L Cond. Branch (I & R format) Uncond. Jump (J & R format) set on less than 2 j 2500 if ($s2<$s3) $s1=1 else $s1=0 go to 10000 jump register 0 and 8 jr $t1 go to $t1 jump and link 3 jal 2500 go to 10000; $ra=PC+4 jump 0 and 42 slt $s1, $s2, $s3 Repaso: Organización MIPS hasta ahora Processor Memory Register File src1 addr src2 addr 5 5 dst addr write data 5 1…1100 src1 data 32 32 registers ($zero - $ra) read/write addr src2 data 32 32 32 32 bits br offset 32 Fetch PC = PC+4 Exec 32 Add PC 32 Add 4 read data 32 32 32 write data 32 Decode 230 words 32 32 ALU 32 32 7 3 6 2 5 1 32 bits byte address (little Endian) 4 0 0…1100 0…1000 0…0100 0…0000 word address (binary) Bifurcaciones a Distancia Mayor (Far Branch) Que pasa si la distancia de una bifurcación es mayor de la que puede ser hecha en 16 bits? El ensamblador viene al rescate – inserta un salto incondicional al objetivo de la bifurcación e inverte la condición beq $s0, $s1, L1 se convierte en bne j L2: $s0, $s1, L2 L1 Tratando con Constantes Valores constantes se usan frecuentemente (muchas veces el 50% de los operandos) e.g., A = A + 5; B = B + 1; C = C - 18; Solución? Permitir instrucciones MIPS como addi slti andi ori $sp, $t0, $t0, $t0, $sp, $t1, $t0, $t0, 4 10 6 4 Como se hace funcionar? Operandos Inmediatos Instrucciones MIPS inmediatas: addi $sp, $sp, 4 #$sp = $sp + 4 slti $t0, $s2, 15 #$t0 = 1 if $s2<15 Formato de Máquina: op rs rt 16 bit immediate 8 29 29 4 10 18 8 15 I format La constante se mantiene en la instrucción misma! I format – Formato inmediato Limites de valores se limita al rango +215–1 a -215 Como Usar Constantes Mayores? Queremos cargar constantes de 32 bits en un registro Hay dos instrucciones, cargar superior inmediato o "load upper immediate" lui $t0, 1010101010101010 16 0 8 1010101010101010 Y una para hacer un OR con los bits menores: ori $t0, $t0, 1010101010101010 1010101010101010 0000000000000000 0000000000000000 1010101010101010 Como Usar Constantes Mayores? Queremos cargar constantes de 32 bits en un registro Hay dos instrucciones, cargar superior inmediato o "load upper immediate" lui $t0, 1010101010101010 16 0 8 1010101010101010 Y una para hacer un OR con los bits menores: ori $t0, $t0, 1010101010101010 1010101010101010 0000000000000000 0000000000000000 1010101010101010 1010101010101010 1010101010101010 Modos de Direccionamiento Registro – operando es un registro Base (desplazamiento) – operando es en la ubicacion de memoria cuya direccion es la suma de un registro y de una constante de 16-bits contenida en la instrucción Inmediato – operando es una constante de 16-bits contenida en la instrucción PC-relativo – dirección de la instruccion es la suma del PC y una constante de 16-bits contenida en la instrucción Seudo-directo – dirección de la instrucción e la constante de 26-bits contenida en la instrucción concatenado con los 4 bits superiores del PC Direccionamiento Ilustrado 1. Register addressing op rs rt rd funct Register word operand 2. Base addressing op rs rt offset Memory word or byte operand base register 3. Immediate addressing op rs rt operand 4. PC-relative addressing op rs rt offset Memory branch destination instruction Program Counter (PC) 5. Pseudo-direct addressing op Memory jump address || Program Counter (PC) jump destination instruction Principios de Diseño Simplicidad beneficia regularidad Instrucciones de tamaño fijo – 32-bits Pequeño numero de formatos de instrucciones Pequeño es mas rápido Conjunto limitado de instrucciones Número limitado de registros en conjunto de registros (register file) Número limitado de modos de direccionamiento Buen diseño requiere compromisos Tres formatos de instrucciones Hacer el caso común mas rápido Operandos aritméticos del conjunto de registros (maquina load-store) Permite instrucciones con operandos inmediatos Repaso: MIPS ISA hasta ahora Category Instr Op Code Example Meaning Arithmetic add 0 and 32 add $s1, $s2, $s3 $s1 = $s2 + $s3 (R & I format) subtract 0 and 34 sub $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate 8 addi $s1, $s2, 6 $s1 = $s2 + 6 or immediate 13 ori $s1, $s2, 6 $s1 = $s2 v 6 Data Transfer load word 35 lw $s1, 24($s2) $s1 = Memory($s2+24) store word 43 sw $s1, 24($s2) Memory($s2+24) = $s1 (I format) load byte 32 lb $s1, 25($s2) $s1 = Memory($s2+25) store byte 40 sb $s1, 25($s2) Memory($s2+25) = $s1 load upper imm 15 lui $s1, 6 $s1 = 6 * 216 br on equal 4 beq $s1, $s2, L if ($s1==$s2) go to L br on not equal 5 bne $s1, $s2, L if ($s1 !=$s2) go to L Cond. Branch (I & R format) Uncond. Jump (J & R format) set on less than 0 and 42 slt $s1, $s2, $s3 if ($s2<$s3) $s1=1 else $s1=0 if ($s2<6) $s1=1 else $s1=0 set on less than immediate 10 slti $s1, $s2, 6 jump 2 j 2500 go to 10000 jump register 0 and 8 jr $t1 go to $t1 jump and link 3 jal 2500 go to 10000; $ra=PC+4