Tema3 Transparencias.ppt [Modo de...
Transcript of Tema3 Transparencias.ppt [Modo de...
Tema 3: Lenguaje máquina y Lenguaje ensamblador
1
y Lenguaje ensamblador
Índice• Introducción
• Lenguaje máquina
• Formatos de Instrucción
• Modos de Direccionamiento
• Regularidad
• Repertorio de instrucciones
2
• 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
Introducció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
Arquitectura -- Organización
3
• Modelos de ejecuciónEj: ¿Hay una instrucción de multiplicar?
Organización de un sistema (transparente al programador)• Sistemas de interconexión y control• Interfaz entre el computador y los periféricos• Tecnologías utilizadas
Ej: ¿Hay un multiplicador, o se hace por sumas repetidas?
• Toda la familia Intel x86 comparte la misma arquitectura básica.• La familia de IBM System/370 comparte la misma arquitectura básica.
Arquitectura -- Organización
Introducción
4
arquitectura básica.
Esto proporciona compatibilidad de código (al menos hacia atrás). La organización varía en las diferentes versiones dentro de una misma arquitectura básica
¿Qué debe conocer el programador a bajo nivel?
Introducción
Un poco de hardware: algunos detalles sobre
5
* Curso de Arquitectura. Universidad Politécnica de Madrid
detalles sobre la CPU, cómo son y qué tamaños tienen los registros (PC, SP,.. ) , la cantidad de memoria, etc…
Mnemotécnico Código Máquina
move #2, R2 11000111 (C7h)
add R2, R3 00110110 (36h)
…
…
Repertorio de instrucciones
Introducción
Un poco de software: repertorio de instrucciones, organización de la pila si la hubiera, etc…
6
…
sub #1, R2 01100110 (66h)
Pila (LIFO)
Lenguaje máquina
• Lenguaje de bajo nivel (código binario)
• Muestra las capacidades básicas del
computador
7
• La característica más importante de la
arquitectura de un computador
• Depende del computador, lo que crea
incompatibilidades entre distintos computadores
• Realizan una única y sencilla operación
• Utilizan un número fijo de operandos
representados de una determinada forma
Formatos de instrucción: Instrucciones máquina
Lenguaje máquina
8
representados de una determinada forma
• Codificación sistemática Decodificación sencilla
Hardware sencillo Menos coste
• Son autocontenidas e independientes, y contienen
toda la información necesaria para ejecutarse
Formatos de instrucción: Ciclo de instrucción
Lenguaje máquina
9
• 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
Formatos de instrucción
Lenguaje máquina
10
COP CD2CD1
COP CD
COP
Instrucción de 1 operando
Instrucción de 2 operandos
Instrucción sin operandos
Formatos de instrucción
Lenguaje máquina
• Los formatos de instrucción se diferencian en:• Almacenamiento de los operandos (pila, registros, o ambos)• Número de operandos explícitos por instrucción (lo más
habitual es que sean 1, 2 o 3)
11
• Localización del operando (registro a registro, registro a memoria, o memoria a memoria)
• Operaciones (por ejemplo, qué instrucciones tienen acceso a memoria)
• Tipos y tamaños de los operandos (los operandos pueden ser direcciones, números o caracteres)
• 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
Formatos de instrucción: decisiones de diseño
Lenguaje máquina
12
• 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)
• Muchos códigos de operación diferentes
• Muchos modos de direccionamiento diferentes
• Cantidad suficiente de bits para direccionar toda la memoria
Formatos de instrucción: diseño del formato
Lenguaje máquina
13
toda la memoria
• Registros de la CPU
• Compromiso entre espacio y amplia variedad del repertorio de instrucciones
Formatos de instrucción: código de operación
Lenguaje máquina
14
• Longitud fija
– Gasta espacio de memoria
– Mejores prestaciones en la fase de decodificación
– Se usan normalmente pocos tamaños de instrucción
Formatos de instrucción: técnicas de codificación
Lenguaje máquina
15
• 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
• COP (sin operandos)
• COP + 1 operando (normalmente una dirección de memoria)
• COP + 2 operandos (normalmente registros o
Formatos de instrucción: formatos típicos
Lenguaje máquina
16
• COP + 2 operandos (normalmente registros o direcciones de memoria y registros)
• COP + 3 operandos (normalmente registros o combinación de direcciones de memoria y registros)
• 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
Formatos de instrucción: codificación por extensión
Lenguaje máquina
17
– Se podrían usar 4 bits para el COP y 12 bits para la dirección de memoria
COP Dirección 1
COP Dirección 1
Dirección 2 Dirección 3
xx xx xx xxCOP CD1 CD2 CD3
11 11 11 11 xx xx xx xxCOP CD1 CD2
1 combinación librei.e.: 1111
2 combinaciones libres
Formatos de instrucción: codificación por extensión
Lenguaje máquina
18
11 11 11 11 11 11 11 xx xx xx xx xxCOP CD
11 11 11 11 11 11 11 11 11 11 11 11 xx xx xx xxCOP
2 combinaciones libresi.e.: 111X
1 combinación librei.e.: 1111
• Supongamos que queremos codificar las siguientes instrucciones:
– 15 instrucciones con 3 operandos
– 14 instrucciones con 2 operandos
Formatos de instrucción: codificación por extensión
Lenguaje máquina
19
– 14 instrucciones con 2 operandos
– 31 instrucciones con 1 operando
– 16 instrucciones sin operandos
0000 R1 R2 R3
...
1110 R1 R2 R3
1111 0000 R1 R2
…
1111 1101 R1 R2
15 instrucciones con 3 operandos
14 instrucciones con 2 operandos
Formatos de instrucción: codificación por extensión
Lenguaje máquina
20
1111 1101 R1 R2
1111 1110 0000 R1
…
1111 1111 1110 R1
1111 1111 1111 0000
…
1111 1111 1111 1111
31 instrucciones con 1 operando
16 instrucciones sin operandos
00 00 00 00COP CD1 CD2 CD3
11 11 11 11 11 11 11 00 00 00 00 00COP CD
15 instrucciones con 3 direcciones 31 instrucciones con 1 dirección
11 11 11 00
… …
11 11 11 11 11 11 11 11 11 11 11 00
Formatos de instrucción: codificación por extensión
Lenguaje máquina
21
11 11 11 11 00 00 00 00COP CD1 CD2
11 11 11 11 11 11 11 11 11 11 11 11 00 00 00 00COP
16 instrucciones sin dirección14 instrucciones con 2 direcciones
11 11 11 11 11 11 00 11
… …
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
•La codificación por extensión permite 76 instrucciones en vez de las 16 que se obtendrían con un COP fijo de 4 bits y 3 direcciones.
COP fijo
• Instrucciones de tamaño
variable
Codificación por
extensión
• Instrucciones de tamaño fijo
Formatos de instrucción: codificación por extensión
Lenguaje máquina
22
• Tamaño COP fijo
• Con n bits se pueden obtener
2n COP distintos
• Ej: Intel, Motorola
• Tamaño COP variable
• Extensión en el número de bits
del COP para instrucciones con
menor número de operandos
• Ej: PowerPC
Modos de direccionamiento: campos de direcciónLenguaje máquina
23
• Las instrucciones usan modos de direccionamiento para determinar dónde y cómo se pueden conseguir los operandos
• Los modos de direccionamiento ayudan a
Modos de direccionamiento: ¿dónde están los operandos?
Lenguaje máquina
24
• Los modos de direccionamiento ayudan a reducir la complejidad de un programa al tiempo que aumentan las prestaciones del procesador
• 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
Modos de direccionamiento: ¿dónde están los operandos?
Lenguaje máquina
25
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
En una instrucción:•Rápido y simple •Sólo válido para constantes•No válido para resultados
En memoria:
Lenguaje máquinaVentajas e inconvenientes de guardar un dato en cada uno de los siguientes lugares a efectos de ejecutar la instrucción:
26
En memoria:•Gran capacidad •Lento•Se necesitan muchos bits para determinar la posición
En un registro de la CPU:•Rápido•Se necesitan pocos bits para determinar el registro•Escasez de registros•Se necesita cargar el registro
• 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
Modos de direccionamiento: implícito
Lenguaje máquina
27
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)
• 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.
Modos de direccionamiento: inmediato
Lenguaje máquina
28
A
ALU
Memoria principal
COP CD=1000CP
COP MODO INMEDIATO
MOVE #9,D2 ???? ????
D2
Modos de direccionamiento: inmediato
Lenguaje máquina
29
MOVE #9,D2 ???? ????
0000 0009
D2
Antes
Después
Modos de direccionamiento: directo o absoluto
Lenguaje máquina
• 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
30
Ejemplo (i8085): Instrucción LDA 1000, carga el contenido de la posición 1000 de la memoria en el acumulador A
ALU
Memoria principal
COP CD=1000
Operando1000
CP
INC R2
Modos de direccionamiento: directo a registro
Lenguaje máquina
• 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
31
INC R2
COP 0010 (2h)Registros de la CPU
R1
R2 Operando
R3
R4
… …
Rn
Valores temporales o muy referenciadosSin referencias a memoriaRequiere pocos bitsPocos registros
COP CD P+d bits
PunteroCP
• La instrucción no contiene la dirección, sino undesplazamiento D para sumar a la dirección de un puntero
• Ventaja: Necesita menos bits que en
Modos de direccionamiento: relativo
Lenguaje máquina
32
Memoria principal
Rango direccionable
Operando
P - 2d-1
P + 2d-1 - 1
menos bits que en el modo absoluto
• Inconveniente:Necesita realizar una suma
• 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
Modos de direccionamiento: relativo
Lenguaje máquina
33
estructuras de datos, esquemas de protección de memoria, ...
• Según el puntero, existen diversas variantes:• Contador de programa (PC)• Registro base• Pila
COP CD=16
Operando
103+CP
119
102
103
Relativo al
Modos de direccionamiento: relativo
Lenguaje máquina
34
Memoria principal
COP CD=16
Operando
200+RBRB
216
CP
Memoria principal
Operando119Relativo a Registro Base
Relativo al Contador de Programa
RB
Indexado: Se utiliza un registro índice y undesplazamiento, que se especifica medianteregistro.
Modos de direccionamiento: relativo
Lenguaje máquina
35
Memoria principal
COP RB
Operando
200
+
RiRB
216
CP
16Ri
• Auto-incremento: El contenido del registro base o índicepuede modificarse para recorrer los elementos de un vector.
• Preincremento, predecremento: Primero se incrementa /decrementa el RB y después se resuelve la dirección
Modos de direccionamiento: relativo
Lenguaje máquina
36
Memoria principal
COP CD=16
Operando
200+RBRB
ALU
+1
217
CP
decrementa el RB y después se resuelve la dirección• Postincremento, postdecremento: Primero se resuelve la
dirección y después se incrementa / decrementa el RB
COP CD=100CP
La instrucción indica la dirección de memoria o el registro que contiene la dirección del operando
No es necesario saber la
Modos de direccionamiento: indirecto
Lenguaje máquina
37
Memoria principal
Dir. Operando=200
Operando
100
200
No es necesario saber la dirección del dato al generar el código
Necesita varios accesos a memoria
Modo Prefijo Ejemplo
Inmediato Prefijo # #valor
Absoluto Prefijo / /dir
Registro Prefijo . .dir
IEEE 694 (1985). Standard for Microprocessor Assembly Language(Estándar para el lenguaje ensamblador de microprocesadores)
Modos de direccionamiento: IEEE 694Lenguaje máquina
38
Página base Prefijo ! !dir
Relativo a Registro Base [ ] despl[.reg] ó [.reg,desp]
Relativo a PC Prefijo $ $dir
Con autopreincremento Prefijo ++ ++dir
Con autopredecremento Prefijo - - - -dir
Con autopostincremento Sufijo ++ dir++
Con autopostdecremento Sufijo - - dir- -
Indirecto [ ] [dir]
Direcciona-miento
Tipo Operando
#6 Inmediato
/0002 Absoluto a memoria
[0001] Indirecto a memoria
.3 Absoluto a registro
Banco de registros
R0 0001
R1 0002
R2 0000
R3 0005
Memoria de datos
0000 0002
Modos de direccionamiento: IEEE 694Lenguaje máquina
0006
0001
0000
0005
39
[.3] Indirecto a registro
1[.3] ó [.3,1] Relativo a Registro Base
2[++.2] Relativo Reg. con preinc
2[- -.1] Relativo Reg. con predec
2[.2++] Relativo Reg. con postinc
2[.1- -] Relativo Reg. con postdec
0000 0002
0001 0007
0002 0001
0003 0000
0004 0004
0005 0006
0006 0005
0007 0000
0005
0006
00050000
0000
0001
0004
• #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
Modos de direccionamiento: IEEE 694Lenguaje máquina
40
• [.3]: en el registro 3 está la dirección del dato, que es 0005. Portanto, el dato es 0006.
• 1[.3]: suma el contenido del registro 3 más 1. El registro 3estaba a 5. Por tanto, el dato está en la dirección de memoria0006, 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, quedando3. Por tanto, el dato está en la dirección de memoria 0003, y es0000.
• 2[--.1]: decrementa el contenido del registro 1 y se le suma2. El registro 1 estaba a 2, se pone a 1 y se le suma 2. Portanto, el dato está en la dirección de memoria 0003, y es0000.
• 2[.2++]: suma el contenido del registro 2 más 2 y después
Modos de direccionamiento: IEEE 694Lenguaje máquina
41
• 2[.2++]: suma el contenido del registro 2 más 2 y despuésincrementa el registro 2. El registro 2 estaba a 0. Por tanto,saldrá 2, y el dato está en la dirección de memoria 0002, yes 0001.
• 2[.1--]: suma el contenido del registro 1 más 2 y después sedecrementa el registro 1. El registro 1 estaba a 2. Por tanto,el dato está en la dirección de memoria 0004, y es 0004.
Instrucción Resultado
ADD /0002, .3
ADD [0000], #6
SUBSTRACT #6, .1
MULTIPLY /0000, [.3]
DIVIDE .3,5[.0++]
Banco de registros
R0 0001
R1 0002
R2 0000
R3 0005
Memoria de datos
0000 0002
00060007
0004
000C0001
Modos de direccionamiento: IEEE 694Lenguaje máquina
42
DIVIDE .3,5[.0++]0000 0002
0001 0007
0002 0001
0003 0000
0004 0004
0005 0006
0006 0005
0007 0000
AVISO: Los datos están en base 16
0001
ADD /0002, .3: suma el contenido de la dirección de memoria absoluta 0002, quees 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 contenidode 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 es0002, quedando 0004.
Modos de direccionamiento: IEEE 694Lenguaje máquina
43
0002, quedando 0004.
MULTIPLI /0000, [.3]: multiplica el contenido de la dirección de memoria 0000,que es 0002, por el contenido de la posición de memoria contenida en el registro 3,que es 0006, resultando 000C.
DIVIDE .3, 5[.0++]: divide el contenido del registro 3, que es 0005, entre elcontenido 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, cuyocontenido es 0005. La división que se realiza es 5/5=1, en binario 0001.
Descifra el enigma…¿Cuál fue el primer computador electrónico?
Instrucción Resultado Letra mensaje
ADD .0 [.3]
ADD #20, /0000
SUBSTRACT .1, #7
MULTIPLY [0002], .2
Banco de registros
R0 0060
R1 0080
R2 0013
R3 0005
Memoria de datos
0000 0058
0069 E
0078 N
0073 I
0065 A
44
DIVIDE [0004], 3[- -.3]0000 0058
0001 0005
0002 0001
0003 0000
0004 0006
0005 0009
0006 0067
0007 0001
AVISO: Los datos están en base 10
0067 C
ADD .0, [.3]: suma el contenido del registro 0, que es 60, más el contenido de ladirección de memoria contenida en R3, que es la dirección 0005, cuyo valor es0009, resultando 0069.ADD #20,/0000]: suma la constante 0020 más el contenido de la posición dememoria 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
Modos de direccionamiento: IEEE 694Lenguaje máquina
45
MULTIPLY [0002], .3: multiplica el contenido de la dirección de memoriacontenida 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 contenidaen 0006 (observar que la posición de memoria 0004 tiene el valor 0006), que es0067, entre el contenido de la posición de memoria que se obtiene de decrementarel registro 3, quedando 0004, más 3, lo que da el valor 0007. El contendido de laposición de memoria 0007 es 1. La división que se realiza es 67/1=67, resultando0067.
Regularidad: El juego de instrucciones no presenta casos especiales
• Es más fácil programar arquitecturas
RegularidadRepertorio de instrucciones
46
• Es más fácil programar arquitecturas regulares
• Permite diseñar compiladores más sencillos y eficaces
Ortogonalidad: Cualquier instrucción se puede ejecutar con cualquier tipo de operandos y con cualquier tipo de direccionamiento
• Gran número de instrucciones con un pequeño
OrtogonalidadRepertorio de instrucciones
47
• Gran número de instrucciones con un pequeño número de mnemónicos
• Proporciona simplicidad y claridad al programador
• 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
Frecuencia de uso de las instrucciones
Repertorio de instrucciones
48
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)
Otras 2%
Comparación y despl. 15%
Aritmética entera 7%Bifurcación 30%
Aritmética real 3%
Estudio de Fairclough (estático)Frecuencia de uso de las instrucciones
Repertorio de instrucciones
49
Aritmética real 3%
Transferencia 43%
Lógicas 4%
E/S 1%
Salto 29%De bit 2%
Comparación 6%
Desplazamiento 3%
Transferencia 45%
Estudio de Flynn (dinámico)
•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
Frecuencia de uso de las instrucciones
Repertorio de instrucciones
50
• 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
• 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 programaso Pocas instrucciones, pero complejaso Cada instrucción necesita un número variable y elevado de ciclos de
reloj
Filosofías CISC y RISCRepertorio de instrucciones
51
reloj
• Actualmente, RISC (Reduced Instruction Set Computer):o Concepto introducido por Hennesy y Patterson en los años 80o Menos instrucciones y menos modos de direccionamientoo Instrucciones sencillaso Ejecución en uno o pocos ciclos de relojo Formato fijo para las instrucciones, ejecución regularo Unidad de control más sencillao Aumenta las prestaciones y el rendimiento y reduce el coste
• Tiempo de ejecución de un programa (Tp):
I: número de instrucciones
Tp = I x C x Tc
Repertorio de instruccionesFilosofías CISC y RISC
52
I: número de instruccionesC: número de ciclos por instrucción (valor medio)Tc: duración de un ciclo
CISC: Minimiza I, a costa de incrementar C
RISC: Minimiza C, a costa de incrementar I
Busca en Internet los siguientes conceptos
• CISC (Complex Instruction Set Computer)
• RISC (Reduced Instruction Set Computer)
Repertorio de instruccionesFilosofías CISC y RISC
53
¿Cuáles son sus principales características?
¿En qué se diferencian?
¿Puedes poner un ejemplo de procesador para cada uno de ellos?
Tipos de las arquitecturas
• Según los criterios de localización y especificación de los operandos:
• Basadas en pila: operandos implícitos y se encuentran en la pila
54
encuentran en la pila
• Basadas en acumulador: uno de los operandos se encuentra de manera implícita en el acumulador
• Basadas en registros de propósito general:operandos explícitos en registros y memoria
• Registro-registro (load-store): operandos y resultado en registros
• Acceso a memoria mediante instrucciones de carga (load) y almacenamiento (store)
Tipos de las arquitecturasArquitecturas basadas en registros
55
carga (load) y almacenamiento (store)
• Registro-memoria: cualquier instrucción puede acceder a memoria con uno de sus operandos
• Memoria-memoria (en desuso): todos las instrucciones acceden a memoria
Tipos de instruccionesEjecución
56
• Información de la ejecución de una instrucción
• Se activan si se ha cumplido la condición correspondiente
• Se agrupan en un registro de ESTADO o
Tipos de instruccionesBits de estado
57
• Se agrupan en un registro de ESTADO o STATUS, (Status Register, SR)
• Ejemplos:
• Cero, Acarreo, Signo,…
• Aritméticas / lógicas / desplazamiento
• Transferencia de datos
• Comparación / condicional
Tipos de instrucciones
58
• Comparación / condicional
• Transferencia de control
• Entrada / salida
Tipos de instruccionesRuptura del flujo de ejecución
59
• 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
Tipos de instruccionesLlamadas a procedimientos
60
– 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
Tipos de instruccionesLlamadas a procedimientos
61
¿El puntero crece en direcciones crecientes o decrecientes?
¿Dónde apunta el Puntero de Pila (Stack Pointer, SP)?
CRECIENTES DECRECIENTES
Tipos de instruccionesLlamadas a procedimientos: la pila
62
DATO EN LA CIMA DE LA PILA
CASO 1 CASO 2
DATO ENCIMA DE LA CIMA DE LA PILA (FUERA PILA)
CASO 3 CASO 4
PUSH: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
Tipos de instruccionesLlamadas a procedimientos: la pila
63
Puntero de Pila (SP=1008)100810071006100510041003
PILAINICIAL
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
64
PUSH .1: Para escribir en la pila:primero se incrementa el SP
Puntero de Pila (SP=1009)100810071006100510041003
PILA
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
65
100810071006100510041003
PILAFINAL
Puntero de Pila (SP=1009)
PUSH .1:y después se introduce el dato en la dirección del SP
DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
66
100810071006100510041003
PILAINICIAL
Puntero de Pila (SP=1009)DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
67
100810071006100510041003
PILA
Puntero de Pila (SP=1009)
POP .2: Para leer de la pila:primero se extrae el dato de ladirección del SP
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 1El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones crecientes
68
100810071006100510041003
PILAFINAL
Puntero de Pila (SP=1008)
POP .2:y después se decrementa el SP
PUSH: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
Tipos de instruccionesLlamadas a procedimientos: la pila
69
Puntero de Pila (SP=1008)10081009100A100B100C100D
PILAINICIAL
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
70
PUSH .1: Para escribir en la pila:primero se decrementa el SP
Puntero de Pila (SP=1007)10081009100A100B100C100D
PILA
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
71
10081009100A100B100C100D
PILAFINAL
Puntero de Pila (SP=1007)
PUSH .1:y después se introduce el dato en la dirección del SP
DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
72
10081009100A100B100C100D
PILAINICIAL
Puntero de Pila (SP=1007)DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
73
10081009100A100B100C100D
PILA
Puntero de Pila (SP=1007)
POP .2: Para leer de la pila:primero se extrae el dato de ladirección del SP
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 2El Puntero de Pila (SP) apunta a la cima de la pila. La pila se llena en direcciones decrecientes
74
10081009100A100B100C100D
PILAFINAL
Puntero de Pila (SP=1008)
POP .2:y después se incrementa el SP
PUSH: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
Puntero de Pila (SP=1009)
Tipos de instruccionesLlamadas a procedimientos: la pila
75
Puntero de Pila (SP=1009)100810071006100510041003
PILAINICIAL
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
Puntero de Pila (SP=1009)
76
PUSH .1: Para escribir en la pila:primero se introduce el dato en la dirección del SP
100810071006100510041003
PILA
Puntero de Pila (SP=1009)DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
Puntero de Pila (SP=100A)
77
1009100810071006100510041003
PILAFINAL
DATO
PUSH .1:y después se incrementa el SP
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
Puntero de Pila (SP=100A)
78
1009100810071006100510041003
PILAINICIAL
DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
79
POP .2: Para leer de la pila:primero se decrementa el SP
PILA
Puntero de Pila (SP=1009)DATO
100810071006100510041003
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 3El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones crecientes
80
PILAFINAL
Puntero de Pila (SP=1009)100810071006100510041003
POP .2:y después se extrae el dato de ladirección del SP
PUSH: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
Puntero de Pila (SP=1007)
Tipos de instruccionesLlamadas a procedimientos: la pila
81
Puntero de Pila (SP=1007)10081009100A100B100C100D
PILAINICIAL
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
Puntero de Pila (SP=1007)
82
PUSH .1: Para escribir en la pila:primero se introduce el dato en la dirección del SP
10081009100A100B100C100D
PILA
Puntero de Pila (SP=1007)DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
PUSH: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
Puntero de Pila (SP=1006)
83
100710081009100A100B100C100D
PILAFINAL
DATO
PUSH .1:y después se decrementa el SP
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
Puntero de Pila (SP=1006)
84
100710081009100A100B100C100D
PILAINICIAL
DATO
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
85
POP .2: Para leer de la pila:primero se incrementa el SP
PILA
Puntero de Pila (SP=1007)DATO100710081009100A100B100C100D
Tipos de instruccionesLlamadas a procedimientos: la pila
POP: CASO 4El Puntero de Pila (SP) apunta fuera de la pila. La pila se llena en direcciones decrecientes
86
PILAFINAL
Puntero de Pila (SP=1007)10081009100A100B100C100D
POP .2:y después se extrae el dato de ladirección del SP