CLASE 10.

Slides:



Advertisements
Presentaciones similares
El modelo de Von Neumann
Advertisements

Diseño de la ruta de datos monociclo para la arquitectura MIPS
UNIVERSIDAD DEL VALLE DE MEXICO CAMPUS CHAPULTEPEC
ORGANIZACIÓN COMPUTACIONAL
Arquitectura de Computadores I
Arquitectura de Computadores I
I S A INSTRUCTION SET ARCHITECTURE
ARQUITECTURA DE COMPUTADORES - VON NEUMANN MODEL
Fermín Sánchez Carracedo Universitat Politècnica de Catalunya
CLASE 9.
Circuitos Digitales II Alineamiento en Memoria y Ejecución de un programa Semana No.8 Semestre Prof. Gustavo Patiño Prof. Eugenio.
Assembly y el Simulador SPIM
66.20 Organización de Computadoras
CLASE 12.
Circuitos Digitales II
Circuitos Digitales II Elementos sobre la Arquitectura del Conjunto de Instrucciones Semana No.2 Semestre Prof. Gustavo Patiño
ARQUITECTURA INTEL FORMATOS DE INSTRUCCIÓN
ARQUITECTURA INTEL Modos de direccionamiento
Tema II Unidad de memoria. 2 Unidad de memoria 2.1 Definiciones y conceptos básicos Localización Capacidad Unidad de transferencia
El procesador: la ruta de datos y el control (II Parte)
Circuitos Digitales II
Circuitos Digitales II Elementos sobre la Arquitectura del Conjunto de Instrucciones Semana No.2 Semestre Prof. Gustavo Patiño
Datapath DLX.
3. INTRODUCCIÓN A LA PROGRAMACIÓN
Arquitectura de Conjunto de Instrucciones (ISA)
Composición Interna de un Procesador
Computadora Digital Arquitectura de John Von Neumann
CLASE 11.
Aritmética y Computadores. Refresco de aritmética binaria. Operaciones aritméticas y lógicas. Construcción de una ALU para MIPS. Multiplicación y División.
Microcomputadores Prof : Tatiana Marín R.. Sistema basado en microprocesador de 8 bits.
Arquitectura del Computador
ISA (Instruction Set Architecture)
ARQUITECTURA DE LOS MICROPROCESADORES DE 8 BITS
MIPS Intermedio.
Unidad 2: Organización del CPU
(CC) , José M. Foces-Morán.
Arquitecturas de Computadoras Curso Propedéutico
Instrucciones: FORMATO DE INSTRUCCIONES
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
Clase 10: Estructuras de datos y arreglos.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Overview Sistemas Computacionales
Asignación de Espacio No Contiguo
Tema 2: Lenguaje máquina
Arquitectura de Von Neumann
Datapath para las instrucciones de carga y almacenamiento (load/store)
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 11.
Organización del Computador
Organización del Computador I Verano Aritmética (3 de 3) Basado en el capítulo 4 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
CLASE 13.
El procesador Diseño del control.
CLASE 14.
ARQUITECTURA DE COMPUTADORES - I.S.A. -CODIFICACION ISA
Capítulo 4 CPU y la memoria.
SEMANA 01_2.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 10.
ARQUICTECTURA DE SERVIDORES
Modos de direccionamiento
Son los atributos de un sistema que son visibles para un programador, es decir aquellos atributos que impactan directamente en la ejecución lógica de un.
Unidad Central de Proceso
ARQUITECTURA DE COMPUTADORES
Universidad Metropolitana Introducción a la Computación Universidad Metropolitana Introducción a la Computación Septiembre, 2007 Arquitectura Von Newman.
MIPS Intermedio.
Arquitecturas de Computadoras Capitulo 2 Aritmética de enteros.
El microprocesador y su arquitectura
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de Computadores Clase 6 Ciclo y Conjunto de Instrucciones IIC 2342 Semestre Rubén Mitnik Pontificia Universidad Católica de Chile Escuela.
Arquitectura de Computadoras (Taller) Semestre II de 2008.
Organización de computadoras
Transcripción de la presentación:

CLASE 10

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

MODELOS VON-NEWMAN Y HARDVARE

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

NIVELES DE CODIFICACION DE UN PROGRAMA

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

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.

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;

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;

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

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

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.

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 00000010001100100100000000100000

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.

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.

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

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.

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?

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.

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

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

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;

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.

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)

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)

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): 0x12345678 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

OPERANDOS DE MEMORIA RECAPITULANDO Se tiene un vector A = [0,0,0,0,15], con 5 posiciones, comenzando en la dirección de memoria 102. 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

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.

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]

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)

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.

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]

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]

DIRECCION ABSOLUTA DE LA POSICION 3 DEL VECTOR (i = 3) Variable i (i=3) ($s4) 0 1 2 3 4 5 6 7 8 9 ... A Desplazamiento (offset): 4*i = 12 Dirección A[3]: ($s2)+12 Registrador base $s2

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]

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]

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

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: 0000 0010 => 0000 0000 0000 0010 –2: 1111 1110 => 1111 1111 1111 1110

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

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.

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.

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)

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

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)

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)

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

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];

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:

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

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

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

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: 0000 0000 0000 0000 0101 1101 0000 0000 y $t1: 0000 0000 0000 0000 1111 1100 0000 0000 la instrucción and $t0, $t1, $t2 #reg $t0 = reg $t1 & reg $t2 produce $t0: 0000 0000 0000 0000 0101 1100 0000 0000 Instrucción útil para enmascarar bits (forzar bits a cero de acuerdo con el patrón aplicado)

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: 0000 0000 0000 0000 0000 1101 0000 0000 y $t1: 0000 0000 0000 1111 1111 0000 0000 0000 la instrucción or $t0, $t1, $t2 #reg $t0 = reg $t1 | reg $t2 produce $t0: 0000 0000 0000 1111 1111 1101 0000 0000 Instrucción útil para forzar bits a 1 de acuerdo con el patrón aplicado

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: 0000 0000 0000 0000 1111 1100 0000 0000 y $t3: 0000 0000 0000 0000 0000 0000 0000 0000 la instrucción nor $t0, $t1, $t3 #reg $t0 = ~(reg $t1 | reg $t3) produce $t0: 1111 1111 1111 1111 0000 0011 1111 1111

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

REFERENCIAS http://microe.udea.edu.co/~farivera/docencia.html http://www.cise.ufl.edu/~mssz/CompOrg/CDA-lang.html http://fourier.eng.hmc.edu/e85/lectures/instruction/node7.html http://www.cs.uiowa.edu/~ghosh/6011.html http://logos.cs.uic.edu/366/notes/ http://inst.eecs.berkeley.edu/~cs61c/su10/ http://www.doc.ic.ac.uk/lab/secondyear/spim/ Computer organization and design. The hardware/software interface, 3rd ed., Chapter 2. D. Patterson and J. Hennessy. Morgan Kaufmann Publishers