Pontificia Universidad Católica de Chile
Escuela de Ingeniería
Departamento de Ciencia de la Computación
Arquitectura de Computadores
Clase 13
Subrutinas y Manejo de Stack
IIC 2342
Semestre 2008-2
Rubén Mitnik
Objetivos
Capítulo 4 : Unidad de Procesamiento Central (CPU)
Objetivos

Entender cómo se implementan las funciones de alto nivel
como subrutinas en bajo nivel.

Entender la lógica del paso de parámetros, retorno de
resultados, y almacenamiento de direcciones de retorno en
subrutinas.
R.Mitnik
2
Arquitectura de Computadores
Índice
Capítulo 4 : Unidad de Procesamiento Central (CPU)
4.1 Partes de la CPU.
4.2 Conjunto de Instrucciones y tipos de
funcionalidad.
4.3 Ciclo de la Instrucción.
4.4 Diseño de una CPU básica.
4.5 Modos de direccionamiento.
4.6 Instrucciones en lenguaje de máquina.
4.7 Subrutinas y Manejo de Stack.
4.8 Interrupciones de software y hadware.
4.9 CISC/RISC.
R.Mitnik
3
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
¿ Cómo implementamos funciones a bajo nivel?

Subrutinas

R.Mitnik
Trozos de código con funcionalidad
predeterminada
4
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función

Código de su implementación

Dirección de retorno

Parámetros
Retornar resultados

R.Mitnik
5
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función

Código de su implementación

Dirección de retorno

Parámetros
Retornar resultados

R.Mitnik
6
Arquitectura de Computadores
Codigo de implementación: Precauciones
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Datos y resultado
Instrucciones
As s embler
label ins tr param
B R A s tart
mult1
mult2
res ult
zero
one
s tart L D A zero
S T A res ult
label1 L D A mult2
AND one
B E Q label2
L D A res ult
AD D mult1
S T A res ult
label2 L D A mult2
SRA
B NE label3
R TS
label3 S T A mult2
L D A mult1
S LA
S T A mult1
B R A label1
Inicio subrutina
¿Qué pasa si el programa
principal estaba utilizando el
registro Ac?
Solución: Se usa el Stack (pila)
Push Ac // guarda Ac en la pila
LDA zero
…
Pop Ac // recupera el valor de Ac de la pila
RTS
kaput!!
Salida de subrutina
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función
Código de su implementación





R.Mitnik
Kaput!
Dirección de retorno
Parámetros
Retornar resultados
8
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función




R.Mitnik
Código de su implementación
Dirección de retorno
Parámetros
Retornar resultados
9
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función
Código de su implementación
Dirección de retorno






R.Mitnik
Registros
Stack
Parámetros
Retornar resultados
10
Arquitectura de Computadores
Dirección de retorno
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
Registros




Al llamar a una subrutina se carga un registro con la
dirección de retorno de ésta.
Al retornar, carga el Program Counter (o Instruction
Pointer) con el valor de dicho registro.
Desventajas

Se dificulta la anidación de subrutinas

Se dificulta la implementación de funciones recursivas

Pierdo utilización de un registro
Ventajas

Simpleza
R.Mitnik
11
Arquitectura de Computadores
Dirección de retorno
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
Stack




Al llamar a una subrutina hago PUSH del valor del
Program Counter (o Instruction Pointer)
Al retornar, hace POP del valor almacenado
cargándolo de vuelta en el Program Counter.
Desventajas

Requiere manejar el stack
Ventajas

Anidación de subrutinas (incluso recursivas) se logra
de manera transparente.
R.Mitnik
12
Arquitectura de Computadores
Dirección de retorno por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Qué ocurre al llamar
una subrutina?
F3h
A0h
A1h
Program
Counter
F4h
A2h
F5h
A3h
CALL SUB
F6h
A4h
Next Instr.
F7h
A5h
F8h
A6h
F9h
A7h
FAh
FBh
FCh
A4h
FDh
Stack Pointer
C2h
Subroutine
###
C3h
Code
FEh
###
C4h
…
FFh
###
C5h
…
Stack
C6h
Return
R.Mitnik
13
Arquitectura de Computadores
Dirección de retorno por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Qué ocurre al volver
de una subrutina?
F3h
A0h
A1h
Program
Counter
F4h
A2h
F5h
A3h
CALL SUB
F6h
A4h
Next Instr.
F7h
A5h
F8h
A6h
F9h
A7h
FAh
FBh
FCh
A4h
FDh
Stack Pointer
C2h
Subroutine
###
C3h
Code
FEh
###
C4h
…
FFh
###
C5h
…
Stack
C6h
Return
R.Mitnik
14
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función




R.Mitnik
Código de su implementación
Dirección de retorno
Parámetros
Retornar resultados
15
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función
Código de su implementación
Dirección de retorno
Parámetros






R.Mitnik
Registros
Stack
Retornar resultados
16
Arquitectura de Computadores
Paso de parámetros
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
Registros




Antes de llamar a subrutina cargo registros con los
parámetros

Debo conocer que registros ocupa la subrutina
La subrutina lee los registros
Desventajas

Número limitado de registros
Ventajas

Rapidez

Simpleza
R.Mitnik
17
Arquitectura de Computadores
Paso de parámetros
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
Stack

Antes de llamar a subrutina hago PUSH de los
parámetros

Debo saber en que orden mandarlos

Desventajas

Complejo

Requiere mayor coordinación
Ventajas

Mayor espacio

R.Mitnik
18
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo paso los
parámetros a una
subrutina?
F3h
Program
Counter
A0h
A1h
PUSH A
A2h
PUSH B
F5h
A3h
CALL SUB
F6h
A4h
POP
A5h
POP
A6h
Next Instr.
F4h
F7h
Stack
Pointer
F8h
F9h
A7h
FAh
A4h
FBh
B
FCh
A
FDh
###
FEh
###
FFh
###
Stack
R.Mitnik
¿Cómo accedo a los
parámetros en la
subrutina?
No puedo usar “POP”
 Hay que direccionar
Ej: (SP+2) obtengo B
(SP+3) obtengo A
19
C2h
Subroutine
C3h
Code
C4h
…
C5h
…
C6h
Return
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo paso los
parámetros a una
subrutina?
F3h
Program
Counter
A0h
A1h
PUSH A
A2h
PUSH B
F5h
A3h
CALL SUB
F6h
A4h
POP
A5h
POP
A6h
Next Instr.
F4h
F7h
F8h
dato
F9h
dato
FAh
A4h
FBh
B
FCh
A
FDh
###
FEh
###
FFh
###
Stack
Pointer
A7h
¿Qué pasa si hago
otros PUSH en la
subrutina?
Cambia el direccionamiento
Ej: (SP+4) obtengo B
(SP+5) obtengo A
Stack
R.Mitnik
20
C2h
Subroutine
C3h
Code
C4h
…
C5h
…
C6h
Return
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo paso los
parámetros a una
subrutina?
F3h
F4h
F5h
F6h
Stack
Pointer
F7h
A0h
A1h
PUSH A
A2h
PUSH B
A3h
CALL SUB
A4h
POP
A5h
POP
Next Instr.
F8h
dato
A6h
F9h
dato
A7h
FAh
A4h
FBh
B
FCh
A
FDh
###
FEh
###
FFh
###
Stack
R.Mitnik
¿Qué pasa si en la
subrutina hago
if(condición) PUSH;?
Program
Counter
C2h
Subroutine
Perdí el direccionamiento
Ej: (SP+???) obtengo B
(SP+???) obtengo A
C3h
Code
C4h
…
C5h
…
Usamos otro puntero
 Base Pointer (registro)
C6h
Return
21
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo paso los
parámetros a una
subrutina?
F3h
F4h
F5h
F7h
dato
F8h
dato
F9h
FFh
FAh
A4h
FBh
B
FCh
A
FDh
###
FEh
###
FFh
###
Stack
R.Mitnik
PUSH A
A2h
PUSH B
A3h
CALL SUB
A4h
POP
A5h
POP
de la subrutina
actual
A6h
Next Instr.
Frame (marco)
C2h
Subroutine
de la subrutina
anterior
C3h
Code
C4h
…
C5h
…
C6h
Return
Frame (marco)
Base
Pointer
Direccionamos por BP
Ej: (BP+2) obtengo B
(BP+3) obtengo A
22
A0h
A1h
Stack
Pointer
F6h
Program
Counter
A7h
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo paso los
parámetros a una
subrutina?
F3h
Program
Counter
A0h
A1h
PUSH A
A2h
PUSH B
A3h
CALL SUB
A4h
POP
F7h
A5h
POP
F8h
A6h
Next Instr.
F4h
F5h
Stack
Pointer
F6h
F9h
FFh
FAh
A4h
FBh
B
FCh
A
C2h
Subroutine
FDh
###
C3h
Code
FEh
###
C4h
…
FFh
###
C5h
…
C6h
Return
Stack
R.Mitnik
A7h
Base
Pointer
23
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo retorno de la
subrutina?
F3h
F4h
Stack
Pointer
F5h
F6h
SP = BP-1
POP BP
// BP = (SP)
POP PC
// PC = (SP)
Program
Counter
A0h
A1h
PUSH A
A2h
PUSH B
A3h
CALL SUB
A4h
POP
A5h
POP
Next Instr.
F7h
dato
F8h
dato
A6h
F9h
FFh
A7h
FAh
A4h
FBh
B
FCh
A
C2h
Subroutine
FDh
###
C3h
Code
FEh
###
C4h
…
FFh
###
C5h
…
C6h
Return
Stack
R.Mitnik
Base
Pointer
24
Arquitectura de Computadores
Paso de parámetros por Stack
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas
¿Cómo retorno de la
subrutina?
F3h
Program
Counter
A0h
A1h
PUSH A
A2h
PUSH B
A3h
CALL SUB
A4h
POP
A5h
POP
F8h
A6h
Next Instr.
F9h
A7h
F4h
Stack
Pointer
F5h
F6h
F7h
SP = BP-1
POP BP
// BP = (SP)
POP PC
// PC = (SP)
FAh
FBh
FCh
C2h
Subroutine
FDh
###
C3h
Code
FEh
###
C4h
…
FFh
###
C5h
…
C6h
Return
Stack
R.Mitnik
Base
Pointer
25
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función




R.Mitnik
Código de su implementación
Dirección de retorno
Parámetros
Retornar resultados
26
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función
Código de su implementación
Dirección de retorno
Parámetros
Retornar resultados





R.Mitnik
Registros
27
Arquitectura de Computadores
Subrutinas
Capítulo 4 : Unidad de Procesamiento Central (CPU) – Subrutinas y manejo del Stack
Requisitos de una función
Código de su implementación


Kaput!
Dirección de retorno



Registros
Stack
Parámetros



Registros
Stack
Retornar resultados


R.Mitnik
Registros
28
Arquitectura de Computadores
Resumen
Capítulo 4 : Unidad de Procesamiento Central (CPU)
Resumen
Implementación de funciones como subrutinas


Código de su implementación


Dirección de retorno




Registros
Stack
Retornar resultados

R.Mitnik
Registros
Stack
Parámetros


Precauciones
Registros
29
Arquitectura de Computadores
Descargar

Arquitectura de Computadores