1 / 20

Sklad - splošno

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.

thiery
Download Presentation

Sklad - splošno

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Sklad - splošno Vrh 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.

  3. Pomnilnik $1000 Pomnilnik RAM $3FFF $4000 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”. Skladovni kazalec SP $4000

  4. CPE po CPE pred $5A $5A Pomnilnik Pomnilnik SP SP $3FFF $4000 $1000 $1000 RAM RAM $3FFF Nedef. $3FFF $5A $4000 $4000 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

  5. CPE po CPE pred ???? $5A Pomnilnik Pomnilnik SP SP $4000 $3FFF $1000 $1000 RAM RAM $3FFF $5A $3FFF $5A $4000 $4000 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+

  6. Pomnilnik za sklad Pomnilnik za sklad Pomnilnik za sklad B A A B $55 $AA $55 $AA $AA $AA $AA SP SP SP SP $55 $55 $55 $55 PULA PULB PSHB PSHA 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

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

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

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

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

  11. 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)

  12. 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č.

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

  14. 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 ;

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

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

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

  18. CPE pred CPE po $5A $5A SP PC SP PC $3FFE $3111 $4000 $3004 HCS12 – ukaz RTS ;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

  19. 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 vsebuje 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).

More Related