CLASE 10

56
CLASE 10

description

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. - PowerPoint PPT Presentation

Transcript of CLASE 10

Page 1: CLASE 10

CLASE 10

Page 2: 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

Page 3: CLASE 10

MODELOS VON-NEWMAN Y HARDVARE

Page 4: CLASE 10

NIVELES DE ABSTRACCION

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

PARTE 2 DEL CURSO

Page 5: CLASE 10

NIVELES DE CODIFICACION DE UN PROGRAMA

Page 6: CLASE 10

¿QUE ES ARQUITECTURA DE COMPUTADORES?

Arquitectura de la maquina Organización de la maquina

Page 7: CLASE 10

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.

Page 8: CLASE 10

ARQUITECTURAS DE PILA (STACK ARCHITECTURES)Los operandos están implícitos en el tope de la pila

ALU

TOS

Mem

ori

a

Procesador

Stack• 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.

C = A + B;

push Apush Baddpop C

Declaración en alto nivel

Declaración en bajo nivel

Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de pila?

Page 9: CLASE 10

ARQUITECTURAS DE ACUMULADOR (ACCUMULATOR ARCHITECTURES)

Un operando implícito en el acumulador

• 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.

C = A + B;load Aadd Bstore C

Declaración en alto nivelDeclaración en bajo nivel

Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de acumulador?

ALU

Procesador

Mem

ori

a

Acumulador

Page 10: CLASE 10

ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) –

ARQUITECTURA REGISTRO A MEMORIA

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.

C = A + B; load R1,Aadd R3,R1,Bstore R3

Declaración en alto nivel Declaración en bajo nivel

Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de registro a memoria?

ALU

Procesador

Mem

ori

a

Regis

tros

Page 11: CLASE 10

ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) –

ARQUITECTURA REGISTRO A REGISTRO

Operandos explícitos (en registros o posiciones de memoria)• 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.

C = A + B; load R1,Aload R2,BAdd R3,R1,R2store R3,C

Declaración en alto nivel Declaración en bajo nivel

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?

ALU

Procesador

Mem

ori

a

Regis

tros

Page 12: CLASE 10

CLASES DE ISA (RESUMEN)C = A + B;

load R1,Aload R2,BAdd R3,R1,R2store R3,C

push Apush Baddpop C

load Aadd Bstore C

load R1,Aadd R3,R1,Bstore 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.

Page 13: CLASE 10

LENGUAJE ENSAMBLADOR• 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.

00000010001100100100000000100000

add a,b,c

a = b + c

add a,b,c

Mnemonico de la operacion Operandos

Page 14: CLASE 10

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.

Page 15: CLASE 10

RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000

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.

Conjuntos de registros:• 32 registros de 32 bits.• El registro cero ($R0) siempre es 0.• Hi/Lo para multiplicación y división

Page 16: CLASE 10

RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000

Modos de direccionamiento y de acceso a datos e instrucciones

Registro (directo)

Inmediato

Indexado

Relativo al PC

Page 17: CLASE 10

RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000

Conjunto de instruccionesAritmetico 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.

Page 18: CLASE 10

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?

Page 19: CLASE 10

PRINCIPIOS DE DISEÑO DE UN ISAPrincipio 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.

Page 20: CLASE 10

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?

a = b + c + d + e;

add a,b,c # a = b + cadd a,a,d # a = b + c + dadd a,a,e # a = b + c + d + e

Lenguaje C

Formato MIPS

comentarios

instrucciones

RestricciónLas instrucciones aritméticas en el MIPS tienen formato fijo realizando solamente una operación y teniendo 3 variables

Page 21: CLASE 10

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 + csub 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 + hadd t1,i+j # t1 = i – jSub f,t0,t1 # f = t0 – t1

Page 22: CLASE 10

OPERANDOS Y REGISTRADORESLenguajes 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;

Page 23: CLASE 10

REGISTROSRegistros 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.

Page 24: CLASE 10

OPERACIONES DEL HARDWARE DEL COMPUTADOR

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 + hadd $t1,$s3,$s4 # temporal t1 = i – jSub $s0,$t0,$t1 # f = (g + h) – (i + j)

EjemploSegún lo anterior, ¿Cuál será el código generado por un compilador para la siguiente porción de programa?

Page 25: CLASE 10

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.

234

Memoria(Vista como un vector)

Dirección Dato

1487264

0123

Memoria[2] = 72

ATENCIÓN: esta idea será refinada más adelante

DirecciónContenido

Page 26: CLASE 10

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

Page 27: CLASE 10

OPERANDOS DE MEMORIARECAPITULANDOSe 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 basede A

... 5 10 0 0 0 0 15 42 ... ... 100 101 102 103 104 105 106 107 ...

Page 28: CLASE 10

OPERANDOS DE MEMORIA• Los valores deben ser traídos (fetched) de memoria antes de

que las instrucciones (add y sub) puedan operar sobre ellos.

Register Memory

Register Memory

Load word

lw $t0, memory-addresslw $t0, offset(registro_base)

Store word

sw $t0, memory-addresssw $t0, offset(registro_base)

• Dirección de la memoria accedida es dada por la suma del offset (valor constante) con el contenido del registrador base.

Page 29: CLASE 10

OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW)

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

Compilación usando instrucciones de transferencia de datos

Solución:• Un operando está en memoria. Es necesario transferirlo a un registro mediante la

instrucción load word, lwlw $t0, 8($s3) # registro $t0 almacena A[8] # el offset será refinado en breveOffset

Base register

• Ambos operandos de la suma están en registros

add $s1, $s2, $t0 # g = h+A[8]

Page 30: CLASE 10

COMENTARIOS SOBRE LA TRADUCCION ANTERIOR

g = h+A[8]; lw $t0, 8($s3)add $s1,$s2,$t0

• 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)

Page 31: CLASE 10

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 siA 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.

Page 32: CLASE 10

OPERANDOS DE MEMORIA (INSTRUCCIÓN STORE WORD, SW)

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

Compilación usando instrucciones de transferencia de datos

Solución:• Un operando está en memoria. Es necesario transferirlo a un registro mediante la

instrucción load word, lwlw $t0, 32($s3) # registro $t0 almacena A[8] # el offset será refinado en breveOffset

Base register

• Ambos operandos de la suma están en registros

add $s1, $s2, $t0 # g = h+A[8]

Page 33: CLASE 10

OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW)

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

Compilación de una sentencia en C cuando un operando está en memoria

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]

Page 34: CLASE 10

DIRECCION ABSOLUTA DE LA POSICION 3 DEL VECTOR (i = 3)

0 1 2 3 4 5 6 7 8 9 ...

Registrador base$s2

Variable i (i=3)($s4)

Desplazamiento (offset): 4*i = 12Dirección A[3]: ($s2)+12

A

Page 35: CLASE 10

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*iadd $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]

Page 36: CLASE 10

EJEMPLO: MEMORIA Y VECTORESSolució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]

Page 37: CLASE 10

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ápidoComo 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

Page 38: CLASE 10

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

Page 39: CLASE 10

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

Page 40: CLASE 10

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.

Page 41: CLASE 10

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.

Page 42: CLASE 10

REPRESENTACION DE LAS INSTRUCCIONES• Representación simbólica de una instrucción (ensamblador)

add $t0, $s1, $s2

• Representación decimal

0 17 18 8 0 32

$s1 $s2 $t0

campo

• Representación binaria (lenguaje de maquina)

000000 10001 10010 01000 00000 100000

6 bits 5 bits 5 bits 5 bits 5 bits 6 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)

Page 43: CLASE 10

REPRESENTACION DE LAS INSTRUCCIONES

• ¿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

registro registro registro

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

campo

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

Page 44: CLASE 10

FORMATOS DE INSTRUCCIÓN MIPS

Formato R (register)

• Operaciones ALU registro-registro: rd rs funct rt

opcode: operación básica de la instrucciónrs: primer registro de origenrt: segundo registro de origenrd: registro de destino (resultado de la operación)shamt: cantidad de desplazamientofunct: función (define la variante especifica de la operación

descrita en el opcode)

opcode rs rt rd shamt funct

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

Page 45: CLASE 10

FORMATOS DE INSTRUCCIÓN MIPS

Formato I (immediate)

• 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ónrs: primer registro de origenrt: 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)

opcode rs rt constant or address

6 bits 5 bits 5 bits 16 bits

Page 46: CLASE 10

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

opcode rs rt constant or address

6 bits 5 bits 5 bits 16 bits

opcode rs rt rd shamt funct

6 bits 5 bits 5 bits 5 bits 5 bits 6 bits

Formato R

Formato I

Page 47: CLASE 10

FORMATOS DE INSTRUCCIÓN MIPSEjercicio: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];

Page 48: CLASE 10

FORMATOS DE INSTRUCCIÓN MIPSSolucion:

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:

Page 49: CLASE 10

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

Page 50: CLASE 10

OPERACIONES LOGICASProporcionan 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

Page 51: CLASE 10

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

0 0 16 10 4 0

• Desplazar hacia la izquierda un número i de bits equivale a multiplicar por 2i

Page 52: CLASE 10

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 0000y $t1: 0000 0000 0000 0000 1111 1100 0000 0000

la instrucciónand $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)

Page 53: CLASE 10

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 0000y $t1: 0000 0000 0000 1111 1111 0000 0000 0000

la instrucciónor $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

Page 54: CLASE 10

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 0000y $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

Page 55: CLASE 10

ARQUITECTURA MIPS (ESTADO ACTUAL DE ESTUDIO)

Page 56: CLASE 10

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