Funcionamiento de la Pila (o stack)

Funcionamiento de la Pila (o stack) • Todo μP cuenta con una memoria de almacenamiento temporal denominada Pila. • Es una estructura de datos de tipo

24 downloads 136 Views 115KB Size

Recommend Stories


Pila
Magnetismo. Fem. Resistencia interna

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)
Interface List del api java. Clase Stack. Ejemplos resueltos. APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA.

TAD: Pila. TALLER: TAD Pila
TAD: Pila TALLER: TAD Pila Una pila (stack) es un conjunto de elementos del mismo tipo que solamente puede crecer o decrecer por uno de sus extremos.

AFC Pila de combustible alcalina
AFC Pila de combustible alcalina Es una de las primeras pilas de combustible modernas, desarrollada a principio de los años 60. Como dato curioso, men

ALEX HERIBERTO CHANCUSIG PILA
CARRERA DE INGENIERÍA EN ELECTRÓNICA E INSTRUMENTACIÓN “DISEÑO E IMPLEMENTACIÓN DEL CONTROL DE TEMPERATURA PARA EL HORNO DEL PROCESO DE SECADO DE MOTO

Hidrógeno y pila de combustible
2 Hidrógeno y pila de combustible Paloma Asensio HIDRÓGENO, ¿EL SUSTITUTO DEL PETRÓLEO? "Sí, amigos míos, creo que algún día se empleará el agua como

Preparar una pila de composta
The Quest for Clean Quality Drinking Wate Preparar una pila de composta Por Carl Burkybile, Healing Hands International Director of Agriculture Educ

Story Transcript

Funcionamiento de la Pila (o stack) • Todo μP cuenta con una memoria de almacenamiento temporal denominada Pila. • Es una estructura de datos de tipo secuencial (LIFO). • Existen dos operaciones básicas posibles: apilar y desapilar. • Solo se tiene acceso a la parte superior de la pila (último objeto apilado). • Es necesaria para el funcionamiento de las instrucciones de llamado y vuelta de subrutinas (CALL y RET), las instrucciones PUSH y POP, entre otras.

• En algunos μP la pila esta formada por un conjunto de registros internos (Ej. PICs). • En otros casos (Intel 80XX, Z80) la pila utiliza memoria de datos (RAM) para la pila junto a un registro específico en el μP llamado stack pointer (puntero de pila).

Registros internos: stack pointer Registros internos de un μP genérico (inspirado en el Intel 8085):

8 bits

flags (Z, C, etc)

A

B

C

D

E

H

L

acumulador registros de uso general

SP (puntero de pila) PC (contador de programa)

16 bits

Funcionamiento de la instrucción PUSH usando el registro SP: PUSH

Funcionamiento de la instrucción POP: POP

DE

BC Después de ejecutar la instrucción:

Después de ejecutar la instrucción: (SP-1) Å B (SP-2) Å C SP Å SP-2

E Å (SP) D Å (SP+1) SP Å SP+2

Instrucciones PUSH y POP: los “registros pares” Un ejemplito del uso de las instrucciones PUSH y POP: 2100h:

MVI MVI

B,7 A,0

PUSH MVI ADD POP

BC B,3 B BC

DCR JNZ

B 2100h

¿Qué valor queda en A? ¿Qué valor debería tener SP para que este ejemplo funcione?

En el caso del μP 8085, la instrucción PUSH “apila” siempre un par de registros. Estos pares solo pueden ser: B-C D-E H-L flags-A Por otro lado, la instrucción POP “desapila” registros también de a pares.

• A la unión de registros simples (de 8-bits) en pares se la denomina “registro-par”. • Un “registro par” se puede pensar como un registro único de 16-bits.

Instrucciones CALL y RET: subrutinas Las subrutinas • Pueden pensarse como subprogramas dentro de un programa principal (PP). • Se encargan, en general, de resolver tareas específicas. • Según el lenguaje, se las conoce también como: procedimientos o funciones. • Los μP cuentan en general con instrucciones para invocar subrutinas (CALL) e instrucciones para retornar de las subrutinas al PP (RET).

Funcionamiento de la instrucción CALL usando el registro SP: CALL

dir_sub

Después de ejecutar la instrucción (dir=PC+3): (SP-1) Å dirH (SP-2) Å dirL SP Å SP-2 PC Å dir_sub

Funcionamiento de la instrucción RET: RET Después de ejecutar la instrucción: PC Å dir, donde dirL Å (SP) dirH Å (SP+1) SP Å SP+2

Llamado a subrutinas: uso de SP Ejemplo: Supongamos inicialmente SP=2000h Dirección: . . . 0102h: 0105h: . . . 3010h: . . .

Instrucción:

CALL 3010h ADD B

Antes del CALL: SP=2000h PC=0102h Memoria: SP Æ

2000h: 1FFFh: 1FFEh: 1FFDh:

xx xx xx xx

2000h: 1FFFh: 1FFEh: 1FFDh:

xx 01 05 xx

2000h: 1FFFh: 1FFEh: 1FFDh:

xx 01 05 xx

Después del CALL: SP=1FFEh PC=3010h Memoria: SP Æ

* subrutina * Después del RET:

RET

SP=2000h PC=0105h Memoria: SP Æ

Decodificación de direcciones • Los dispositivos conectados a un μP (memorias, E/S, etc.) tienen en general menos líneas de direcciones que el micro. • Una memoria de 1K x 8 tiene 10 líneas de direcciones y ocho de datos. ¿Cómo hacemos para conectarla, suponiendo que está sola con un μP capaz de direccionar 64K? • Una solución es la siguiente:

DATOS

μP

A0..A9

¿Qué dirección debe tener el μP para comunicarse con esta memoria?

1Kx8

A10A15 R

OE

CS

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

x x … … x x

x x

x x

x x

x x

x x

0 0

0 0

0 0

0 0

0 0

0 0

0 0

0 0

x x

x x

x x

x x

x x

1 1

1 1

1 1

1 1

1 1

1 1

1 1

1 1

0 0

0 1 … … 1 0 1 1

Decodificación de direcciones Si el μP pone la dirección 0000h lee la primera dirección de la memoria, y si pone la dirección 03FFh lee la última. ¿Que pasa si el μP pone la dirección F000h? ¿En cuantas direcciones distintas lee el mismo dato? Mapa de memoria: 0000 03FF 0400 07FF 0800 0BFF … … … … FC00 FFFF

Como podríamos conectar el μP con dos memorias como las usadas en el ejemplo anterior?

Decodificación: dos memorias Qué dirección debe tener el μP para comunicarse con estas memorias? Mapa de memoria: 0000

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 chip x

x

x

x

x

0

0

0

0

0

0

0

0

0

0

0

x

x

x

x

x

0

0

0

0

0

0

0

0

0

0

1

x

x

x

x

x

1

0

0

0

0

0

0

0

0

0

0

x

x

x

x

x

1

0

0

0

0

0

0

0

0

0

1

2

x

x

x

x

x

0

1

1

1

1

1

1

1

1

1

0

x

x

x

x

x

0

1

1

1

1

1

1

1

1

1

1

x

x

x

x

x

1

1

1

1

1

1

1

1

1

1

0

x

x

x

x

x

1

1

1

1

1

1

1

1

1

1

1

03FF 0400

1 . . .

. . .

Chip 2

Chip 1 07FF

. . .

2 1

F800 Chip 2 FBFF FC00 Chip 1 FFFF

Decodificación: 8 memorias Como podríamos conectar 8 memorias como estas? Datos

1Kx8

0

µP CS

OE

1Kx8

1 CS

1Kx8

1Kx8

CS OE

7

6

CS OE

OE

A0..A9

A10.A12 A13.A15 R 3

DECO 3-8

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Chip x x x x x x x x x x x x x x x x

x x x x x x x x x x x x x x x x

x x x x x x x x x x x x x x x x

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 1 2 3 4 5 6 7

Decodificación: 8 memorias Mapa de memoria: 0000 Chip 0 03FF 0400 Chip 1 07FF 0800 Chip 2 0BFF 0C00

¿Que chip se activa cuando en el bus de direcciones está 20FFh? ¿y cuando está el valor FF00h?

Chip 3 0FFF 1000 Chip 4 13FF 1400 Chip 5

¿Cómo se puede hacer para que exista una sola dirección?

17FF 1800 Chip 6 1BFF 1C00

74138

A10

A

A11

B

O1

A12

C

O2

O0

CS0

O3 O4

Chip 7 1FFF

O5 A13 CS1 A14

CS2

A15

CS3

O6 O7

CS7

Decodificación: bloques de entrada y salida De la misma manera que tenemos direcciones específicas para cada memoria, también se hace lo mismo para los dispositivos de entrada salida: Entrada 2x8 A0

A0 8

D0-D7

datos

CS R

OE

I00 I01 I02 I03 I04 I05 I06 I07

I10 I11 I12 I13 I14 I15 I16 I17

Salida 4x8 8

A0

A0 A1

A1

O0 8

8

D0-D7

datos

O1 8

O2

CS

8

O3

W

WE

• Hay que lograr un diseño que permita acceder a todas las memorias y a todos los periféricos teniendo en cuenta que no se produzca un conflicto de direcciones. • Un sistema puede trabajar bien si uno o mas dispositivos están mapeados en memoria mas de una vez (se simplifica el hardware).

Decodificación: ejemplos Supongamos que queremos diseñar un sistema que consta de un µP de 8 bits de datos y 16 bits de direcciones y se lo quiere conectar con: • 1 Memoria ROM de 2Kx8 • 2 Memorias RAM de 1Kx4 • 1 Puerto de entrada de 2x8 • 1 Puerto de Salida de 4x8 D7..D0

1Kx4

2Kx8 A0..A10

A0..A9

ROM

µP

CS OE

D7..D0

1Kx4 A0

RAM 1 D7..D4

RAM 2

CS

CS W OE

4x8

2x8

A0..A9 D3..D0

A0 A1

ENTR

D7..D0

CS

CS W OE

OE

A0..A10 A11..A15 W R

74138 A11 A12 A13

A B C

Vcc CS1 CS2 CS3

O0 O1 O2 O3 O4 O5 O6 O7

SAL

No existe una única dirección para cada dispositivo.

W

D7..D0

Decodificación: ejemplos Mapa de memoria: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 x

x

0

0

0

0

0

0

0

0

0

0

0

0

0

0

x

x

0

0

0

1

1

1

1

1

1

1

1

1

1

1

x

x

0

0

1

x

0

0

0

0

0

0

0

0

0

0

x

x

0

0

1

x

1

1

1

1

1

1

1

1

1

1

x

x

0

0

1

x

0

0

0

0

0

0

0

0

0

0

x

x

0

0

1

x

1

1

1

1

1

1

1

1

1

1

x

x

0

1

0

x

x

x

x

x

x

x

x

x

x

0

x

x

0

1

0

x

x

x

x

x

x

x

x

x

x

1

x

x

0

1

1

x

x

x

x

x

x

x

x

x

0

0

x

x

0

1

1

x

x

x

x

x

x

x

x

x

1

1

CHIP ROM

RAM 1

RAM 2

ENT

SAL

** No existe una única dirección para cada dispositivo.

Decodificación: ejemplos Segundo caso: cada dispositivo tiene una única dirección: D7..D0

2Kx8

1Kx4

A0..A10

1Kx4

A0..A9

ROM

µP

D7..D0

CS

4x8

A0..A9

RAM 1 D7..D4

RAM 2

CS

CS W OE

OE

D3..D0

A0

SAL

W OE

W R

74138 A10

Vcc

A14 A15

CS1 CS2 CS3

O0 O1 O2 O3 O4 O5 O6 O7

74138

74138 A1

A6 A7 A8

A10 A9

A B C

CS1 CS2 CS3

O0 O1 O2 O3 O4 O5 O6 O7

A2 A3

A4 A5

A B C

CS1 CS2 CS3

O0 O1 O2 O3 O4 O5 O6 O7

ENT CS

OE

A11..A15

A B C

D7..D0

CS

A0..A10

A11 A12 A13

2x8

A1 A0

W

D7..D0

Decodificación: ejemplos Mapa de memoria (segundo caso): A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

0

0

0

1

0

1

0

0

0

0

0

0

0

1

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

1

0

1

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

1

1

Chip ROM

RAM 1

RAM 2

ENT

SAL

** Cada dispositivo tiene una única dirección a costa de un hardware muy complicado.

Decodificación: ejemplos Primer caso:

0000 ROM 07FF 0800 x

21

07FF 0800 RAM 1 y 2 0BFF 0C00

ENTRADA 17FE/F 1800/3

x 29

0000 ROM

RAM 1 y 2 0FFF 1000/1

x 210

Segundo caso:

NADA 1403 1404

SALIDA 1FFC/F 2000

ENTRADA

NADA 3FFF 4000

1405 1406 NADA 1BFF 1C00

IDEM SALIDA

1C03 1C04

7FFF 8000

IDEM NADA BFFF C000

IDEM FFFF FFFF

Decodificación: ejemplos Tercer caso: hardware mucho mas simple:

D7..D0

2Kx8

ROM

µP

CS OE A0..A10 A11..A15 W R

A11 A12 A13 A14

D7..D0

2x8

1Kx4

1Kx4 A0..A9

A0..A10

A0..A9

RAM 1 D7..D4

RAM 2

CS

CS W OE

4x8

A0 D3..D0

A0 A1

ENTR

SAL CS

CS W OE

D7..D0

OE

W

D7..D0

Decodificación: ejemplos Mapa de memoria: A15 A14 A13 A12 A11

Chip

x

0

0

0

0

ROM

x

0

0

1

1

RAM 1

x

0

0

1

1

RAM 2

x

0

1

0

1

ENT

x

1

0

0

1

SAL

¿Que chip se habilita con la dirección F000h? ¿y en la dirección F800h?

• En este caso el programador debe cuidar de no usar las direcciones que puedan ocasionar un conflicto. • La ventaja: se requiere menos hardware. • El diseño queda limitado para el uso de muchas direcciones en caso de una ampliación posterior.

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.