Documentos de Académico
Documentos de Profesional
Documentos de Cultura
y Lenguaje ensamblador
1
Índice
• Introducción
• Lenguaje máquina
• Formatos de Instrucción
• Modos de Direccionamiento
• Regularidad
• Repertorio de instrucciones
• Regularidad y ortogonalidad
• Arquitecturas RISC y CISC
• Tipos de arquitecturas (almacenamiento interno en la CPU)
• Tipos de instrucciones
• Basadas en pila, en registros de propósito general, en acumulador
y en registros
2
Introducción
Arquitectura -- Organización
Arquitectura de un sistema (lo que ve el programador)
• Repertorio de instrucciones y modos de direccionamiento
• Tipos y formatos de los operandos
• Mapa de memoria y de E/S
• Modelos de ejecución
Ej: ¿Hay una instrucción de multiplicar?
4
Introducción
¿Qué debe conocer el programador a bajo nivel?
Un poco de
hardware:
algunos
detalles sobre
la CPU, cómo
son y qué
tamaños tienen
los registros
(PC, SP,.. ) , la
cantidad de
memoria, etc…
* Curso de Arquitectura. Universidad Politécnica de Madrid
5
Introducción
Repertorio de instrucciones
Mnemotécnico Código Máquina
Un poco de software: move #2, R2 11000111 (C7h)
repertorio de instrucciones, add R2, R3 00110110 (36h)
organización de la pila si la …
hubiera, etc… …
sub #1, R2 01100110 (66h)
Pila
(LIFO)
6
Lenguaje máquina
• Lenguaje de bajo nivel (código binario)
• Muestra las capacidades básicas del
computador
• La característica más importante de la
arquitectura de un computador
• Depende del computador, lo que crea
incompatibilidades entre distintos computadores
7
Lenguaje máquina
Formatos de instrucción: Instrucciones máquina
8
Lenguaje máquina
Formatos de instrucción: Ciclo de instrucción
Captura de la
instrucción
• Leer de memoria
Guardar resultado
Decodificación
• Escribir en el
destino • Interpretar qué
hacer
9
Lenguaje máquina
Formatos de instrucción
• Representación de la instrucción
• Significado de cada uno de los bits del código
• Campo: agrupación de bits que tienen un significado
10
Lenguaje máquina
Formatos de instrucción
11
Lenguaje máquina
Formatos de instrucción: decisiones de diseño
• Factores para evaluar el repertorio de instrucciones:
• Espacio que necesita un programa
• Complejidad medida en términos de decodificación
necesaria
• Longitud de la instrucción, que “encaje” con el bus de datos
• Número total de instrucciones
• Otros factores a tener en cuenta:
• Pocos formatos de instrucción y sistemáticos
• Se prefieren instrucciones cortas a largas: menos memoria y
más rapidez
• Tamaños del formato adaptado a la longitud de palabra de la
arquitectura (optimizando el acceso a memoria)
12
Lenguaje máquina
Formatos de instrucción: diseño del formato
13
Lenguaje máquina
Formatos de instrucción: código de operación
Captura de la
instrucción
• Leer de memoria
Guardar resultado
Decodificación
• Escribir en el
destino • Interpretar qué
hacer
Ejecución
• Llevar a cabo la Capturar operandos
función de la • Leer operandos
instrucción
14
Lenguaje máquina
Formatos de instrucción: técnicas de codificación
• Longitud fija
– Gasta espacio de memoria
– Mejores prestaciones en la fase de decodificación
– Se usan normalmente pocos tamaños de instrucción
• Longitud variable
– Mayor complejidad de codificación
– Ahorra espacio de memoria
• El compromiso entre longitud fija y variable está en el
tamaño de los programas en función de la facilidad de
decodificación en el procesador
15
Lenguaje máquina
Formatos de instrucción: formatos típicos
16
Lenguaje máquina
Formatos de instrucción: codificación por extensión
• Compromiso entre muchos códigos de operación y cortos
• Sea una máquina con instrucciones de 16 bits y 16 registros (se necesitan 4
bits para elegir un registro):
– Se podrían codificar16 instrucciones, cada una con 3 operandos de
registro (4 bits para la instrucción y 12 para los operandos)
– Se podrían usar 4 bits para el COP y 12 bits para la dirección de
memoria
COP Dirección 1
17
Lenguaje máquina
Formatos de instrucción: codificación por extensión
COP CD1 CD2 CD3
xxxx 1 combinación libre
i.e.: 1111
COP CD1 CD2
1111xxxx 2 combinaciones libres
COP CD i.e.: 111X
1111111xxxxx
1 combinación libre
COP i.e.: 1111
111111111111xxxx
18
Lenguaje máquina
Formatos de instrucción: codificación por extensión
19
Lenguaje máquina
Formatos de instrucción: codificación por extensión
0000 R1 R2 R3
... 15 instrucciones con 3 operandos
1110 R1 R2 R3
1111 0000 R1 R2
… 14 instrucciones con 2 operandos
1111 1101 R1 R2
20
Lenguaje máquina
Formatos de instrucción: codificación por extensión
15 instrucciones con 3 direcciones 31 instrucciones con 1 dirección
COP CD1 CD2 CD3 COP CD
0000 111111100000
… …
1110 111111111110
14 instrucciones con 2 direcciones 16 instrucciones sin dirección
COP CD1 CD2 COP
11110000 1111111111110000
… …
11111101 1111111111111111
22
Lenguaje máquina
Modos de direccionamiento: campos de dirección
Captura de la
instrucción
• Leer de memoria
Ejecución
• Llevar a cabo la Captura de los
función de la operandos
instrucción • Leer operandos
23
Lenguaje máquina
Modos de direccionamiento: ¿dónde están los operandos?
24
Lenguaje máquina
Modos de direccionamiento: ¿dónde están los operandos?
• Hay cuatro categorías de modos de direccionamiento:
– Datos: modos usados para referirse a operandos (todos los
modos excepto el directo a registro)
– Memoria: aquéllos que se refieren a cómo conseguir un
operando alojado en memoria (excluyendo el directo a
registro)
– Control: Los que pueden usarse para operandos que hay en
memoria que no tiene un tamaño asociado y que
generalmente se emplean para instrucciones de control:
saltos, llamadas a procedimientos, …
– Modificables: Incluyen aquellos modos para referirse a
operandos que se pueden modificar. Por ejemplo, la
dirección relativa al contador del programa
25
Lenguaje máquina
Modos de direccionamiento: ¿dónde están los operandos?
• Rápido y sencillo
Instrucciones • Para constantes
• No para resultados
Memoria • Muchos bits
• Pocos bits
Registros de • Acceso rápido
la CPU • Pocos registros
• Hay que cargar los registros
26
Sabiendo que los operandos de la instrucción se pueden guardar en
diferentes lugares, determine el impacto que cada uno de ellos
tendrá en la ejecución de la instrucción
EJERCICIO
27
Solución
• Rápido y simple
Instrucciones • Sólo constantes
• No para resultados
Memoria • Muchos bits
• Se requieren pocos bits
Registros de • Rápido acceso
la CPU • Pocos registros
• Hay que cargar los registros
28
Lenguaje máquina
Modos de direccionamiento: implícito
• No existe campo de dirección (CD)
• La dirección del operando se encuentra implícita
en el propio código de operación
• Ventaja: no se necesita espacio para codificar
la dirección del operando
• Inconveniente: limita la aplicación de la
operación
• Ejemplo:
• Instrucciones del modelo de pila. Introducir y
sacar datos de la pila (push-pop)
29
Lenguaje máquina
Modos de direccionamiento: inmediato
• El operando es parte de la propia instrucción (literal)
• Ventaja: no requiere accesos a memoria ni a registros
• Inconveniente: rango limitado por el ancho del
campo.
CP COP CD=1000
ALU
Memoria principal
A
30
Lenguaje máquina
Modos de direccionamiento: inmediato
D2
MOVE #9,D2 ???? ????
Antes
D2
0000 0009
Después
31
Lenguaje máquina
Modos de direccionamiento: directo o absoluto
• El operando está en la dirección de memoria indicada
• Ventaja: se puede direccionar de forma sencilla y
directa todo el espacio de direccionamiento
• Inconveniente: el acceso a memoria es más lento
CP COP CD=1000
Ejemplo (i8085):
Instrucción LDA 1000, 1000 Operando ALU
carga el contenido de la Memoria principal
posición 1000 de la
A
memoria en el acumulador
32
Lenguaje máquina
Modos de direccionamiento: directo a registro
• El operando está en el registro establecido
• Ventaja: el acceso a registros es más rápido que a
memoria. Además, el número de registros es pequeño
• Inconveniente: el número de registro es limitado
INC R2
Registros de la CPU
COP 0010 (2h)
R1
R2 Operando
Valores temporales o muy
R3
referenciados
Sin referencias a memoria R4
Pocos registros Rn
33
Lenguaje máquina
Modos de direccionamiento: relativo
• La instrucción no contiene la dirección, sino un
desplazamiento D para sumar a la dirección de un puntero
Puntero
CP COP CD + P
• Ventaja: Necesita d bits
Memoria principal
34
Lenguaje máquina
Modos de direccionamiento: relativo
• La mayoría de los computadores permiten
desplazamientos, incrementos y decrementos con el
fin de:
• Permitir generar código reubicable, recorrer
estructuras de datos, esquemas de protección
de memoria, ...
• Según el puntero, existen diversas variantes:
• Contador de programa (PC)
• Registro base
• Pila
35
Lenguaje máquina
Modos de direccionamiento: relativo
CP
102 COP CD=16 + 103
103
RB
CP COP RB CD=16 + 200
216 Operando
Memoria principal
36
Lenguaje máquina
Modos de direccionamiento: relativo
Indexado: Se utiliza un registro índice y un
desplazamiento, que se especifica mediante
registro.
RB
CP COP Ri RB 200
216 Operando +
Ri
Memoria principal
16
37
Lenguaje máquina
Modos de direccionamiento: relativo
• Auto-incremento: El contenido del registro base o índice
puede modificarse para recorrer los elementos de un vector.
Memoria principal
38
Lenguaje máquina
Modos de direccionamiento: indirecto
La instrucción indica la dirección de memoria o el
registro que contiene la dirección del operando
CP COP CD=100
No es necesario saber la
dirección del dato al generar 100 Dir. Operando=200
el código
200 Operando
Necesita varios accesos a
Memoria principal
memoria
39
Lenguaje máquina
Modos de direccionamiento: IEEE 694
IEEE 694 (1985). Standard for Microprocessor Assembly Language
(Estándar para el lenguaje ensamblador de microprocesadores)
40
Lenguaje máquina
Modos de direccionamiento: IEEE 694
Banco de registros Direcciona- Tipo Operando
R0 0001 miento
#6 Inmediato 0006
R1 0002
R2 0000 /0002 Absoluto a memoria 0001
R3 0005 [0001] Indirecto a memoria
0000
Memoria de datos .3 Absoluto a registro 0005
0000 0002
[.3] Indirecto a registro 0006
0001 0007
1[.3] ó [.3,1] Relativo a Registro Base
0002 0001 0005
2[++.2] Relativo Reg. con preinc 0000
0003 0000
0004 0004 2[- -.1] Relativo Reg. con predec
0000
0005 0006 2[.2++] Relativo Reg. con postinc
0001
0006 0005 2[.1- -] Relativo Reg. con postdec 0004
0007 0000
41
Lenguaje máquina
Modos de direccionamiento: IEEE 694
• #6: directamente la constante 0006.
• /0002: el contenido de la dirección absoluta de memoria 0002,
que es 0001.
• [0001]: en la dirección 0001 está la dirección del dato, que es
0007. Por tanto, el dato es 0000.
• .3: el contenido del registro 3, que es 0005.
• [.3]: en el registro 3 está la dirección del dato, que es 0005. Por
tanto, el dato es 0006.
• 1[.3]: suma el contenido del registro 3 más 1. El registro 3
estaba a 5. Por tanto, el dato está en la dirección de memoria
0006, y es 0005.
• 2[++.2]: incrementa el contenido del registro 2 y se le suma 2.
El registro 2 estaba a 0, se pone a 1 y se le suma 2, quedando
3. Por tanto, el dato está en la dirección de memoria 0003, y es
0000.
42
Lenguaje máquina
Modos de direccionamiento: IEEE 694
43
Lenguaje máquina
Modos de direccionamiento: IEEE 694
Banco de registros Instrucción Resultado
R0 0001
ADD /0002, .3 0006
R1 0002
ADD [0000], #6 0007
R2 0000
SUBSTRACT #6, .1 0004
R3 0005
MULTIPLY /0000, [.3] 000C
Memoria de datos
DIVIDE .3,5[.0++] 0001
0000 0002
0001 0007
AVISO: Los datos están en base 16
0002 0001
0003 0000
0004 0004
0005 0006
0006 0005
0007 0000
44
Lenguaje máquina
Modos de direccionamiento: IEEE 694
ADD /0002, .3: suma el contenido de la dirección de memoria absoluta 0002, que
es 0001, y el contenido del registro 3, que es 0005, resultando 0006.
ADD [0000], #6: suma el contenido de la posición de memoria 0002 (el contenido
de 0000 es 0002), que es 0001 y la constante 0006, resultando 0007.
SUBSTRACT #6, .1: resta de la constante 0006 el contenido del registro 1, que es
0002, quedando 0004.
DIVIDE .3, 5[.0++]: divide el contenido del registro 3, que es 0005, entre el
contenido de la posición de memoria obtenida sumando el contenido del registro 0,
que es 1 (y posteriormente se aumenta), más 5, resultando la dirección 0006, cuyo
contenido es 0005. La división que se realiza es 5/5=1, en binario 0001.
45
Descifra el enigma…
¿Cuál fue el primer computador electrónico?
Banco de registros Instrucción Resultado Letra mensaje
R0 0060 ADD .0 [.3]
0069 E
R1 0080
ADD #20, /0000
R2 0013 0078 N
SUBSTRACT .1, #7 0073 I
R3 0005
MULTIPLY [0002], .2
Memoria de datos 0065 A
0000 0058 DIVIDE [0004], 3[- -.3]
0067 C
0001 0005 AVISO: Los datos están en base 10
0002 0001
0003 0000
0004 0006
0005 0009
0006 0067
0007 0001
46
Lenguaje máquina
Modos de direccionamiento: IEEE 694
ADD .0, [.3]: suma el contenido del registro 0, que es 60, más el contenido de la
dirección de memoria contenida en R3, que es la dirección 0005, cuyo valor es
0009, resultando 0069.
ADD #20,/0000]: suma la constante 0020 más el contenido de la posición de
memoria 0000, que es 0058, resultando 0078.
SUBSTRACT .1,#7: resta de la constante contenida en el registro 1, que es 0080,
la constante 0007, resultando 0073.
MULTIPLY [0002], .3: multiplica el contenido de la dirección de memoria
contenida en 0001 (observar que la posición de memoria 0002 tiene el valor 0001),
que es 0005, por el contenido del registro 2, que es 0013, resultando 0065.
DIVIDE [0004], 3[--.3]: divide el contenido de la dirección de memoria contenida
en 0006 (observar que la posición de memoria 0004 tiene el valor 0006), que es
0067, entre el contenido de la posición de memoria que se obtiene de decrementar
el registro 3, quedando 0004, más 3, lo que da el valor 0007. El contendido de la
posición de memoria 0007 es 1. La división que se realiza es 67/1=67, resultando
0067.
47
Repertorio de instrucciones
Regularidad
Regularidad: El juego de instrucciones no
presenta casos especiales
48
Repertorio de instrucciones
Ortogonalidad
Ortogonalidad: Cualquier instrucción se puede
ejecutar con cualquier tipo de operandos y con
cualquier tipo de direccionamiento
49
Repertorio de instrucciones
Frecuencia de uso de las instrucciones
• Para optimizar el diseño, se han realizado estudios
sobre la frecuencia de uso de las instrucciones:
o Analizan la frecuencia de uso de las
instrucciones y las secuencias más utilizadas
• Dos tipos de estudios:
o Estáticos (lectura del listado de los programas)
o Dinámicos (en tiempo de ejecución)
50
Repertorio de instrucciones
Frecuencia de uso de las instrucciones
51
Repertorio de instrucciones
Frecuencia de uso de las instrucciones
•Conclusiones extraídas del estudio
• Casi el 50% de las instrucciones se dedican a
mover información dentro del computador
• Las bifurcaciones constituyen el segundo grupo
de instrucciones más empleado
• El 50% de las instrucciones de los
computadores se utilizan menos de un 2%,
pero son importantes para aplicaciones
específicas y no se puede prescindir de ellas
52
Repertorio de instrucciones
Filosofías CISC y RISC
• Históricamente, CISC (Complex Instruction Set Computer):
o Al principio las memorias eran lentas y costosa. Había que reducir el
tamaño de los programas
o Pocas instrucciones, pero complejas
o Cada instrucción necesita un número variable y elevado de ciclos de
reloj
• Actualmente, RISC (Reduced Instruction Set Computer):
o Concepto introducido por Hennesy y Patterson en los años 80
o Menos instrucciones y menos modos de direccionamiento
o Instrucciones sencillas
o Ejecución en uno o pocos ciclos de reloj
o Formato fijo para las instrucciones, ejecución regular
o Unidad de control más sencilla
o Aumenta las prestaciones y el rendimiento y reduce el coste
53
Repertorio de instrucciones
Filosofías CISC y RISC
• Tiempo de ejecución de un programa (Tp):
Tp = I x C x Tc
I: número de instrucciones
C: número de ciclos por instrucción (valor medio)
Tc: duración de un ciclo
54
Repertorio de instrucciones
Filosofías CISC y RISC
55
Tipos de las arquitecturas
56
Tipos de las arquitecturas
Arquitecturas basadas en registros
57
Tipos de instrucciones
Ejecución
Captura de la
instrucción
• Leer de memoria
Ejecución
Llevar a cabo la Leer operandos
función de la • Recuperar los
instrucción datos necesarios
58
Tipos de instrucciones
Bits de estado
59
Tipos de instrucciones
60
Tipos de instrucciones
Ruptura del flujo de ejecución
Incondicionales:
goto, jump
1º comprobar
Salto
estado
Condicionales
2º bifurcación según
Llamadas a
la condición: BEQ,
procedimientos
BNE, BLT, BGT,…
Interrupciones y
excepciones
61
Tipos de instrucciones
Llamadas a procedimientos
• Describe la secuencia de pasos que se deben llevar a
cabo cuando se produce una llamada a un
procedimiento mientras se produce una ejecución
– Guardar la dirección de retorno
– Actualizar el contador de programa dos veces (antes y
después del salto)
• Se rompe el flujo de la ejecución de modo que se
necesitan mecanismos adicionales para “recuperar”
el programa principal al finalizar
– Uso de la pila y registros de propósito específico
62
Tipos de instrucciones
Llamadas a procedimientos
63
Tipos de instrucciones
Llamadas a procedimientos: la pila
¿El puntero crece en direcciones
crecientes o decrecientes?
¿Dónde apunta el
Puntero de Pila (Stack CRECIENTES DECRECIENTES
Pointer, SP)?
64
Tipos de instrucciones
Llamadas a procedimientos: la pila
PUSH: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
65
Tipos de instrucciones
Llamadas a procedimientos: la pila
PUSH: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
R1
DATO
66
Tipos de instrucciones
Llamadas a procedimientos: la pila
PUSH: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
R1
DATO
67
Tipos de instrucciones
Llamadas a procedimientos: la pila
POP: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
68
Tipos de instrucciones
Llamadas a procedimientos: la pila
POP: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
R2
DATO
69
Tipos de instrucciones
Llamadas a procedimientos: la pila
POP: CASO 1
El Puntero de Pila (SP) apunta a la cima de la pila.
La pila crece en direcciones crecientes
R2
DATO
70