Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Zásobník (LiFo) Fronta (FiFo)
Vkládaná položka Vyjímaná položka Vrchol zásobníku Dno zásobníku Fronta (FiFo) Vyjímaná položka Vkládaná položka Konec fronty Čelo fronty
2
Implementace zásobníku
16-ti bitový registr SP (Stack Pointer) obsahuje aktuální adresu vrcholu zásobníku Zásobník je umístěn v paměti Dno Pro práci se zásobníkem jsou speciální instrukce, které upravují hodnotu SP Nebývá účelné s oblastí zásobníku pracovat i jiným způsobem Vrchol SPH SPL Inicializací obsahu SP se zásobník umístí do paměti SP Další manipulace s SP nebývá účelná a může být nebezpečná Dno zásobníku má v paměti pevnou pozici Vrchol NE !
3
Instrukce procesoru pro práci se zásobníkem
push X Instrukce zvýší obsah registru SP o jedna a uloží obsah operandu X do paměti, na adresu, která je hodnotou registru SP. push A push Rn push PSW pop X Instrukce zkopíruje byte z paměti na adrese, která je obsahem registru SP do operandu X, a sníží obsah registru SP o jedna. pop A pop Rn pop PSW
4
Podobně jako při skoku: voláním podprogramu se
Podprogramy Podobně jako při skoku: voláním podprogramu se předává řízení instrukci na jiném místě v programu Na rozdíl od skoku: předpokládá se návrat do místa, odkud se řízení předávalo call Adresa16 call Instrukce uloží do zásobníku (jako push) nejprve nižší, pak vyšší byte adresy té instrukce, která následuje na za instrukcí call. Potom se provede skok na Adresa16. call ret Instrukce odebere ze zásobníku (jako pop) nejprve vyšší, pak nižší byte adresy instrukce, které předá řízení. ret
5
Každým zavoláním podprogramu se velikost zásobníku
Podprogramy Každým zavoláním podprogramu se velikost zásobníku zvětší o dva Byty (uloží se návratová adresa) Každým návratem z podprogramu se velikost zásobníku zmenší o dva Byty (odebere se návratová adresa) call call ret call call ret ret Hlavní program Podprogram úroveň 1 Podprogram úroveň 2 Podprogram úroveň 3
6
Počet provedených instrukcí pop, by měl být
Podprogramy Počet provedených instrukcí pop, by měl být stejný jako počet provedených instrukcí push Počet provedených instrukcí call, by měl být stejný jako počet provedených instrukci ret Uvnitř podprogramu nepoužívat instrukce skoku s cílem, mimo uvažovaný podprogram Vně podprogramu nepoužívat instrukce skoku s cílem uvnitř uvažovaného podprogramu
7
Příklady na podprogramy
Př.: Pískání LOOP: mov A, #1 out 12, A mov R0, #0 djnz R0, $ mov A, #0 out 12, A mov R0, #0 djnz R0, $ jmp LOOP Př.: Pískání LOOP: mov A, #1 out 12, A call WAIT mov A, #0 out 12, A call WAIT jmp LOOP WAIT: mov R0, #0 djnz R0, $ ret
8
Příklady na podprogramy
Př.: Blikání LOOP: mov A, #0 out 12, A mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 mov A, #1 out 12, A W2: mov R0, #0 djnz R0, $ djnz R1, W2 jmp LOOP Př.: Blikání LOOP: mov A, #0 out 12, A call W mov A, #1 out 12, A jmp LOOP W: mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 ret
9
Mikro- počítač a f b g e c h d Příklad podprogramu
Př.: Podprogram-Displej DISPL: cjne R7, #0, D1 mov A, # B jmp DISEND D1: cjne R7, #1, D2 mov A, # B D2: cjne R7, #2, D3 mov A, # B D3: cjne R7, #3, D4 mov A, # B D4: cjne R7, #4, D5 mov A, # B D5: cjne R7, #5, D6 mov A, # B D6: cjne R7, #6, D7 mov A, # B D7: cjne R7, #7, D8 mov A, # B D8: cjne R7, #8, D9 mov A, # B D9: cjne R7, #9, ERR mov A, # B DISEND: out 12H, A ERR: ret Mikro- počítač a f b g e c h d P12.0 P12.1 P12.2 P12.3 P12.4 P12.4 P12.6 P12.7
10
Instrukce vstupu a výstupu Aritmetické instrukce
Instrukční sada Instrukce přesunu dat mov X, Y Instrukce vstupu a výstupu in A, Adresa8 out Adresa8, A Logické instrukce cpl A anl A, X orl A, X xrl A, X Instrukce rotací rr A rrc A rl A rlc A Aritmetické instrukce inc X dec X add A, X addc A, X subb A, X Instrukce skoků jmp Adresa16 djnz Rn,Adresa16 cjne A,#data8,Adresa16 cjne Rn,#data8,Adresa16 jz Adresa16 jnz Adresa16 jc Adresa16 jnc Adresa16 Práce se zásobníkem push X pop X Podprogramy call Adresa16 ret Prázdná instrukce nop
11
Podnět pro přerušení přichází většinou z prostřední mimo procesor
Podprogram pro obsluhu přerušení není spouštěn instrukcí call. Je aktivo- ván HW prostředky (řadič přerušení, procesor, …) Mikro- počítač Přeruší se právě vykonávaný program … … a začne se provádět připravený podprogram Při obsluze přerušení je ukládána do zásobníku návratová adresa, podprogram pro přerušení končí instrukcí ret. Po skončení podprogramu procesor pokračuje ve vykonávání přerušeného programu
12
Dokud je obsah proměnné na adrese 0AAh
Příklad na přerušení Generátor Impulsů (0.01s) Mikro- počítač Přerušení Dokud je obsah proměnné na adrese 0AAh větší než 0, je periodicky v taktu 0.01s snižován o jedničku. Hlavní program a ostatní podprogramy mohou (ale nemusí) tuto funkci použít pro řešení úloh Časování. Př.: Přerušení 0.01s IntT1: push A mov A, 0AAh jz IT1 dec A mov 0AAh, A IT1_1: pop A ret Ve složitějších aplikacích je možno podobných ČASOVAČŮ zřídit mnoho (každý na jiné adrese).
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.