1 / 12

Zásobník (LiFo)

Zásobník (LiFo). 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. Implementace zásobníku. 16-ti bitový registr SP (Stack Pointer) obsahuje aktuální adresu vrcholu zásobníku.

haley
Télécharger la présentation

Zásobník (LiFo)

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. Zásobník (LiFo) 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. 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. 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. 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 mov R1, #0 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 call W jmp LOOP W: mov R1, #0 W1: mov R0, #0 djnz R0, $ djnz R1, W1 ret

  9. Příklad podprogramu Př.: Podprogram-Displej DISPL: cjne R7, #0, D1 mov A, #00111111B jmp DISEND D1: cjne R7, #1, D2 mov A, #00000110B jmp DISEND D2: cjne R7, #2, D3 mov A, #01011011B jmp DISEND D3: cjne R7, #3, D4 mov A, #01001111B jmp DISEND D4: cjne R7, #4, D5 mov A, #01100100B jmp DISEND D5: cjne R7, #5, D6 mov A, #01101101B jmp DISEND D6: cjne R7, #6, D7 mov A, #01111101B jmp DISEND D7: cjne R7, #7, D8 mov A, #00000111B jmp DISEND D8: cjne R7, #8, D9 mov A, #01111111B jmp DISEND D9: cjne R7, #9, ERR mov A, #01101111B 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. 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 djnzRn,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. Přerušení 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. 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).

More Related