Predstavitev se nalaga. Prosimo počakajte.

Predstavitev se nalaga. Prosimo počakajte.

Sklad - splošno Kaj je sklad?

Podobne predstavitve


Predstavitev na temo: "Sklad - splošno Kaj je sklad?"— Zapis predstavitve:

1

2 Sklad - splošno Kaj je sklad?
Sklad (angl. Stack) je dinamična podatkovna struktura, nad katero sta (poleg inicializacije) mogoči dve operaciji: Vstavi “(angl. Push)” in Vzemi “(angl. Pull)”. Z operacijo VSTAVI damo nov podatek v (na) sklad. Z operacijo VZEMI vzamemo podatek s (iz) sklada. Sklad ima dva konca: “dno” in “vrh”. Obe operaciji (VSTAVI, VZEMI) delujeta na tistem koncu, ki mu rečemo vrh. Ko sklad inicializiramo, je prazen. Z operacijo VSTAVI se sklad polni. Z operacijo VZEMI se sklad prazni.

3 Sklad - splošno Ostala vsebina sklada Vrh sklada Dno sklada
Podatek na vrhu sklada Tu delujeta operaciji vstavi in vzemi Ostala vsebina sklada Dno sklada Sklad torej služi za shranjevanje podatkov po principu zadnji noter, prvi ven (angl. LIFO – Last In First Out). Za hranjenje podatkov potrebujemo ustrezno pomnilno sredstvo (pomnilnik) in kazalec (register) ki določa, kje je vrh.

4 HCS12 in sklad Za sklad je uporabljen (katerikoli) del pomnilnika RAM (se nahaja kjerkoli v naslovnem področju pomnilnika RAM). Vrh sklada določa skladovni kazalec – register procesorja - SP. Inicializacija sklada Izberemo položaj (začetni vrh oz. dno) sklada: LDS #SKLAD ;npr. SKLAD= $4000 S tem je sklad “prazen”. Pomnilnik RAM Pomnilnik $1000 $3FFF $4000 Skladovni kazalec SP $4000

5 HCS12 in sklad Oparacija VSTAVI: PSHA, PSHB, PSHC, PSHD, PSHX, PSHY
Skladovni kazalec se najprej dekrementira. Operand se shrani v sklad na naslov, ki ga kaže SP. Sklad torej “rase” oz. se polni proti nižjim naslovom. Npr. PSHA ; -SP, (SP)  A RAM Pomnilnik $1000 $3FFF SP $4000 $5A CPE pred Nedef. RAM Pomnilnik $1000 $3FFF SP $5A CPE po $4000

6 HCS12 in sklad Oparacija VZEMI: PULA, PULB, PULC, PULD, PULX, PULY
Operand se vzame s sklada, t.j. z naslova, kamor kaže SP. Skladovni kazalec se nato inkrementira. Seveda se vsebina na tistem naslovu ne spremeni. Npr. PULA ;A  (SP), SP+ RAM Pomnilnik $1000 $3FFF SP ???? CPE pred $4000 $5A RAM Pomnilnik $1000 $3FFF SP $4000 $5A CPE po

7 HCS12 in sklad Primer: zamenjamo vsebini akumulatrojev A in B
PSHA ;naj bo v akumulatorju A npr. $55 PSHB ;naj bo v B npr. $AA PULA ;sedaj je v akumulatorju A $AA PULB ;in v B gre $55 Pomnilnik za sklad $55 SP PSHA Pomnilnik za sklad $55 SP PSHB $AA Pomnilnik za sklad Pomnilnik za sklad $55 SP PULB $AA $55 SP PULA $AA $AA A $55 B $55 A $AA B

8 HCS12 – sklad - “tipičen primer”
(Začasno) shranjevanje v sklad: PSHA ;shranjevanje v izbranem vrstnem redu PSHB PSHX ;I.T.D. ...... PULX ;obnovitev v obratnem vrstnem redu PULB PULA

9 HCS12 – vloga sklada Pri začasnem shranjevanju podatkov (v sklad) –
to smo ravnokar spoznali. Pri povezovanju programov s podprogrami (subrutinami) – shranjevanju vrnitvenega naslova v sklad, to je naslova ukaza v klicnem programu, ki sledi klicnemu ukazu. Pri streženju zahtevam za prekinitev – shranjevanje registrov procesorja (konteksta) v sklad.

10 Programi in podprogrami
Program običajno obsega: glavni program in več podprogramov (“subrutin”). Noben (pod)program naj ne bi obsegal več vrstic kot za eno (dobro) stran. Že malo obsežnejši program narejen “v enem kosu” postane nepregleden, težko obvladljiv in za “enkratno uporabo”. Načrtovanje programa s podprogrami naredi program bolj pregleden, bolj obvladljiv, modularen, zato tudi bolj prilagodljiv in bolj uporaben. Podprogrami pa so sami po sebi potrebni tudi (in včasih predvsem) zato, ker se določena zaporedja ukazov (določene sestavljene operacije) v programu (programih) večkrat oz. pogosto ponavljajo.

11 Programi in podprogrami
Glavni program je tisti del programa, ki se začne izvrševati, ko hočemo program izvršiti. Podprogrami (subrutine) pa se “kličejo” iz glavnega programa (klicnega programa) po potrebi, samo enkrat ali pa poljubno mnogokrat. Možen je seveda tudi klic podprograma znotraj podprograma, to je “gnezdenje” klicev. Ko govorimo o skladu in podprogramih, pa je prav sklad tisti, ki: daje podlago, da se klicni program lahko nadaljuje po vrnitvi iz klicanega podprograma, omogoča gnezdenje klicev.

12 Programi in podprogrami
;Podprogram SUB_A SUB_A: Ukaz 1 Ukaz 2 ...... Ukaz za povratek (RTS) ;Glavni program Ukaz N-1 Ukaz N: Klic podprograma (JSR SUB_A) Ukaz N+1 Klic podprograma (JSR SUB_B) Ponovni klic podprograma (JSR SUB_B) I.T.D. ;Podprogram SUB_B SUB_B: Ukaz 1 Ukaz 2 ...... Ukaz za povratek (RTS)

13 HCS12 - subrutine Podprogramu (subrutini) damo primerno ime, ki sam po sebi o subrutini nekaj pove, npr.: Sestej V zbirnem jeziku je to naslov 1. ukaza subrutine Poskrbimo za prenos argumentov iz klicnega v klicni program (subrutino) in obratno, to je (vhodnih) podatkov in (izhodnih) rezultatov. Če se le da (ko jih je malo) prenašamo argumete preko registrov CPE. Zapišemo vsebino subrutine, to je zaporedje ukazov, ki spada k subrutini in realizira tisto, čemur je namenjena, to je na podlagi vhodnih podatkov da potrebni rezultat. Poskrbimo za povratek v klicni program, to je Za to imamo ukaz RTS Opomba: seveda je ukazov RTS za povratek iz iste subrutine po potrebi lahko tudi več.

14 HCS12 – primer subrutine ; ; Program s podprogramom ; ; --- Splošne definicije RAMSTART EQU $1000 ;začetek pomnilnika RAM RAMSIZE EQU $2000 ;njegova velikost RAMEND EQU RAMSTART+RAMSIZE PROGRAM EQU $3000 ;začetek pomnilnika za program NPOD EQU $10 ;št. podatkov za sešteti ; --- podatki in sklad ORG RAMSTART POD: DS.B NPOD ;to naj bodo podatki za seštevanje VSOTA: DS.B 1 ;tu bo rezultat ; --- začetek glavnega programa ORG PROGRAM Start: LDS #RAMEND ;določimo sklad

15 HCS12 – primer subrutine ; ; --- priprava na klic subrutine
; --- podamo dejanske (vrednosti) argumentov LDX #POD ;začetek podatkov LDAB #NPOD ;število podatkov JSR SESTEJ ;klic subrutine BRA * ;neskončna zanka

16 HCS12 – primer subrutine ; ; Ime Subrutine: SESTEJ ; Opis: subrutina sešteje podano število 8-bitnih podatkov v pomnilniku ; Vhodni argumenti: register X: naslov prvega podatka ; akumulator B: število podatkov ; Izhod: vsota podatkov shranjena na naslovu takoj za podatki ; SESTEJ: PSHA ;shranimo registre PSHB PSHX CLRA SESTEJ0: ADDA 0,X ;računamo INX DECB BNE SESTEJ0 STAA 0,X ;shranimo rezultat (lahko tudi STAA VSOTA) PULX ;obnovimo registre PULB PULA RTS

17 HCS12 – ukaz JSR Ukaz: JSR ImeSubrutine
prenese izvrševanje zaporedja ukazov na subrutino. V tem primeru pomeni ImeSubrutine simbolični naslov 1.ukaza subrutine. Kaj se dogaja? Vsebina programskega števca se shrani v sklad. Programski števec se polni z vsebino v polju operanda ukaza JSR (to je z naslovom 1. ukaza subrutine). S tem se izvrševanje ukazov prenese na subrutino.

18 HCS12 – ukaz JSR ;Klicni program ....... $3000 NOP $3001 JSR $310A
SP $4000 $5A CPE pred klicem PC $3004 SP $3FFE $5A CPE po klicu PC $310A ;Klicni program $3000 NOP $3001 JSR $310A $3004 NOP ;Subrutina $310A TAB $310B I.T.D. $3FFE $30 Nedef. $3FFF $04 $4000 $4000 Sklad Sklad

19 HCS12 – ukaz RTS ;Klicni program ....... $3000 NOP $3001 JSR $310A
SP $3FFE $5A CPE pred PC $3111 SP $4000 $5A CPE po PC $3004 ;Klicni program $3000 NOP $3001 JSR $310A $3004 NOP ;Subrutina $310A TAB $310B $3110 RTS SP $3FFE $30 $3FFE $30 $3FFF $04 $3FFF $04 SP $4000 $4000 Sklad Sklad

20 HCS12 – sklad in prekinitve
V primeru zahteve za prekinitev procesor shrani svoj kontekst (registre) v sklad. Programski števec se polni z vsebino pomnilniške besede s ‘posebnim pomenom’ – prekinitvenim vektorjem (vektor svebuje torej naslov ukaza). Sledi prevzem in izvršitev (prvega) ukaza ter za tem vseh ostalih ukazov ‘prekinitvenega strežnika’. Zadnji ukaz prekinitvenega strežnika je ukaz RTI (angl.Return from Interrupt), ki iz sklada obnovi ob zahtevi za prekinitev shranjene registre (seveda tudi programski števec).


Prenesi ppt "Sklad - splošno Kaj je sklad?"

Podobne predstavitve


Oglasi od Google