Title: Hcs12 in sklad, subrutine in prekinitve
1(No Transcript)
2Sklad - splošno
- Kaj je sklad?
- Sklad (angl. Stack) je dinamicna podatkovna
struktura, nad katero sta (poleg inicializacije)
mogoci 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 recemo vrh. - Ko sklad inicializiramo, je prazen.
- Z operacijo VSTAVI se sklad polni.
- Z operacijo VZEMI se sklad prazni.
3Sklad - 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 doloca,
kje je vrh.
4HCS12 in sklad
- Za sklad je uporabljen (katerikoli) del
pomnilnika RAM (se nahaja - kjerkoli v naslovnem podrocju pomnilnika RAM).
- Vrh sklada doloca skladovni kazalec register
procesorja - SP. - Inicializacija sklada
- Izberemo položaj (zacetni vrh oz. dno) sklada
- LDS SKLAD npr. SKLAD 4000
- S tem je sklad prazen.
Skladovni kazalec
SP
4000
5HCS12 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
6HCS12 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
7HCS12 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
8HCS12 sklad - tipicen primer
- (Zacasno) shranjevanje v sklad
- PSHA shranjevanje v izbranem vrstnem redu
- PSHB
- PSHX
- ...... I.T.D.
- ......
- PULX obnovitev v obratnem vrstnem redu
- PULB
- PULA
9HCS12 vloga sklada
- Pri zacasnem 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.
10Programi in podprogrami
- Program obicajno obsega
- glavni program in
- vec podprogramov (subrutin).
- Noben (pod)program naj ne bi obsegal vec 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. - Nacrtovanje 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
vcasih predvsem) zato, ker se dolocena zaporedja
ukazov (dolocene sestavljene operacije) v
programu (programih) veckrat oz. pogosto
ponavljajo.
11Programi in podprogrami
- Glavni program je tisti del programa, ki se zacne
- izvrševati, ko hocemo program izvršiti.
- Podprogrami (subrutine) pa se klicejo 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,
- omogoca gnezdenje klicev.
12Programi 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 N1 ....... ....... .
...... 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)
13HCS12 - 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. - Ce 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, cemur 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 vec.
14HCS12 primer subrutine
------------------------------------------------
----------------------------------------
Program s podprogramom --- Splošne
definicije RAMSTART EQU 1000 zacetek
pomnilnika RAM RAMSIZE EQU 2000 njegova
velikost RAMEND EQU RAMSTARTRAMSIZE PROGRAM EQU
3000 zacetek pomnilnika za program NPOD EQU 1
0 š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 --- zacetek glavnega
programa ORG PROGRAM Start LDS RAMEND doloci
mo sklad
15HCS12 primer subrutine
--- priprava na klic subrutine --- podamo
dejanske (vrednosti) argumentov LDX POD zac
etek podatkov LDAB NPOD število
podatkov JSR SESTEJ klic subrutine BRA n
eskoncna zanka
16HCS12 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 racunamo INX DECB BNE SESTEJ0 STAA 0
,X shranimo rezultat (lahko tudi STAA
VSOTA) PULX obnovimo registre PULB PULA
RTS
17HCS12 ukaz JSR
- Ukaz
- JSR ImeSubrutine
- prenese izvrševanje zaporedja ukazov na
subrutino. - V tem primeru pomeni
- ImeSubrutine
- simbolicni 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.
18HCS12 ukaz JSR
Klicni program ....... 3000 NOP 3001 JSR 310
A 3004 NOP ....... Subrutina
310A TAB 310B ....... I.T.D.
3FFE
30
3FFF
04
Nedef.
4000
4000
Sklad
Sklad
19HCS12 ukaz RTS
Klicni program ....... 3000 NOP 3001 JSR 310
A 3004 NOP ......... ....... Subrutina
310A TAB 310B ....... .......... ....... 3110
RTS
SP
3FFE
30
3FFE
30
3FFF
04
3FFF
04
SP
4000
4000
Sklad
Sklad
20HCS12 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).