Post on 03-Jan-2016
description
transcript
Organización del Organización del ComputadorComputador
CPU (ISA)– Diseño de un ISA CPU (ISA)– Diseño de un ISA Modos de DireccionamientoModos de Direccionamiento
Modos de DireccionamientoModos de Direccionamiento
Instrucción: OpCode + OperandosInstrucción: OpCode + Operandos Que tipos de cosas pueden ser los Que tipos de cosas pueden ser los
operandos?operandos? ConstantesConstantes Referencia a VariablesReferencia a Variables Referencia a ArraysReferencia a Arrays Referencias a subrutinasReferencias a subrutinas Estructuras de datos (Listas, Colas)Estructuras de datos (Listas, Colas)
OpCodeOpCode Op1Op1 Op2Op2 Op3Op3
InmediatoInmediatoDirecto (o absoluto)Directo (o absoluto) IndirectoIndirectoRegistroRegistro Indirecto con registroIndirecto con registroDesplazamiento (Indexado) Desplazamiento (Indexado)
Modos de DireccionamientoModos de Direccionamiento
El operando es parte de la instrucción (N)El operando es parte de la instrucción (N) Ej: ADD 5Ej: ADD 5
AC = AC + 5AC = AC + 5 5 es un operando5 es un operando
Ej2: Jump 110 Ej2: Jump 110 No hay referencia adicional a memoriaNo hay referencia adicional a memoria RápidoRápido
InmediatoInmediato
OP N
DirectoDirecto
El operando está en la El operando está en la direccióndirección referenciada por Areferenciada por A
Operando = [A]Operando = [A]Ej: ADD [941] ( A = A + [941] )Ej: ADD [941] ( A = A + [941] ) Ideal para acceso a Ideal para acceso a variablesvariablesHay sólo un acceso a la memoriaHay sólo un acceso a la memoriaDireccionamiento limitado a tamaño del Direccionamiento limitado a tamaño del
operandooperando
AOpcode
Address AOpcode
Instruction
Memory
Operand
DirectoDirecto
IndirectoIndirecto
A es un PunteroA es un PunteroOperando = [[A]]Operando = [[A]]UsosUsos
Acceso a Arrays, Listas u otras estructurasAcceso a Arrays, Listas u otras estructurasAumenta el espacio de direccionamientoAumenta el espacio de direccionamiento
Existe acceso múltiple a la memoria para Existe acceso múltiple a la memoria para encontrar el operandoencontrar el operando
AOpcode
Address AOpcode
Instruction
Memory
Operand
Pointer to operand
IndirectoIndirecto
Ejemplo Lista indirectoEjemplo Lista indirecto
p: DW 100p: DW 100
n: DW 101n: DW 101
Mov R1,0Mov R1,0
Start:Start: cmp [p],0cmp [p],0
je finje fin
add R1,[[p]]add R1,[[p]]
mov [p],[[n]]mov [p],[[n]]
mov [n],[p]mov [n],[p]
add [n],1add [n],1
jmp Startjmp Start
fin: haltfin: halt
pp
2002001010
3003002020
003030
100100 101101
200200 201201
300300 301301
nn
RegistroRegistro
El operando es un registro de la CPUEl operando es un registro de la CPUOperando = Registro nOperando = Registro nNúmero limitado de registrosNúmero limitado de registros Instrucción rápidaInstrucción rápida
Ej: Mov R1,R2Ej: Mov R1,R2No acceso a memoriaNo acceso a memoria Instrucción cortaInstrucción cortaEspacio de direcciones limitadoEspacio de direcciones limitado
RnOpcode
Register NameOpcode
Instruction
Registers
Operand
RegistroRegistro
El operando está en la memoria El operando está en la memoria direccionada por un registro.direccionada por un registro.
Operando = [Rn]Operando = [Rn]Hay un acceso menos a memoria que en Hay un acceso menos a memoria que en
direccionamiento indirectodireccionamiento indirectoComodo para acceder a arraysComodo para acceder a arrays
Registro IndirectoRegistro Indirecto
Register Address ROpcodeMemory
OperandPointer to Operand
Registers
Registro IndirectoRegistro Indirecto
El operando contiene una referencia a un El operando contiene una referencia a un registro y a un valor de desplazamientoregistro y a un valor de desplazamiento
Operando = [ROperando = [RN1N1 + D] + D] Ideal para acceder a campos de registrosIdeal para acceder a campos de registros
Moviendo DMoviendo DTambién para arrays de estructurasTambién para arrays de estructuras
R se mueve dentro del arrayR se mueve dentro del arrayD selecciona el campoD selecciona el campo
DesplazamientoDesplazamiento
Register ROpcode
Instruction
Memory
OperandPointer to Operand
Registers
Desplazamiento
+
DesplazamientoDesplazamiento
Ejemplo Lista sin desplazamientoEjemplo Lista sin desplazamiento
p: p: DW 100DW 100n: n: DWDW 101 101
mov R1,0mov R1,0mov R2,[p]mov R2,[p]mov R3,[n]mov R3,[n]
Start:Start: cmp [R2],0cmp [R2],0je finje finadd R1,[R2]add R1,[R2]mov R2,[R3] // R2=[[n]]mov R2,[R3] // R2=[[n]]mov R3,R2mov R3,R2add R3,1 // R3 = [n]add R3,1 // R3 = [n]jmp Startjmp Start
End:End:
pp
2002001010
3003002020
003030
100100 101101
200200 201201
300300 301301
nn
Ejemplo Lista con desplazamientoEjemplo Lista con desplazamiento
p: p: DW 100DW 100
mov R1,0mov R1,0mov R2,[p]mov R2,[p]
Start: Start: cmp [R2],0cmp [R2],0je finje finadd R1,[R2]add R1,[R2]mov R2,[R2+1]; mov R2,[R2+1];
R2=[[n]]R2=[[n]]jmp Startjmp Start
End:End:
pp
2002001010
3003002020
003030
100100 101101
200200 201201
300300 301301
nn
Similar al desplazamientoSimilar al desplazamientoUn operando contiene una referencia a Un operando contiene una referencia a
una dirección y a un registro que actúa una dirección y a un registro que actúa como desplazamientocomo desplazamiento
Operando = [D+ROperando = [D+RN1N1]] Ideal para ArraysIdeal para Arrays
IndexadoIndexado
Modo de DireccionamientoModo de Direccionamiento
InmediatoInmediato Mov R, #NMov R, #N
R R N N
DirectoDirecto Mov R, [A]Mov R, [A]
R R mem[A] mem[A]
RegisterRegister Mov R1,R2Mov R1,R2
R1 R1 R2 R2
Register IndirectRegister Indirect Mov R1,[R2]Mov R1,[R2]
R1 R1 mem[R2] mem[R2]
DisplacementDisplacement Mov R1, [R2+D]Mov R1, [R2+D]
R1 R1 mem[R2+ D] mem[R2+ D]
Base-Register DisplacementBase-Register Displacement Mov R1, D (RMov R1, D (Rbasebase) )
R1 R1 mem[R mem[Rbasebase + D] + D]
Indexed Indexed Mov R1, A[R]Mov R1, A[R]
R1 R1 mem[A+R] mem[A+R]
Indexed ScaledIndexed Scaled Mov R1, A[R*Scale]Mov R1, A[R*Scale]
R1 R1 mem[A+R*Scale] mem[A+R*Scale]
PC RelativePC Relative Jump NJump N
PC PC PC + N PC + N
Completar el valor de AC según el modo de Completar el valor de AC según el modo de direccionamientodireccionamiento
EjemploEjemplo
EjemploEjemplo
Temas a considerar:Temas a considerar:Tipos de operaciónTipos de operaciónNúmero de bits por instrucciónNúmero de bits por instrucciónNúmero de operandos por instrucciónNúmero de operandos por instrucción
Operandos implícitos y explícitosOperandos implícitos y explícitosUbicación de los operandosUbicación de los operandosTamaño y tipo de los operandosTamaño y tipo de los operandos
Uso de Stack, RegistrosUso de Stack, Registros
Diseñando el ISADiseñando el ISA
Algunas métricas…Algunas métricas…Memoria principal ocupada por el Memoria principal ocupada por el
programaprogramaTamaño de la instrucción (en bits).Tamaño de la instrucción (en bits).
Code density: tratar que las Code density: tratar que las instrucciones ocupen pocoinstrucciones ocupen poco
Complejidad de la instrucción.Complejidad de la instrucción.Número total de instrucciones Número total de instrucciones
disponibles.disponibles.
Diseñando el ISADiseñando el ISA
Tamaño de la instrucciónTamaño de la instrucción Corto, largo, variable?Corto, largo, variable?
Cuántos operandos?Cuántos operandos?
Cuántos registros?Cuántos registros?
Criterios en diseños de ISACriterios en diseños de ISAMemoriaMemoria
Direccionable por byte o Direccionable por byte o por palabra (word)?por palabra (word)?
Big/Little EndianBig/Little Endian Cuántos modos de Cuántos modos de
direccionamiento?direccionamiento? Directo, indirecto, Directo, indirecto,
indexado…indexado… MuchosMuchos PocosPocos Uno soloUno solo
Cuántos Operandos?Cuántos Operandos? 3 operandos: RISC y Mainframes3 operandos: RISC y Mainframes
A = B + CA = B + C 2 operandos: Intel, Motorola2 operandos: Intel, Motorola
A = A + BA = A + B Uno suele ser un registroUno suele ser un registro
1 operando: Acumulador1 operando: Acumulador AC = AC + DatoAC = AC + Dato
0 operandos: Stack Machines0 operandos: Stack Machines Usan un stackUsan un stack
Muchos operandos (VLIW)Muchos operandos (VLIW) Paralelismo implícito en la instrucciónParalelismo implícito en la instrucción
Algunas ISAAlgunas ISA
CISC examples RISC examples Superscalars
IBM 370/168 VAX 11/780 Intel 80486 88000 R4000 RS/6000 80960
Year developed 1973 1978 1989 1988 1991 1990 1989
The number of instruction 208 303 235 51 94 184 62
Instruction size (bytes) 2 - 6 2 - 57 1 - 11 4 4 4 4, 8
Addressing modes 4 22 11 3 1 2 11
The number of GRPs 16 16 8 32 32 32 32 - 256
Control memory size (K bits) 420 480 246 - - - -
Cache size (KB) 64 64 8 16 128 32 - 64 0.5
OrtogonalidadOrtogonalidad
Cualquier instrucción puede ser usada con Cualquier instrucción puede ser usada con cualquier cualquier modo de direccionamientomodo de direccionamiento
Es una cualidad “elegante”, pero costosaEs una cualidad “elegante”, pero costosa Implica tener muchas instruccionesImplica tener muchas instruccionesAlgunas quizás poco usadas o fácilmente Algunas quizás poco usadas o fácilmente
reemplazablesreemplazables
EjemploEjemplo
• Instrucción 32 bits
• 256 instrucciones posibles
• 2 operandos (Op1 = Op1 op Op2)
• 12 bits por operando
• MODE = 8 Modos de Direccionamiento
• Reg = 32 Registros
• OffSet = Desplazamiento o Escala (4 bits)
• Problema: Para direccionamiento directo o inmedianto hay que acceder a los campos opcionales
El tamaño de las intrucciones está fuertemente El tamaño de las intrucciones está fuertemente influenciado por el número de operandos que influenciado por el número de operandos que soporta el ISA.soporta el ISA.
No todas las instrucciones requieren el mismo No todas las instrucciones requieren el mismo número de operandos.número de operandos.
Hay operaciones que no requieren operandos (ej: Hay operaciones que no requieren operandos (ej: HALTHALT))
Qué hacemos con el espacio que sobra?Qué hacemos con el espacio que sobra?
Podríamos utilizar códigos de operación Podríamos utilizar códigos de operación variables.variables.
Formatos de InstrucciónFormatos de Instrucción
16 Registros, 4K de memoria.16 Registros, 4K de memoria. Necesitamos 4 bits para acceder a un registroNecesitamos 4 bits para acceder a un registro Necesitamos 12 bits para acceder a memoria.Necesitamos 12 bits para acceder a memoria. Si las instrucciones son de 16-bits tenemos dos Si las instrucciones son de 16-bits tenemos dos
opciones:opciones:
Ejemplo Máquina con RegistrosEjemplo Máquina con Registros
Si permitimos que varíe el opcode:Si permitimos que varíe el opcode:
EjemploEjemplo
Formato de Instrucción PentiumFormato de Instrucción Pentium
Pentium Addressing ModesPentium Addressing Modes Direcciona usando Segmento : OffsetDirecciona usando Segmento : Offset
Segmento : Offset = Dirección LinealSegmento : Offset = Dirección Lineal Modos disponibles (entre otros…. Son 24!!!!)-> CISCModos disponibles (entre otros…. Son 24!!!!)-> CISC
ImmediatoImmediato ImplícitoImplícito Register operandRegister operand DisplacementDisplacement BaseBase Base with displacementBase with displacement Scaled index with displacementScaled index with displacement Base with index and displacementBase with index and displacement Base scaled index with displacementBase scaled index with displacement RelativeRelative
Pentium Addressing ModePentium Addressing Mode
PowerPC Addressing ModesPowerPC Addressing Modes Load/store Load/store
Register Indirect + DesplazamientoRegister Indirect + Desplazamiento Las instrucciones incluyen 16 bit de desplanzamiento a ser Las instrucciones incluyen 16 bit de desplanzamiento a ser
sumado a un registro base (seteable)sumado a un registro base (seteable) Indirect indexedIndirect indexed
Un registro de base y otro de indiceUn registro de base y otro de indice
SaltosSaltos AbsolutoAbsoluto RelativoRelativo IndirectoIndirecto
ArithmeticArithmetic Operandos en registros o en la instrucciónOperandos en registros o en la instrucción
PowerPC Memory Operand PowerPC Memory Operand Addressing ModesAddressing Modes
ReferenciasReferencias
Tanenbaum – Capitulo 5Tanenbaum – Capitulo 5Stalling – Capitulo 11Stalling – Capitulo 11Null - Capitulo 5Null - Capitulo 5