Nivel ISA, Modos de Dirección, Formatos de Instrucción

Anuncio
Que es un Conjunto de Instrucciones?
El nivel ISA (II)!
Conjunto de Instrucciones
EC-2721
Arquitectura del Computador I!
• Colección completa de instrucciones
comprendida por un procesador!
• Lenguaje de máquina !
• Usualmente es representado en lenguaje
ensamblador!
• Binario
Organización de Computadoras: Un enfoque estructurado,
Andrew Tanenbaum, Pearson Education. Capítulo 4!
Universidad Simón Bolívar!
Departamento de Electrónica y Circuitos!
Prof. Juan. C. Regidor
Qué es una instrucción?
Elementos de una Instrucción
!
• Código de operación (Op code)!
Es una orden al procesador:!
!
• Referencia a operandos fuente!
!
Haz esta operación a estos
datos y dejas los resultados aquí.!
!
!
!
Luego, sigue haciendo esto otro.!
…!
!
—Hacer esto…!
—A esto…!
• Referencia a operando resultado!
—Pon la respuesta aquí…!
• Referencia a la siguiente instrucción!
—Cuando lo termines, sigues con esto otro...
Diagrama de estados del Ciclo de Instrucción
Representación de Instrucciones
• En código de máquina cada instrucción
tiene una representación binaria única!
Búsqueda
de
operandos
Buscar
instrucción
Almacenar
Resultado
Múltiples !
Operandos
Múltiples!
Resultados
!
• Para consumo humano (programadores)
usa una representación simbólica!
!
Calcular!
Dirección!
Instrucción
Decodificación
de instrucción
Cálculo
Dirección
Operandos
Operación
sobre datos
Cálculo
dirección
operandos
Instrucción Completa,!
Buscar próxima instrucción
Formatos de Instrucción
—ej. ADD, SUB, LOAD!
!
• Los operandos se representan asi:!
! -ADD A,B
Formatos de Instrucción Sencillos
Cod. Op.
Ref. Operando 1 Ref. Operando 2 Ref. Operando 3
3 Direcciones
Cod. Op.
Ref. Operando 1 Ref. Operando 2
2 Direcciones
Cod. Op.
1 Dirección
Cod. Op.
Formato del código binario que representa una instrucción
0 Direcciones
Ref. Operando 1
Tipos de Instrucciones
Clasificación por"
Número de direcciones (a)
Clasificación por operación a realizar:!
!
• Procesamiento de datos!
!
• Almacenamiento de datos (Memoria
principal)!
!
• Movimiento de datos (I/O)!
!
• Control de flujo de Programa
Clasificación por "
Número de direcciones(b)
• 3 direcciones!
—Operando 1, Operando 2, Resultado!
—a = b + c;!
—Puede haber una cuarta direccion– prox.
instrucción (usualmente implícita)!
—No es común:!
Necesita palabras muy largas para contener
toda la información
Clasificación por"
Número de direcciones (c)
• 2 direcciones!
—Una dirección actúa como operando y resultado!
! ! a = a + b!
—Reduce la longitud de la instrución!
—Requiere algún trabajo adicional!
– Es necesario almacenar temporalmente algunos
resultados
• 1 dirección!
—Segunda dirección implicita!
—Usualmente es un registro (acumulador)!
—Comúnmente usado en máquinas antiguas
Clasificación por"
Número de direcciones (d)
Decisiones de Diseño"
Cuantas direcciones?
• Mas direcciones!
• 0 (cero) direcciones!
—Todas las direcciones son implicitas!
—Usa una pila!
—ej. load a!
—
load b!
—
add!
—
store c!
!
—c = a + b
Decisiones de diseño (1)
• Repertorio!
—Cuantas?!
—Que pueden hacer?!
—Cuán complejas serán?!
• Tipos de datos!
• Formatos de instrucción!
—Longitud del opcode!
—Numero de direcciones
—Instrucciones mas complejas (¿poderosas?)
Menos instrucciones por programa!
— Si hay muchos registros!
– Operaciones entre registros son mas rápidas!
– Si los operandos estan en memoria son mas lentas!
• Menos direcciones!
—Instrucciones menos complejas (¿poderosas?)
Mas instrucciones por programa!
—Búsqueda/ejecución de instrucciones mas
rápida
Decisiones de diseño (2)
• Registros!
—Número de registros disponibles en el CPU!
—Que operaciones pueden ser efectuadas por los
registros?!
• Modos de direccionamiento (después…)!
!
• RISC v CISC
Tipos de Operando
Tipos de Datos Específicos
•
•
•
•
•
•
General – contenido binario arbitrario!
Entero – valor binario !
Ordinal – Entero sin signo!
Unpacked BCD - Un dígito por byte!
Packed BCD - 2 dígitos BCD por byte!
Near Pointer - 32 bit de offset en
segmento!
• Bit field!
• Byte String!
• Punto Flotante
• Direcciones!
• Números!
—Entero/Punto flotante !
—Caracteres!
—ASCII etc.!
• Datos Lógicos!
—Bits o Banderas
Tipos de Operación
•
•
•
•
•
•
•
Transferencia de datos: !
Aritmeticas: !!
!
!
Lógicas:!
!
!
!
Conversión! !
!
!
Entrada / Salida! !
!
Control del Sistema!
!
Transferencia de Control!
Modos de Dirección
Mov!
Add!
And!
Num!
In, Read!
Trap! !
Jump, Call
•
•
•
•
•
•
•
Inmediato!
Directo!
Indirecto!
Registro!
Registro Indirecto!
Desplazamiento (Indizado) !
Pila
Dirección Inmediata
Dirección Directa
Opcode Operando
!
• El operando es parte de la instrucción!
• El operando ocupa el campo de dirección!
• ej. ADD #5!
— Suma 5 al contenido del acumulador!
— 5 es operando!
• El campo de dirección contiene la
dirección del operando!
• Dirección efectiva (EA) = Campo de
dirección (A)!
• e.g. ADD 32!
—Suma el contenido de la celda 32 con el
acumulador!
—Busca el operando en la posicion 32!
• No hay referencia a memoria para buscar el dato!
• Rápido!
• Rango limitado
• Referencia única a memoria!
• No requiere calculos adicionales para
determinar la dirección!
• Espacio de dirección limitado
Dirección Directa
Dirección Indirecta (1)
Instrucción
Opcode
Dirección A
Memoria
Operando
• El operando se encuentra en una celda de
de memoria apuntada por el contenido de
la posición apuntada por el campo de
dirección!
• EA = (A)!
—Buscar en A, Encontrar la dirección (A) y buscar
el operando!
• e.g. ADD (A)!
—Add el contenido de la celda de memoria
apuntada por el contenido de A con el
acumulador
Dirección Indirecta (2)
• Mayor espacio de dirección !
• 2n donde n = ancho de la palabra!
• Puede ser anidada, multinivel, en cascada!
Dirección Indirecta
Instruction
Opcode
Address A
—ej. EA = (((A)))!
Pointer to operand
• Multiples accesos a memoria para
encontrar el operando!
• >>>Lento
Operand
Dirección por Registro (1)
Dirección por Registro(2)
• Es en terminos generales, directo!
• El operando esta en un registro
referenciado en el campo de dirección!
• EA = R!
• Número de registros limitado!
• Se necesitan campos de dirección mas
pequeños !
•
•
•
•
—Instrucciones mas cortas!
—Búsquedas de direcciones mas rápidas
Memory
No necesita acceder a memoria!
Ejecución mas rápida!
Espacio de direcciones muy limitado!
Multiples registros mejoran el rendimiento
Dirección por Registro
Dirección Indirecta por Registro
Instruction
Opcode
Register Address R
Registers
Operand
Dirección Indirecta por Registro
Dirección por desplazamiento
• EA = A + (R)!
• El campo de dirección contiene dos
valores:!
Instruction
Opcode
Register Address R
Memory
Registers
Pointer to Operand
• Dirección Indirecta!
• EA = (R)!
• El operando está en la posición de
memoria apuntada por el contenido del
registro R!
• Amplio espacio de direcciones (2n)!
• Requiere un solo acceso a memoria para
leer el operando
Operand
—A = valor base!
—R = registro que contiene el desplazamiento!
—o vice versa
Dirección por desplazamiento"
Dirección Indizada
Instruction
Opcode Register R Address A
Memory
A = base!
R = desplazamiento (autoincrementado)!
EA = A + R!
Eficiente direccionando arreglos!
—EA = A + R!
—R++
Registers
Pointer to Operand
•
•
•
•
+
Operand
Dirección de pila
Formatos de Instrución
• El operando está (implicitamente) en el
tope de la pila!
Ej: !
• Distribución de los bits en una instrucción!
• Incluye el opcode!
• Incluye (implicita o explicitamente) los
operandos!
• Generalmente hay mas de un formato de
instrucción en un conjunto de
instrucciones
—ADD:! Saca dos elementos del tope de la pila y
coloca su suma
Longitud de Instrucción
Asignación de Bits
• Afectada por y afecta a:!
Factores:!
• # de Modos de direccionamiento!
• Numero de operandos!
• # de Registos!
• # de conjuntos de registros!
• Rango de direcciones!
• Granularidad de las direcciones (palabras
vs bytes)
—Tamaño de la Memoria!
—Organización de la memoria!
—Estructura del Bus!
—Complejidad del CPU !
—Velocidad del CPU!
• Compromiso entre disponer de un
repertorio de instrucciones poderoso y
ahorrar espacio
Descargar