Está en la página 1de 70

Tema 3: Lenguaje máquina

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?

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?
3
Introducción
Arquitectura -- Organización
• Toda la familia Intel x86 comparte la misma arquitectura
básica.
• La familia de IBM System/370 comparte la misma
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

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

• Realizan una única y sencilla operación

• Utilizan un número fijo de operandos


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

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

Ejecución Captura operandos


llevar a cabo la • Leer operandos
función de la
instrucción

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

COP CD1 CD2 Instrucción de 2 operandos

COP CD Instrucción de 1 operando

COP Instrucción sin operandos

10
Lenguaje máquina
Formatos de instrucción

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

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

• Muchos códigos de operación diferentes


• Muchos modos de direccionamiento diferentes
• Cantidad suficiente de bits para direccionar
toda la memoria
• Registros de la CPU
• Compromiso entre espacio y amplia variedad
del repertorio de instrucciones

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

• COP (sin operandos)


• COP + 1 operando (normalmente una dirección de
memoria)
• 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)

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 Dirección 2 Dirección 3

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

• Supongamos que queremos codificar las


siguientes instrucciones:
– 15 instrucciones con 3 operandos
– 14 instrucciones con 2 operandos
– 31 instrucciones con 1 operando
– 16 instrucciones sin operandos

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

1111 1110 0000 R1


… 31 instrucciones con 1 operando
1111 1111 1110 R1

1111 1111 1111 0000


… 16 instrucciones sin operandos
1111 1111 1111 1111

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

•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.
21
Lenguaje máquina
Formatos de instrucción: codificación por extensión

COP fijo Codificación por


• Instrucciones de tamaño extensión
variable • Instrucciones de tamaño fijo
• Tamaño COP fijo • Tamaño COP variable
• Con n bits se pueden obtener • Extensión en el número de bits
2n COP distintos del COP para instrucciones con
• Ej: Intel, Motorola menor número de operandos
• Ej: PowerPC

22
Lenguaje máquina
Modos de direccionamiento: campos de dirección
Captura de la
instrucción
• Leer de memoria

Guardar resultados Decodificación


• Escribir el resultado • Interpretar qué
en el destino hacer

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?

• Las instrucciones usan modos de


direccionamiento para determinar dónde y
cómo se pueden conseguir los operandos
• Los modos de direccionamiento ayudan a
reducir la complejidad de un programa al
tiempo que aumentan las prestaciones del
procesador

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

COP MODO 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

Requiere pocos bits … …

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

menos bits que en P - 2d-1


el modo absoluto
Operando
• Inconveniente:
Necesita realizar
una suma Rango direccionable P + 2d-1 - 1

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

119 Operando Relativo al


Relativo a Contador de
Memoria principal Programa
Registro Base

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.

• Preincremento, predecremento: Primero se incrementa /


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
+1
RB
CP COP RB CD=16 + 200

217 Operando ALU

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)

Modo Prefijo Ejemplo


Inmediato Prefijo # #valor
Absoluto Prefijo / /dir
Registro Prefijo . .dir
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]

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

• 2[--.1]: decrementa el contenido del registro 1 y se le suma


2. El registro 1 estaba a 2, se pone a 1 y se le suma 2. Por
tanto, el dato está en la dirección de memoria 0003, y es
0000.
• 2[.2++]: suma el contenido del registro 2 más 2 y después
incrementa el registro 2. El registro 2 estaba a 0. Por tanto,
saldrá 2, y el dato está en la dirección de memoria 0002, y
es 0001.
• 2[.1--]: suma el contenido del registro 1 más 2 y después
se decrementa el registro 1. El registro 1 estaba a 2. Por
tanto, el dato está en la dirección de memoria 0004, y es
0004.

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.

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

• Es más fácil programar arquitecturas


regulares

• Permite diseñar compiladores más


sencillos y eficaces

48
Repertorio de instrucciones
Ortogonalidad
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


número de mnemónicos

• Proporciona simplicidad y claridad al


programador

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

CISC: Minimiza I, a costa de incrementar C

RISC: Minimiza C, a costa de incrementar I

54
Repertorio de instrucciones
Filosofías CISC y RISC

Busca en Internet los siguientes conceptos


• CISC (Complex Instruction Set Computer)
• RISC (Reduced Instruction Set Computer)

¿Cuáles son sus principales características?


¿En qué se diferencian?
¿Puedes poner un ejemplo de procesador para
cada uno de ellos?

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

56
Tipos de las arquitecturas
Arquitecturas basadas en registros

• Registro-registro (load-store): operandos y


resultado en registros
• Acceso a memoria mediante instrucciones de
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

57
Tipos de instrucciones
Ejecución
Captura de la
instrucción
• Leer de memoria

Guardar resultado Decodificación


• Escribir el • Interpretar qué
resultado en el hacer
destino

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

• 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
STATUS, (Status Register, SR)
• Ejemplos:
• Cero, Acarreo, Signo,…

59
Tipos de instrucciones

• Aritméticas / lógicas / desplazamiento


• Transferencia de datos
• Comparación / condicional
• Transferencia de control
• Entrada / salida

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

DATO EN LA CIMA CASO 1 CASO 2


DE LA PILA
DATO ENCIMA DE
LA CIMA DE LA CASO 3 CASO 4
PILA

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

1008 Puntero de Pila (SP=1008)


1007
1006
1005
1004
1003
PILA

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

1008 Puntero de Pila (SP=1008)


1007
1006
1005
PUSH .1: Para escribir en la pila:
1004
1003 primero, el SP se incrementa
PILA

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

1009 DATO Puntero de Pila (SP=1009)


1008
1007
PUSH .1: Para escribir en la pila:
1006
1005 primero, el SP se incrementa y
1004 después el dato se escribe en la dirección del SP
1003
PILA

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

1009 DATO Puntero de Pila (SP=1009)


1008
1007
1006
1005
1004
1003
PILA

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

1009 DATO Puntero de Pila (SP=1009)


1008
1007
POP .2: Para leer de la pila:
1006
1005 primero, se lee el contenido del SP
1004
1003
PILA

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

1008 Puntero de Pila (SP=1008)


1007
1006
1005 POP .2: Para leer de la pila:
1004 primero, se lee el contenido del SP y
1003 después se decrementa el SP
PILA

70

También podría gustarte