El Stack y Subrutinas

Anuncio
Microprocesadores
El Stack y Subrutinas
Carlos Canto Quintal
Microprocesadores
El STACK
† El Stack es un grupo de localidades de memoria de
lecto-escritura que son usadas para almacenar el
contenido de registros y direcciones de memoria
temporalmente durante la ejecución de un programa.
† En el Z80, el inicio del Stack es definido en el programa
usando la instrucción LD SP, dirección de 16 bits.
† Teóricamente, el tamaño del stack es ilimitado,
restringido solamente por la cantidad de memoria RAM
disponible en el sistema .
† La dirección en el Stack Pointer siempre apunta a la
parte superior del STACK e indica que la siguiente
localidad de memoria (SP-1) está disponible para
almacenar información
Carlos Canto Quintal
Microprocesadores
El STACK
† Una práctica generalizada, es que el stack se inicialice en
la localidad de memoria RAM más alta posible para
prevenir que el programa del usuario sea destruido por
la información del STACK.
† El stack es compartido por el programador y el
microprocesador para almacenar o recuperar
información.
† El programador puede almacenar y recuperar el
contenido de los pares de registros usando instrucciones
PUSH y POP.
† El microprocesador puede cargar y recuperar
automáticamente el contenido del Contador de programa
PC cuando se llama a una subrutina .
Carlos Canto Quintal
Microprocesadores
El STACK
Al cargar un dato (siempre de
16 bits) al stack , primero se
decrementa el SP, se carga la
parte alta del dato en la
localidad de memoria apuntada
por SP, luego se repite el
procedimiento para cargar el
byte bajo del dato en la
siguiente localidad de
memoria.
SPÅSP-1
(SP)ÅDatoH
SPÅSP-1
(SP)Å DatoL
Ejemplo :Para que el stack empiece a partir
de 0FFFH, stack es inicializado con:
LD SP,1000H
SP
STACK
Programa
1000h
0FFFh
0FFEh
0FFDh
0FFCh
El stack del Z80
crece hacia
abajo al cargar
un dato
Carlos Canto Quintal
Microprocesadores
Uso del Stack como almacén temporal de datos: salvar
datos al stack usando instrucciones PUSH
PUSH AF
PUSH BC
Z80 CPU
Dirección de
memoria
PUSH DE
77
13
F
B
A2
22
C
D
10
40
E
H
FD
C5
L
SP
0F
10
FD
FC
FE
FB
FA
FF
00
F9
F8
A
contenido de
memoria
PUSH HL
STACK
77
13
A2
22
10
40
FD
C5
1000h
0FFFh
0FFEh
0FFDh
0FFCh
0FFBh
0FFAh
0FF9h
0FF8h
Carlos Canto Quintal
Microprocesadores
Uso del Stack como almacén temporal de datos: recuperación
de datos del stack usando instrucciones POP
POP HL
POP DE
Z80 CPU
A
contenido de
memoria
Dirección de
memoria
POP BC
00
77
13
00
F
B
FF
A2
FF
22
C
D
00
10
00
40
E
H
FD
FF
C5
00
L
SP
0F
10
FA
FB
FC
FD
FE
FF
F8
F9
00
POP AF
STACK
77
13
A2
22
10
40
FD
C5
C5
1000h
0FFFh
0FFEh
0FFDh
0FFCh
0FFBh
0FFAh
0FF9h
0FF8h
Carlos Canto Quintal
Microprocesadores
Subrutinas
Una subrutina es un grupo de instrucciones
escritas por separado del programa principal para
realizar una función que puede ser usada
repetidamente por el programa principal.
† Una subrutina se implementa asociada con dos
instrucciones :
CALL ( llamado a la subrutina)
y
RETurn (retorno de la subrutina).
†
Carlos Canto Quintal
Microprocesadores
Subrutinas
† La instrucción CALL se pone en el programa
principal (excepto en la subrutinas anidadas)
para invocar la ejecución de la subrutina.
† La instrucción RETurn se ubica en la
subrutina para retornar al programa principal.
Carlos Canto Quintal
Microprocesadores
Subrutinas
†
Cuando una subrutina es llamada, el contenido del
Contador de Programa, PC , que contiene la
dirección de la instrucción que sigue a la
instrucción CALL, es almacenado en el STACK y
la ejecución del programa es transferido a la
subrutina.
†
Cuando la instrucción RETurn es ejecutada al final
de la subrutina, la dirección de memoria
almacenada en el STACK es recuperada y la
secuencia de ejecución es continuada en el
programa principal
Carlos Canto Quintal
Microprocesadores
Tipos de subrutinas
‰ Llamadas múltiples
‰ Anidadas
‰ De Final múltiple
Carlos Canto Quintal
Microprocesadores
subrutinas de llamadas múltiple
Programa
principal
subrutina
xx00
xx01
xx50 Push DE
09
0A
0B
call
50
xx
Push AF
12
13
14
call
50
xx
Pop AF
Pop DE
1B
1C
1D
call
50
xx
DELAY
61
Ret
Carlos Canto Quintal
Microprocesadores
subrutinas anidadas
Programa
principal
2000
Subrutina I
2050
2051
2052
2053
CALL
90
20
2090
Subrutina II
20C2
CALL
C2
20
RET
RET
Carlos Canto Quintal
Microprocesadores
Subrutinas de Final múltiple
Subrutina
2050
RET Z
2058
RET C
2070
RET
Carlos Canto Quintal
Microprocesadores
Carlos Canto Quintal
Descargar