La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CLASE 10.

Presentaciones similares


Presentación del tema: "CLASE 10."— Transcripción de la presentación:

1 CLASE 10

2 QUE ES UN COMPUTADOR Niveles de abstracción
Todos los computadores consisten de 5 componentes: Procesador: (1) Datapath y (2) el control. (3) Memoria. (4) Dispositivos de entrada y (5) dispositivos de salida

3 MODELOS VON-NEWMAN Y HARDVARE

4 NIVELES DE ABSTRACCION
PARTE 2 DEL CURSO Aplicación Lenguaje de Alto Nivel Sistema Operativo / Compilador Arquitectura del conjunto de Instrucciones Organización HW sistema Circuito Digital Nivel Físico PARTE 1 DEL CURSO

5 NIVELES DE CODIFICACION DE UN PROGRAMA

6 ¿QUE ES ARQUITECTURA DE COMPUTADORES?
Arquitectura de la maquina Organización de la maquina

7 TIPO DE ALMACENAMIENTO DE LA CPU
Las ISAs se diferencian por el tipo de almacenamiento interno que usa el procesador, definiendo a la vez su tipo de operandos. CLASIFICACION Pila Acumulador Registros de propósito general Registro a memoria. Registro a registro.

8 ARQUITECTURAS DE PILA (STACK ARCHITECTURES)
Los operandos están implícitos en el tope de la pila El registro TOS (Top of stack) apunta al primer operando de entrada. El segundo operando de entrada es el que está una posición más abajo. El primer operando se descarta de la pila, el resultado ocupa el lugar del segundo y el registro TOS se actualiza para que apunte al resultado. Se emplean instrucciones push y pop: Push: mete datos a la pila. Pop: Saca datos de la pila. Procesador Stack TOS ALU Memoria Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de pila? Declaración en bajo nivel push A push B add pop C Declaración en alto nivel C = A + B;

9 ARQUITECTURAS DE ACUMULADOR (ACCUMULATOR ARCHITECTURES)
Un operando implícito en el acumulador Procesador El acumulador es el primer operando de entrada (implícito). El segundo operando es una posición de memoria. El resultado se escribe en el acumulador. Acumulador ALU Memoria Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de acumulador? Declaración en bajo nivel Declaración en alto nivel load A add B store C C = A + B;

10 ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) – ARQUITECTURA REGISTRO A MEMORIA Procesador Operandos explícitos (en registros o posiciones de memoria) Un operando de entrada está en un registro, el segundo operando están en memoria y el resultado se escribe en un registro. Registros ALU Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de registro a memoria? Memoria Declaración en alto nivel Declaración en bajo nivel C = A + B; load R1,A add R3,R1,B store R3

11 ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) – ARQUITECTURA REGISTRO A REGISTRO Operandos explícitos (en registros o posiciones de memoria) Procesador Todos los operandos están en registros (de entrada y resultado). Para cargar un registro con un valor desde memoria se emplean instrucciones load. Para transferir el resultado contenido en un registro a memoria se usan instrucciones store. Registros ALU Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de registros de propósito general? Memoria Declaración en alto nivel Declaración en bajo nivel C = A + B; load R1,A load R2,B Add R3,R1,R2 store R3,C

12 CLASES DE ISA (RESUMEN)
C = A + B; push A push B add pop C load A add B store C load R1,A load R2,B Add R3,R1,R2 store R3,C load R1,A add R3,R1,B store R3 Los operandos explícitos pueden ser accedidos directamente desde memoria o puede ser necesario cargarlos primero en un almacenamiento temporal, dependiendo de la arquitectura y de la instrucción específica.

13 LENGUAJE ENSAMBLADOR add a,b,c a = b + c add a,b,c
Los lenguajes de los procesadores corresponden a un nivel de abstracción bajo “Lenguajes de Bajo Nivel (LBN)” Ensamblador: Lenguaje de bajo nivel utilizado para escribir programas. Los LBN son definidos por una serie de Mnemónicos, símbolos alfabéticos que representan un código binario. Constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador. add a,b,c Mnemonico de la operacion Operandos a = b + c add a,b,c

14 COMPONENTES DE UN ISA Organización de la estructuras de almacenamiento programables Registros Modos de direccionamiento y de acceso a datos e instrucciones. Tipos de datos y estructuras de los datos Codificación y representación Formatos de instrucciones. Conjunto de instrucciones (o código de operación) ULA, transferencia de control, tratamiento de excepciones.

15 RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000
Conjuntos de registros: 32 registros de 32 bits. El registro cero ($R0) siempre es 0. Hi/Lo para multiplicación y división Instrucciones: Todas las instrucciones son de 32 bits Clases: Load/Store. Computacional. Salto y ramificación. Punto flotante (coprocesador). Manejo de memoria. Especial. Formatos: 3 formatos de instrucciones todos de 32 bits.

16 RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000
Modos de direccionamiento y de acceso a datos e instrucciones Registro (directo) Inmediato Indexado Relativo al PC

17 RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000
Conjunto de instrucciones Aritmetico Logicas Add, AddU, Sub, SubU, And, Or, Xor, Nor, SLT, SLTU AddI, AddIU, SLTI, SLTIU, AndI, OrI, XorI, LUI SLL, SRL, SRA, SLLV, SRLV, SRAV Acceso a memoria LB, LBU, LH, LHU, LW, LWL,LWR SB, SH, SW, SWL, SWR Multiplicación/division MULT, DIV, DIVU, MFHI, MFLO, MTHI, MTLO Formatos: 3 formatos de instrucciones todos de 32 bits.

18 Y ESTO QUE TIENE QUE VER CON EL CURSO
Objeto de estudio del curso: MIPS ISA 32 bits Arquitectura registro a registro (load/store). Quienes usan el MIPS? NEC, Nintendo, Sony, Silicon Graphics, Texas Instruments, Cisco, … ¿Qué aspectos se tienen que tener en cuenta a la hora de diseñar un ISA?

19 PRINCIPIOS DE DISEÑO DE UN ISA
Principio de diseño #1: La simplicidad favorece la regularidad Instrucciones de tres operandos. El HW para un número variable de operandos es más complejo que para un número de operandos fijo. Principio de diseño #2: Más pequeño, más rápido 32 registros de propósito general de 32 bits cada uno (MIPS word: 32 bits) Los operandos de una instrucción se eligen entre los 32 registros de propósito general. Un número de registros elevado incrementa el ciclo de reloj (existe un compromiso entre el numero de registros y el ciclo de reloj). El número de registros influye en el número de bits necesarios para su codificación en el formato de instrucción.

20 OPERACIONES DEL HARDWARE DEL COMPUTADOR
Todo computador debe ser capaz de realizar operaciones aritméticas a = b + c; add a,b,c Lenguaje C Formato MIPS ¿Cómo seria la codificación en lenguaje MIPS de la siguiente instrucción? Restricción Las instrucciones aritméticas en el MIPS tienen formato fijo realizando solamente una operación y teniendo 3 variables Lenguaje C a = b + c + d + e; comentarios Formato MIPS add a,b,c # a = b + c add a,a,d # a = b + c + d add a,a,e # a = b + c + d + e instrucciones

21 OPERACIONES DEL HARDWARE DEL COMPUTADOR
Ejemplo ¿Cuál será el código generado por un compilador para la siguiente porción de programa? a = b + c; d = a - e; add a,b,c # a = b + c sub d,a,e # a = a - e Ejemplo ¿Cuál será el código generado por un compilador para la siguiente porción de programa? f = (g + h) – (i + j); Solamente una operación es hecha por instrucción. Necesidad de variables temporales (t0,t1). add t0,g,h # t0 = g + h add t1,i+j # t1 = i – j Sub f,t0,t1 # f = t0 – t1

22 OPERANDOS Y REGISTRADORES
Lenguajes de alto nivel Lenguaje ensamblador El numero de operandos (variables) puede variar. El numero de operandos es fijo. En C cada variable tiene una localización en memoria, pudiéndose reservar tantas posiciones de memoria como variables se necesiten. No se permite el uso de variables. En el caso del ensamblador los bloques básicos de memoria son los registros y su numero es limitado y dependiente del procesador (32 registros para el caso del MIPS) int a,b,c;

23 REGISTROS Registros MIPS
El ISA del MIPS tiene 32 registros (el x86 tiene 8 registros). Cada registro tiene 32 bits de tamaño (en las arquitecturas mas modernas de 64 bits el tamaño de estos es de 64 bits). Word  Entidad de 4 bytes (32 bits). En MIPS existe una convención de nombres para referirnos a los registros, la convención de $xy, donde: $s0 - $s7: para variables en C y java. $t0 - $t9: para variables temporales.

24 OPERACIONES DEL HARDWARE DEL COMPUTADOR
Ejemplo Según lo anterior, ¿Cuál será el código generado por un compilador para la siguiente porción de programa? f =(g + h)-(i + j); Solución: Supongamos que las variables f, g, h, i y j, son asignadas a los registros $s0, $s1, $s2, $s3 y $s4 respectivamente. add $t0,$s1,$s2 # temporal t0 = g + h add $t1,$s3,$s4 # temporal t1 = i – j Sub $s0,$t0,$t1 # f = (g + h) – (i + j)

25 OPERANDOS DE MEMORIA Además de variables simples, los lenguajes de alto nivel poseen estructuras de datos complejas (estructuras, arreglos). Por su tamaño, estas estructuras no se pueden almacenar en los GPRs, sino en memoria. Las operaciones aritméticas MIPS son posibles sólo entre registros. Instrucciones de transferencia de datos: Transfieren datos entre la memoria y los registros Para acceder a una palabra en memoria, la instrucción debe suministrar su dirección en memoria. Dirección Contenido 3 64 2 72 1 Memoria[2] = 72 ATENCIÓN: esta idea será refinada más adelante 148 234 Dirección Dato Memoria (Vista como un vector)

26 DISPOSICION DE MEMORIA
La mayor parte de las arquitecturas pueden direccionar bytes individuales. ¿Cómo se disponen en memoria los bytes de un valor escalar de múltiples bytes? Ejemplo: Dato (32 bits): 0x Most Significant Byte (MSB): 0x12. Least Significant Byte (LSB): 0x78 Dirección: 0x184 Memoria direccionable por bytes IBM360/370, Motorola 68K, SPARC, MIPS, ARM9 Intel 80x86, Pentium, VAX, Alpha, MIPS, ARM9

27 OPERANDOS DE MEMORIA RECAPITULANDO
Se tiene un vector A = [0,0,0,0,15], con 5 posiciones, comenzando en la dirección de memoria Esta dirección es llamada de dirección base del vector. Así, 102 es la dirección de A[0],103 y de A[1], ...,106 y de A[4]. Datos Direcciones Dirección base de A

28 OPERANDOS DE MEMORIA Los valores deben ser traídos (fetched) de memoria antes de que las instrucciones (add y sub) puedan operar sobre ellos. Load word lw $t0, memory-address lw $t0, offset(registro_base) Register Memory Store word sw $t0, memory-address sw $t0, offset(registro_base) Register Memory Dirección de la memoria accedida es dada por la suma del offset (valor constante) con el contenido del registrador base.

29 OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW)
Compilación usando instrucciones de transferencia de datos Suposiciones: A es un arreglo de 100 posiciones El compilador asocia h con el registro $s2 La dirección base de A está en $s3 Cómo se compilaría: g = h+A[8]; Solución: Un operando está en memoria. Es necesario transferirlo a un registro mediante la instrucción load word, lw lw $t0, 8($s3) # registro $t0 almacena A[8] # el offset será refinado en breve Offset Base register Ambos operandos de la suma están en registros add $s1, $s2, $t0 # g = h+A[8]

30 COMENTARIOS SOBRE LA TRADUCCION ANTERIOR
lw $t0, 8($s3) add $s1,$s2,$t0 g = h+A[8]; La traducción anterior no toma en cuenta el hecho de como el MIPS direcciona las palabras de la memoria. La dirección de una palabra corresponde a la dirección de uno de sus 4 bytes (MIPS word: 32 bits). Las direcciones de palabras contiguas difieren en 4 Las palabras se ubican en direcciones múltiplo de 4 (restricción de alineamiento que garantiza transferencias de datos más rápidas)

31 RESTRICCIONES DE ALINEAMIENTO
El acceso a objetos de tamaño mayor a un byte debe ser alineado El acceso a un objeto con tamaño de s bytes en la dirección de byte A está alineado si A mod s = 0 ¿Por qué se diseñan procesadores con restricciones de alineamiento? Soportar accesos desalineados eleva la complejidad del HW. El acceso a una dirección desalineada toma varias referencias alineadas a memoria. Los programas con accesos alineados tienen mejor rendimiento.

32 OPERANDOS DE MEMORIA (INSTRUCCIÓN STORE WORD, SW)
Compilación usando instrucciones de transferencia de datos Suposiciones: A es un arreglo de 100 palabras (word). El compilador asocia g y h con los registros $s1 y $s2 . La dirección base de A está en $s3 Cómo se compilaría: g = h+A[8]; Solución: Un operando está en memoria. Es necesario transferirlo a un registro mediante la instrucción load word, lw lw $t0, 32($s3) # registro $t0 almacena A[8] # el offset será refinado en breve Offset Base register Ambos operandos de la suma están en registros add $s1, $s2, $t0 # g = h+A[8]

33 OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW)
Compilación de una sentencia en C cuando un operando está en memoria Suposiciones: A es un arreglo de 100 palabras. El compilador asocia h con el registro $s2 La dirección base de A está en $s3 . Cómo se compilaría: A[12] = h+A[8]; Solución: Una sentencia en C con dos operandos en memoria lw $t0, 32($s3) # registro $t0 almacena A[8] # Offset correcto add $t0, $s2, $t0 # registro $t0 almacena h+A[8] El resultado se lleva a memoria con la instrucción store word, sw sw $t0, 48($s3) # almacena h+A[8] en A[12]

34 DIRECCION ABSOLUTA DE LA POSICION 3 DEL VECTOR (i = 3)
Variable i (i=3) ($s4) A Desplazamiento (offset): 4*i = 12 Dirección A[3]: ($s2)+12 Registrador base $s2

35 EJEMPLO: MEMORIA Y VECTORES
Suposiciones: A es un arreglo de 100 palabras. El compilador asocia g, h e i con los registros $s1, $s2 y $s4 . La dirección base de A está en $s3 . Cómo se compilaría: g = h+A[i]; Solución: Requerimos primero calcular la dirección de A[i]. Antes de sumar i a la dirección base de A, debemos multiplicar i por 4. Vamos hacer esto por ahora de la siguiente forma: add $t1, $s4, $s4 # $t1=i+i=2*i add $t1, $t1, $t1 # $t1=2*i+2*i=4*i Para coger A[i], sumamos $t1 con la dirección base de A, dada en $s3 (Recordar diapositiva anterior): add $t1, $t1, $s3 # $t1 = Dirección A[i]

36 EJEMPLO: MEMORIA Y VECTORES
Solución continuación: Ahora podemos cargar A[i] para un registrador temporal, y realizar la suma, que será almacenada en g: lw $t0, 0($t1) # temporal $t0=A[i] add $s1, $s2, $t0 # g = h + A[i]

37 OPERANDOS INMEDIATOS Más del 50% de las instrucciones aritméticas del MIPS tienen como uno de sus operandos una constante. Una instrucción inmediata usa un numero constante como una de sus entradas (en vez de un registro) Instrucción suma inmediata addi $s3, $s3, 4 # $s3 = $s3 + 4 Principio de diseño #3: Hacer el caso mas común mas rápido Como los operandos constantes son muy comunes, el permitir su uso en las instrucciones las hace más rápidas que si las constantes fueran cargadas desde memoria

38 EXTENCION DE SIGNO Busca que cuando se represente un número usando un número mayor de bits se conserve su valor numérico En la arquitectura MIPS varias instrucciones involucran extensión de signo: addi: extiende el valor inmediato lb, lh: extienden el dato (byte, media palabra) cargado beq, bne: extienden el desplazamiento La extensión de signo consiste en replicar el bit de signo hacia la izquierda Los valores sin signo se extienden con ceros Ejemplo: extensión de 8 a 16 bits +2: => –2: =>

39 ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

40 CONCEPTO DE PROGRAMA ALMACENADO
Termino usado para referirse al modelo de von Neumann Las instrucciones se representan como números, y como tales son indistinguibles de los datos Los programas se almacenan en una memoria modificable (que puede ser escrita y leída) justo como los datos. Ciclo de búsqueda y ejecución: Las instrucciones son buscadas y colocadas en un registro especial. Los bits en el registro controlan las acciones subsecuentes. Se busca la próxima instrucción y se continua.

41 REPRESENTACION DE LAS INSTRUCCIONES
Tanto las instrucciones como los datos se representan como cadenas de dígitos binarios. Cada instrucción está conformada por campos numéricos puestos uno tras otro. Como los registros son los operandos de casi todas las instrucciones, existe una convención para asociar sus nombres con números.

42 REPRESENTACION DE LAS INSTRUCCIONES
Representación simbólica de una instrucción (ensamblador) add $t0, $s1, $s2 Representación decimal campo 17 18 8 32 $s1 $s2 $t0 Representación binaria (lenguaje de maquina) 000000 10001 10010 01000 00000 100000 6 bits 5 bits Formato de instrucción Las instrucciones MIPS son de 32 bits, al igual que los datos (Principio de diseño #1: la simplicidad favorece la regularidad)

43 REPRESENTACION DE LAS INSTRUCCIONES
campo registro 6 bits 5 bits ¿Qué pasa si una instrucción requiere campos más grandes que estos? Instrucción load: dos registros y una constante (offset) Campo de 5 bits  Offset  [0..31] Demasiado pequeño para ser útil!!! Tenemos un conflicto entre el deseo de mantener todas las instrucciones de la misma longitud y el deseo de tener un solo formato de instrucción Principio de diseño #4: Un buen diseño requiere buenos compromisos Conservar las instrucciones MIPS de 32 bits Crear diferentes formatos de instrucción para diferentes categorías de instrucciones

44 FORMATOS DE INSTRUCCIÓN MIPS
Formato R (register) opcode rs rt rd shamt funct 6 bits 5 bits Operaciones ALU registro-registro: rd  rs funct rt opcode: operación básica de la instrucción rs: primer registro de origen rt: segundo registro de origen rd: registro de destino (resultado de la operación) shamt: cantidad de desplazamiento funct: función (define la variante especifica de la operación descrita en el opcode)

45 FORMATOS DE INSTRUCCIÓN MIPS
Formato I (immediate) opcode rs rt constant or address 6 bits 5 bits 16 bits Operaciones con valores inmediatos: rt  rs op {constant or address} Instrucciones de transferencia de datos (load/store) opcode: operación básica de la instrucción rs: primer registro de origen rt: registro de destino (resultado de la operación) constant or address: constante o dirección de 16 bits (este valor puede ser tratado como un valor con o sin signo, de acuerdo con la instrucción)

46 FORMATOS DE INSTRUCCIÓN MIPS
Demasiados formatos de instrucción hacen más complejo el HW La complejidad se puede reducir si los formatos son similares Estos dos formatos se diferencian por el valor del opcode De esta forma el HW sabe como tratar la parte restante de la instrucción Formato R opcode rs rt rd shamt funct 6 bits 5 bits Formato I opcode rs rt constant or address 6 bits 5 bits 16 bits

47 FORMATOS DE INSTRUCCIÓN MIPS
Ejercicio: Si $t1 apunta a la base del vector A y $s2 corresponde a la variable h, compile la siguiente declaración en lenguaje C en instrucciones ensamblador del MIPS. Luego escriba las instrucciones de código de máquina correspondientes a las instrucciones ensamblador A[300] = h+A[300];

48 FORMATOS DE INSTRUCCIÓN MIPS
Solucion: A[300] = h+A[300]; Instrucciones ensamblador MIPS: lw $t0, 1200($t1) # registro $t0 almacena A[300] add $t0, $s2, $t0 # registro $t0 almacena h+A[300] sw $t0, 1200($t1) # almacena h+A[300] en A[300] Instrucciones de código de máquina: Escritas en decimal: Escritas en binario:

49 ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

50 OPERACIONES LOGICAS Proporcionan la capacidad de operar sobre campos de bits o bits individuales dentro de una palabra. Operación lógica Operador C Operador Java Ejemplo MIPS Significado and & and $s1,$s2,$s3 $s1 = $s2 & $s3 or | or $s1,$s2,$s3 $s1 = $s2 | $s3 nor nor $s1,$s2,$s3 $s1 = ~($s2 | $s3) and immediate andi $s1,$s2,100 $s1 = $s2 & 100 or immediate ori $s1,$s2,100 $s1 = $s2 | 100 shift left logical << sll $s1,$s2,10 $s1 = $s2 << 10 shift right logical >> >>> srl $s1,$s2,10 $s1 = $s2 >> 10

51 sll $t2, $s0, 4 #reg $t2 = reg $s0 << 4 bits
OPERACIONES LOGICAS Las instrucciones de desplazamiento lógico (shift logical) mueven los bits de una palabra hacia la izquierda o la derecha, llenando los bits vacíos con ceros Ejemplo instrucción de desplazamiento lógico en ensamblador: sll $t2, $s0, 4 #reg $t2 = reg $s0 << 4 bits Versión en código de máquina de la instrucción previa: opcode rs rt rd shamt funct 16 10 4 Desplazar hacia la izquierda un número i de bits equivale a multiplicar por 2i

52 OPERACIONES LOGICAS La instrucción AND realiza una operación bit a bit que deja un 1 en el resultado sólo si ambos bits de los operandos son 1 Ejemplo (valores de los registros escritos en binario): Si $t2: y $t1: la instrucción and $t0, $t1, $t2 #reg $t0 = reg $t1 & reg $t2 produce $t0: Instrucción útil para enmascarar bits (forzar bits a cero de acuerdo con el patrón aplicado)

53 or $t0, $t1, $t2 #reg $t0 = reg $t1 | reg $t2
OPERACIONES LOGICAS La instrucción OR realiza una operación bit a bit que deja un 1 en el resultado si uno o ambos de los bits de los operandos es 1 Ejemplo (valores de los registros escritos en binario): Si $t2: y $t1: la instrucción or $t0, $t1, $t2 #reg $t0 = reg $t1 | reg $t2 produce $t0: Instrucción útil para forzar bits a 1 de acuerdo con el patrón aplicado

54 nor $t0, $t1, $t3 #reg $t0 = ~(reg $t1 | reg $t3)
OPERACIONES LOGICAS La operación lógica NOT es la negación (toma un operando y deja un 1 en el resultado si el bit del operando es cero, y viceversa) Para ser fiel al formato de dos operandos de entrada, MIPS no incluye la instrucción NOT, pero sí incluye la instrucción NOR (NOT OR) A NOR 0 = NOT (A or 0) = NOT A Ejemplo (valores de los registros escritos en binario): Si $t1: y $t3: la instrucción nor $t0, $t1, $t3 #reg $t0 = ~(reg $t1 | reg $t3) produce $t0:

55 ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

56 REFERENCIAS http://microe.udea.edu.co/~farivera/docencia.html
Computer organization and design. The hardware/software interface, 3rd ed., Chapter 2. D. Patterson and J. Hennessy. Morgan Kaufmann Publishers


Descargar ppt "CLASE 10."

Presentaciones similares


Anuncios Google