Pr. Dr. Xavier Bonnaire Slide 1 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Temario ● Introducción ● Estructura Básica de un Computador ● Lenguaje de Máquina Básico ● Instrucciones para decisiones ● Procedimientos ● Direccionamiento ● Assemblers y Linkers Slide 2 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Introducción ● Para programar un computador digital – Se debe usar su propio lenguaje de programación ● ● ● Es decir el lenguaje de programación del procesador El lenguaje de programacion del procesador – La palabras del lenguaje se denominan instrucciones – El vocabulario se llama el conjunto de instrucciones Varios lenguajes – Casi todo los procesadores tienen un conjunto de instrucciones diferente – Algunos son compatibles (Intel P4 y AMD Athlon, etc...) Cada uno tiene instrucciones especiales Slide 3 Pr. Dr.● Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Estructura Básica de un Computador ● ● Un computador digital se compone de 3 grandes bloques – El Procesador – El Sistema de Memoria – El Sistema de Entrada / Salida El Procesador es el elemento principal – Se implementa con un Chip VLSI – Está formado por La Unidad de Control El Camino de Datos Slide 4 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Estructura de un Computador Compilador Unidad de Control Entrada MEMORIA Camino de Datos Salida Procesador Slide 5 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Estructura de un Computador Unidad de Control Camino de Datos Entrada MEMORIA Salida PCI BUS Procesado r Tarjeta Video Disco Duro Slide 6 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Estructura de un Computador PCI Slot AGP Slot Procesador Socket Chipset Clock CMOS Li-Ion Bat. RAM Slolts Hard Disk IDE Conectors Power Conector Slide 7 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Procesador Conector Slide 8 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Lenguaje de Máquina Básico ● Consideraremos la máquina MIPS para nuestro estudio – ● El procesador MIPS tiene 32 bits – ● Procesadores R3000 y R4000 Se desarrolló con tecnología RISC Su diseño es lo suficientemente general como para entender el lenguaje de máquina de cualquier procesador. – Los procesadores tipo Pentium 4, AMD Athlon XP, etc.. pueden tener un conjunto de instrucciones muchos más grande que el MIPS Slide 9 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Lenguaje Assembly y de Máquina ● ● ● Lenguage Assembly – Una forma de representar las instrucciones y operandos del lenguaje del procesador – Forma que puede entender el ser humano Lenguaje de Máquina – La representacion del lenguaje del procesador al nivel binario – Una serie de bytes que representan las instrucciones y operandos El Assembler – El programa que permite pasar de la forma Assembly a la forma lenguaje de máquina Slide 10 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Lenguaje de Alto Nivel - Procesador Compilador Lenguaje de Alto Nivel (C, Java, ...) No depende del Procesador Assembler Lenguaje Assembly Lenguaje Máquina Linker Lenguaje Máquina Ejecutable Slide 11 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Aritmética (Assembly) ● ● Todo computador debe ser capaz de realizar operaciones aritméticas. Sumas y restas en MIPS se realizan de la siguiente manera: add a,b,c#a ← b + c sub a,b,c #a ← b - c Oper 1 destino Oper 2 Oper 2 Regla 1 de diseño: Simplicidad → regularidad → desempeño Slide 12 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplos Código en C: a=b+c; d=a-e; Código en C: f=(g+h)-(i+j) Lenguaje de Máquina: add a,b,c sub d,a,e ¿..? Slide 13 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Operadores y Registros ● A diferencia de los lenguajes de alto nivel – ● ● ● ● ● Los operandos de las instrucciones aritméticas no pueden ser variable. Son memorias muy rápidas llamadas registros. Un registro de la máquina MIPS tiene 32 bits. Un grupo de 32 bits, se denomina palabra (Word) Una colección de 32 registros rápidos se denomina Archivo de Registros ¿Por qué el archivo de registros tiene sólo 32 registros? Lo pequeño es rápido (regla 2 de diseño) Slide 14 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Operadores y Registros ● ● La identificación de los registros se puede hacer usando números (del 0 al 31) Usaremos $s0, $s1, ..., $sN – ● Para designar registros que corresponden a variables de programas. Usaremos $t0, $t1, ..., $tN – Para designar registros que corresponden a variables temporales. Slide 15 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplos f=(g+h)-(i+j) add $t0,$s1,$s2 g+h # $t0 ← add $t1,$s3,$s4 i+j f g+h i+j sub $s0,$t0,$t1 $t0-$t1 # $t1 ← # f ← Slide 16 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Tratamiento de Arreglos ● Los lenguajes de programación – ● ● Además de manejar variables simple. Son capaces de manipular estructuras más complejas. Estructuras de datos como los arreglos, son mantenidos en memoria principal. Para llevar una palabra de memoria a un registro se utiliza la instrucción Load Word lw Reg1, Const(Reg2) Ex: lw $s1, 100($s2) $s1 = Memory[$s2 + 100] Slide 17 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo ● Compilar “a mano”, la siguiente expresión en C: g=h+A[8]; Constante Segundo registro Resultado lw $t0,8($s3) #$t0 ← A[8] add $s1,$s2,$t0 #g ← h+A[8] Resultado Final h La dirección de memoria se obtiene sumando una constante con el contenido del segundo registro Slide 18 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Offset y Registro Base lw $t8,8($s3) Offset Registro Base La constante en una instrucción de transferencia se denomina offet y registro que se le suma para formar la dirección, se denomina registr Slide 19 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Restricción de Alineamiento ● La memoria principal está organizada en Bytes. – ● Los procesadores están organizados en registros de 32 bits (palabras) – ● Esto significa que las direcciones son direcciones de Bytes 32 Bits = 4 Bytes La forma de ubicar Bytes en palabras da origen a dos organizaciones distintas Big Endian (MIPS, Sparc, PowerPC, ...) Little Endian (Intel Familly, AMD, ...) Slide 20 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Big Endian y Little Endian 32 Bits Byte 3 Byte 2 Byte 1 Byte 0 Most Significant Byte Least Significant Byte Memoria Big Endian Memoria Little Endian 0 3 2 1 0 Bytes 0 0 1 2 3 Bytes 4 7 6 5 4 Bytes 4 4 5 6 7 Bytes Direcciónes de palabras Slide 21 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo - Arreglo con variable índice g=h+A[i] ● Asumir que A tiene 100 elementos. La base está en el registro $s3 y además el compilador asocia las variables: g ← $s1 h ← $s2 i ● ← $s4 Se pide el código assembly correspondiente a la sentencia C anterior Slide 22 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo - Solución g=h+A[i] ● ● Antes de cargar A[i] en un registro temporal – Se necesita su dirección. – Antes de sumar i a la base del arreglo para generar su dirección, es necesario multiplicar el índice i por 4, debido a la forma de direccionar bytes. La multiplicación por dos se puede generar: i+i=2i, 2i+2i=4i, etc.. Slide 23 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo - Solución add $t1,$s4,$s4 #$t1 ← 2*i add $t1,$t1,$t1 #$t1 ← 4*i Para obtener la dirección de A[i], necesitamos sumar $t1 con la base de A que está en $s3 add $t1,$t1,$s3 # $t1 ← dirección A[i] con esta dirección se puede cargar A[i] en un registro temporal lw $t0, 0($t1) # $t0 ← A[i] Finalmente el resultado queda en g: add $s1,$s2,$t0 # g ← h+ A[i] Slide 24 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Assembly a Máquina ● La instrucción que se representa en assembly por add $t0,$s1,$s2 en una instrucción de máquina (notación decimal) queda: Formato tipo R 6b 5b 5b 5b 5b 6b OP rs rt rd shamt funct 0 17 18 8 0 add $s1 $s2 $t0 32 add Slide 25 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Campos del Formato ● op: código de operación ● rs: Primer operando fuente ● rt: Segundo operando fuente ● rd: Registro destino ● ● shamt: Shift amount (se usa en instrucciones de desplazamiento) funct: selecciona una variación específica del código de operación (Código de operación expandido) Slide 26 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Formato Tipo I (Inmediato) ● Consideremos la instrucción assembly: lw $t0, 32($s3) # $t0 ← A[8] Formato tipo I 6b 5b 5b 16b OP rs rt dirección 35 17 18 32 lw $s3 $t0 Slide 27 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Formato Tipo I (Inmediato) ● Consideremos la instrucción assembly: sw $t0, 32($s3) # A[8] ← $t0 Formato tipo I 6b 5b 5b 16b OP rs rt dirección 43 17 18 32 sw $s3 $t0 Slide 28 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Resumen de Formatos ● Es un buen principio de diseño tomar compromisos: – Bits R I regularidad de formatos y tamaño del código de operación (número de instrucciones) 6 op op 5 rs rs 5 rt rt 5 rd 5 6 shamt funct Dirección Slide 29 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Pseudo Instrucciones ● ● Muchas instrucciones Assembly no existen en el Lenguaje de Máquina, pero pueden ser generadas con otras instrucciones. Un ejemplo es la instrucción move que permite copiar un registro en otro. Esta instrucción no existe en la máquina MIPS Ejemplo move $s1,$s2 #$s1 ← $s2 El Assembler MIPS genera: add $s1,$0,$s2 #$s1 ← $s2+ 0 Slide 30 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Instrucciones para decisiones ● ● La máquina MIPS presenta dos instrucciones para la toma de decisiones: Beq (Branch Equal) beq reg1, reg2, L1 – ● If (reg1 == reg2) goto L1 Bne (Branch Not Equal) bne reg1, reg2, L1 – If (reg1 != reg2) goto L1 Slide 31 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo 1 ● Generar el lenguaje de máquina para el codigo C: if(i==j) goto L1; f=g+h; L1: f=f-i; ● Asumir que las 5 variables: f,g,h,i,j; corresponden a los 5 registros: $s0,....,$s5 Slide 32 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución beq $s3,$s4,L1 add $s0,$s1,$s2 L1: sub $s0,$s0,$s3 # if(i==j) goto L1 # f=g+h # f=f-i L1 representa la dirección de la instrucción de Slide 33 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo 2 ● Usando las mismas variables y registros del ejemplo anterior, generar código de máquina para if(i==j) f=g+h; else f=g-h; Slide 34 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Este ejercicio introduce otro tipo de salto llamado salto incondicional. – ● La instrucción MIPS se denomina jump y se abrevia j J dirección bne $s3,$s4,Else #if(i!=j)goto Else add $s0,$s1,$s2 #f=g+h j Exit #goto Exit Else: sub $s0, $s1, $s2 #f=g-h Exit: Slide 35 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Saltos Incondicionales ● j Exit #goto Exit ● jr $t1 #goto $t1 J es del tipo J 6b 26b dirección OP Jr es del tipo R 6b 5b 5b 5b 5b 6b OP rs rt rd shamt funct 0 rs 0 0 0 8 Slide 36 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Compilación de Loops ● Compilar el código C: while (A[i]==k) i=i+j; ● ● ● Asumiremos que i,j k corresponden a los registros $s3, $s4, y $s5. Además la base del arreglo A está guardada en $s6. El primer paso es cargar A[i] en un registro temporal: Slide 37 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Compilación de Loops Loop: add $t1,$s3,$s3 add $t1,$t1,$t1 add $t1,$t1,$s6 #$t1=2*i #$t1=4*i #$t1 es la dirección de A[i] lw $t0,0($t1) #$t0=A[i] bne $t0,$s5,Exit # ir a Exit si A[i]!= k add $s3,$s3,$s4 #i=i+j j Loop Exit: Slide 38 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Comparaciones ● ● La máquina MIPS tiene dos instrucciones de comparación: slt $s1,$s2,$s3 #set on less than #if $s2<$s3 $s1←1 else $s1←0 Slide 39 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Comparaciones ● Saltar Menor Que: se puede construir: slt $s1,$s2,$s3 bne $s1,$0, Menos #va a Menos si #$s1←0, o sea si $s2 < $s3 ● Existe la pseudo instrucción blt (branch less than), pero el compilador genera las dos instrucciones anteriores si encuentra blt Slide 40 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Ejemplo 3 – El Switch ● Compilar el código C: switch(k) case 0: case 1: case 2: case 3: } ● { f=i+j; f=g+h; f=g-h; f=i-h; break; break; break; break; //k=0 //k=1 //k=2 //k=3 asumiremos que las 6 variables desde f a k, corresponden a los registros $s0 a $s5. El registro $t2 contiene el valor 4 Slide 41 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Switch – Valores de Registros f ↔ $s0 g ↔ $s1 h ↔ $s2 i ↔ $s3 j ↔ $s4 Slide 42 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática k ↔ Solución ● ● slt bne slt beq Usaremos la variable k para indexar una tabla de salto. El salto se hace vía el valor cargado. Lo primero es verificar rangos para k $t3,$s5,$0 $t3,$0,Exit $t3,$s5,$t2 $t3,$0,Exit # # # # ¿k <0? si k<0, goto Exit ¿k<4? si k >=4 goto Exit Slide 43 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Hay que multiplicar por 4 el valor de k para convertirlo en dirección de byte add $t1,$s5,$s5 add $t1,$t1,$t1 ● # $t1=2*k # $t1=4*k Las direcciones de los códigos correspondientes a los distintos valores de k, se mantienen en una tabla de salto Slide 44 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Asumiremos una secuencia de 4 palabras de memoria, comenzando de la dirección almacenada en $t4. Obtenemos así la dirección de L0, L1,L2 y L3 Tabla de Saltos L0 L1 L2 L3 Slide 45 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Obtención de la dirección de L0, L1,L2 y L3 add $t1,$t1,$t4 #$t1=dirección de Tabla Salto [k] lw $t0,0($t1) #$t0=Tabla Salto[k] Slide 46 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Los primeros tres casos de switch son los parecidos: jr $t0 #salto basado en registro $t0 L0: add $s0,$s3,$s4 j Exit L1: add $s0,$s1,$s2 j Exit L2: sub $s0,$s1,$s2 j Exit Slide 47 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Solución ● Finalmente: L3: sub $s0,$s3,$s4 Exit: Slide 48 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Procedimientos ● ● Los procedimientos o subrutinas son las herramientas más poderosas para estructurar programas. En la ejecución de un procedimiento un programa sigue los siguientes pasos: – Poner parámetros en un lugar accesible – Transferir el control al procedimiento – Realizar la tarea – Poner el resultado en lugar accesible – Volver el control al punto original Slide 49 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Procedimientos ● ● ● ● ● El software MIPS asigna los siguientes registros a Procedimientos: $a0-$a3: Argumentos para el paso de parámetros $v0-$v1: Registros para el retorno de valores $ra: Dirección de retorno para volver al punto original La máquina MIPS incluye la instrucción jal (Jump And Link) jal DirecciónProcedimiento Slide 50 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Jal – Jump And Link ● La instrucción jal DirecciónProcedimiento ● ● ● Tiene como efecto saltar a la dirección indicada, pero simultáneamente salva la dirección de retorno en $ra La dirección almacenada en $ra se denomina dirección de retorno. Esto es necesario ya que el mismo procedimiento puede ser invocado en diferentes partes del programa Slide 51 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática El Program Counter - PC ● ● ● ● Es necesario disponer de un registro que permita almacenar la dirección de la instrucción que está siendo ejecutada. Por razones históricas este registro se denomina PC: Program Counter. Debería llamarse IAR (Instruction Address Registre). La instrucción jal salva PC+4 en el registro $ra para establecer la dirección de retorno Slide 52 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática El Program Counter - PC Addr 0 PC PC+4 Memoria Instr Instrucción en ejecución Slide 53 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Retorno de procedimiento ● La instrucción que permite volver al punto inicial es: jr $ra Procedimiento Prog. Principal Dir1 PC instruc1 jal Dir1 PC+4 jr $ra Slide 54 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Procedimientos Anidados ● Lo normal en el desarrollo de un programa es que un procedimiento pueda llamar a otro, y que también se pueda llamar a si mismo en forma directa o indirecta (Recursividad) A ... Jal B B instb ..... jal C; ....... jr $ra C inst1 ....... jr $ra Slide 55 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática El Stack ● Es necesario el uso de un stack para permitir flexiblemente usar procedimientos anidados y recursividad Addr 0 Registro sp (Stack Pointer) Addr n Slide 56 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática El Stack – Agregar Datos (PUSH) Addr 0 Addr 0 sp sp $s0 sp = sp - 4 Addr n Add Inmediate Addr n addi $sp, $sp,-4 sw $s0, 0($sp) Slide 57 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Código usando Stack B A ....... jal B; ...... ...... addi $sp,$sp,-4 sw $ra,0($sp) jal C; lw $ra,0($sp) addi $sp,$sp,4 ....... jr $ra C ....... ....... jr $ra Slide 58 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Direccionamiento ● ¿Dónde ir a buscar un operando? ¿A qué dirección transferir el control del programa? – ● La Máquina MIPS presenta todos los modos de direccionamiento de las máquinas reales Los mecanismos de direccionamiento que estudiaremos son: – Tipo Registro – Operandos Inmediatos – Direccionamientos Absolutos – Direccionamientos relativos al PC – Direccionamiento Registro Base Slide 59 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Tipo Registro ● ● Lo más fácil es que el operando se encuentre en un registro. Este es el caso de las instrucciones tipo R. Ejemplo: add,$s1,$s2,$s3 Formato tipo R 6b 5b 5b 5b 5b 6b OP rs rt rd shamt funct 0 18 19 17 0 add $s1 $s2 $s0 32 add Slide 60 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Operandos Inmediatos ● ● ● Estadísticas de programas muestran que el 50% de los operandos son constantes, y estas constantes son números relativamente pequeños. Una forma es almacenar las constantes en la memoria principal y recuperar mediante una instrucción lw Ejemplo en C: a=a+5; Slide 61 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Operandos Inmediatos ● ● Supongamos que el número 5 lo guardamos en la dirección DIREC, y que la variable a la almacenamos en el registro $s1 Entonces a=a+5 se genera: lw $t1,DIREC($0) add $s1,$s1,$t1 ● ¿Existe una mejor solución? Slide 62 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Instrucciones Inmediatas: addi ● Una alternativa al código anterior es: addi $s1,$s1,5 Formato tipo I 6b 5b 5b 16b OP rs rt Operando Inmediato 8 rs rt valor addi Pb: limitación a 16bits para el operando inmediato Slide 63 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Instrucciones Inmediatas: slti,lui ● Otras instrucciones con operandos inmediatos son: slti $t1,$s1,5 #Set on Less Than Inmediate) if($s1<5)$t1=1 ● Y lui $s1,255 #Load Upper Inmediate Slide 64 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática lui ● lui $s1,255 #Load Upper Inmediate 6b 5b 5b 16b OP rs rt Operando Inmediato $S0 255 $s0 0000000011111111 0000000000000000 16 bits upper más significativos 16 bits lower menos significativos Slide 65 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Direccionamiento Absoluto ● j 1000 # goto 1000 Formato tipo J 6b 26b 2 1000 El espacio de direcciones alcanzable es de 64MB El código que se genera no es relocalizable Slide 66 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Direccionamiento Relativo al PC bne $s1,$s2,Exit # goto Exit si $s1 !=$s2 Formato tipo I 6b 5 5b 5b rs($s1) rt($s2) 16b Exit El espacio de direcciones alcanzable es de 216 Bytes Para aumentar este espacio, se considera que el cam de 16bits son direcciones de palabras de 32bits Slide 67 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Direccionamiento Relativo al PC Memoria PC Limitado por 16 Bits Slide 68 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Direccionamiento Relativo al PC Ejemplo: a: bne $s2,$s3,FIN add $t4,$s4,$s6 j a FIN: 80000 5 8 21 2 80004 0 19 20 19 0 80008 2 32 80000 80012 $s2 ← 8, $s3 ← 21 $t4 ← 19, $s6 ← 20 a: Dirección 80000 Slide 69 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Resumen Direccionamientos Tipo Registro OP rs rt rd shamt funct Memoria Tipo Base OP rs registro rt dirección + Slide 70 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Resumen Direccionamientos Inmediat o OP Relativo al PC OP rs rs PC rt rt dirección Memoria + Slide 71 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Resumen Direccionamientos Absoluto OP Memoria Dirección Slide 72 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Assemblers y Linkers ● ● ● El lenguaje assembly es la representación simbólica de la codificación binaria de un programa. El lenguaje assembly tiene directivas que no generan código: .data, .global Los roles que tiene el lenguaje assembly son: – Lenguaje intermedio para un compilador – Embedded computers Slide 73 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Compilacion y Link Programa Compilador Assembler Lenguaje Assembly Computador Ejecutable Linker Slide 74 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática ¿Conviene programar en Assembly? ● ● ● Programar en Assembly tiene varias desventajas: – Específico a una máquina (baja portabilidad) – La relación entre líneas de código de un lenguaje de alto nivel y Assembly se denomina factor de expansión Estudios demuestran que un escribe el mismo número de código por día programando programando en un lenguaje programador líneas de en Assembly o de alto nivel. Si x es el factor de expansión, la productividad de un Lenguaje de Alto Nivel respecto a Assembly es X Slide 75 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática Pero ... ● A veces es necesario programar en Assembly – Algunas partes de los Sistemas Operativos ● – Cuando se busca la máxima velocidad posible ● – – Clock Interruption Routine Códigos críticos Para unos embedded softwares ● Aviones ● Autos Para Devices Drivers Slide 76 Pr. Dr. Xavier Bonnaire - Universidad Tecnica Federico Santa María María – Departamento de Informática