Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Zásobník (LiFo) Dno zásobníku Vrchol zásobníku Fronta (FiFo) Čelo fronty Konec fronty Vkládaná položka Vyjímaná položka Vkládaná položka Vyjímaná položka.

Podobné prezentace


Prezentace na téma: "Zásobník (LiFo) Dno zásobníku Vrchol zásobníku Fronta (FiFo) Čelo fronty Konec fronty Vkládaná položka Vyjímaná položka Vkládaná položka Vyjímaná položka."— Transkript prezentace:

1 Zásobník (LiFo) Dno zásobníku Vrchol zásobníku Fronta (FiFo) Čelo fronty Konec fronty Vkládaná položka Vyjímaná položka Vkládaná položka Vyjímaná položka

2 Implementace zásobníku Vrchol Dno SPHSPL SP 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 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 Inicializací obsahu SP se zásobník umístí do paměti 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 push A push Rn push PSW Instrukce procesoru pro práci se zásobníkem pop A pop Rn pop PSW push X pop X Instrukce zvýší obsah registru SP o jedna a uloží obsah operandu X do paměti, na adresu, která je hodnotou registru SP. Instrukce zkopíruje byte z paměti na adrese, která je obsahem registru SP do operandu X, a sníží obsah registru SP o jedna.

4 Podprogramy Na rozdíl od skoku: předpokládá se návrat do místa, odkud se řízení předávalo Podobně jako při skoku: voláním podprogramu se předává řízení instrukci na jiném místě v programu call Adresa16 ret 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. Instrukce odebere ze zásobníku (jako pop ) nejprve vyšší, pak nižší byte adresy instrukce, které předá řízení. call ret

5 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 ret call ret call ret Hlavní program Podprogram úroveň 1 Podprogram úroveň 2 Podprogram úroveň 3

6 Podprogramy Počet provedených instrukcí pop, by měl být stejný jako počet provedených instrukcí push Vně podprogramu nepoužívat instrukce skoku s cílem uvnitř uvažovaného podprogramu Uvnitř podprogramu nepoužívat instrukce skoku s cílem, mimo uvažovaný podprogram Počet provedených instrukcí call, by měl být stejný jako počet provedených instrukci ret

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ř.: 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 mov R1, #0 W2:mov R0, #0 djnz R0, $ djnz R1, W2 jmp LOOP Příklady na podprogramy Př.: Blikání LOOP:mov A, #0 out 12, A call W mov A, #1 out 12, A call W jmp LOOP W:mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 ret

9 Příklad podprogramu f e b c a g d h Mikro- počítač P12.0 P12.1 P12.2 P12.3 P12.4 P12.6 P12.7 Př.: Podprogram-Displej DISPL:cjne R7, #0, D1 mov A, # B jmp DISEND D1:cjne R7, #1, D2 mov A, # B jmp DISEND D2:cjne R7, #2, D3 mov A, # B jmp DISEND D3:cjne R7, #3, D4 mov A, # B jmp DISEND D4:cjne R7, #4, D5 mov A, # B jmp DISEND D5:cjne R7, #5, D6 mov A, # B jmp DISEND D6:cjne R7, #6, D7 mov A, # B jmp DISEND D7:cjne R7, #7, D8 mov A, # B jmp DISEND D8:cjne R7, #8, D9 mov A, # B jmp DISEND D9:cjne R7, #9, ERR mov A, # B DISEND:out 12H, A ERR:ret

10 Instrukční sada push Xpop X mov X, Y in A, Adresa8out Adresa8, A cpl Aanl A, Xorl A, Xxrl A, X rr Arrc Arl Arlc A dec Xinc X add A, Xaddc A, Xsubb A, X jmp Adresa16 jnz Adresa16jz Adresa16 jc Adresa16jnc Adresa16 cjne A,#data8,Adresa16cjne R n,#data8,Adresa16 djnz R n,Adresa16 call Adresa16ret Instrukce přesunu dat Instrukce vstupu a výstupu Logické instrukce Aritmetické instrukce Instrukce rotací Instrukce skoků Práce se zásobníkem Podprogramy nop Prázdná instrukce

11 Přerušení Mikro- počítač Podnět pro přerušení přichází většinou z prostřední mimo procesor Přeruší se právě vykonávaný program … … a začne se provádět připravený podprogram Po skončení podprogramu procesor pokračuje ve vykonávání přerušeného programu Podprogram pro obsluhu přerušení není spouštěn instrukcí call. Je aktivo- ván HW prostředky (řadič přerušení, procesor, …) 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.

12 Příklad na přerušení Mikro- počítač Generátor Impulsů (0.01s) Přerušení Př.: Přerušení 0.01s IntT1:push A mov A, 0AAh jz IT1 dec A mov 0AAh, A IT1_1:pop A ret 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í. Ve složitějších aplikacích je možno podobných ČASOVAČŮ zřídit mnoho (každý na jiné adrese).


Stáhnout ppt "Zásobník (LiFo) Dno zásobníku Vrchol zásobníku Fronta (FiFo) Čelo fronty Konec fronty Vkládaná položka Vyjímaná položka Vkládaná položka Vyjímaná položka."

Podobné prezentace


Reklamy Google