Programmeren in TI-83+ Assembly/Assembly-basis/De stack: verschil tussen versies

Uit Wikibooks
Verwijderde inhoud Toegevoegde inhoud
Willem1 (overleg | bijdragen)
Geen bewerkingssamenvatting
Willem1 (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 41: Regel 41:
|vorigeNaam=Variabelen
|vorigeNaam=Variabelen
|volgendeLink=Programmeren in TI-83+ Assembly/Assembly-basis/Toets
|volgendeLink=Programmeren in TI-83+ Assembly/Assembly-basis/Toets
|volgendeNaam=Toets
|volgendeNaam=Toets hoofdstuk 1
}}
}}



Versie van 31 okt 2009 15:50

Programmeren in TI-83+ Assembly

Voorblad / Inhoudsopgave

Assembly-basis

1 · 2 · 3 · 4 · 5 · T

Controle

1 · 2 · 3 · 4 · 5 · T

Geheugenbeheer

1 · 2 · 3 · 4 · 5 · T

Input en output

1 · 2 · 3 · 4 · 5 · T

Tekenen

1 · 2 · 3 · 4 · 5 · T

Registers en procedures

1 · 2 · 3 · 4 · 5 · T

Applications

1 · 2 · 3 · 4 · T

Gebruikersvariabelen

1 · T

Extra

1 · T

Speciaal

In plaats van variabelen, kun je om registers op te slaan en weer in te lezen ook de stack gebruiken. De stack is een soort rij met getallen. Stel het je voor als een toren met blokken. Je kunt alleen blokken erbij of eraf halen aan de bovenkant. Wat je dus het eerste erin legt komt er het laatste weer uit. Met de stack kun je ook maar twee dingen doen: een registerpaar er 'aan de bovenkant opleggen' en een registerpaar er 'aan de bovenkant afhalen'.

De stack gebruiken

Een registerpaar op de stack leggen

Je kunt alleen registerparen toevoegen aan de stack (dus af, bc, de, hl). Als je bijvoorbeeld af op de stack wilt leggen, gaat dit als volgt.

    push af

Wil je bijvoorbeeld a opslaan op de stack, dan moet je f erbij nemen, omdat je alleen maar registerparen kunt opslaan in de stack.

Iedere keer als iets op de stack gelegd wordt, dan komt dit "bovenop de toren" te liggen. Je kunt dan niet meer direct bij onderliggende getallen.
Merk op dat je een getal dat op de stack ligt, er weer met een ander registerpaar vanaf kunt halen. Dat gebeurt hier bijvoorbeeld met af/de.

Een registerpaar van de stack afhalen

Je kunt aan de 'bovenkant' van de stack een getal afhalen en deze weer opslaan in een registerpaar. Als je bijvoorbeeld het bovenste getal van de stack wilt halen en dit opslaan in af, gaat dat als volgt:

    pop af

Een praktische toepassing

Je weet al dat je er bij instructies vanuit moet gaan dat alle registers veranderd worden. Wil je a bijvoorbeeld bewaren, maar moet er een instructie uitgevoerd worden, kan dat eenvoudig met de stack:

    push af
    ; instructie
    pop af

a is nu weer teruggebracht in zijn oude staat, dus hoe hij was voordat de instructie werd uitgevoerd.

Problemen bij het gebruik van de stack

Er is iets waar je bij het gebruik van de stack heel goed op moet letten. Het besturingssysteem van de TI gebruikt de stack zelf namelijk ook. Je moet de stack dus precies hetzelfde achterlaten als hij was toen het programma startte. Zie het volgende voorbeeld.

    ; start van het programma
    push af
    push hl
    pop af
    ret     ; terug naar de TI-OS

Als het programma wordt beëindigd, en de TI-OS probeert iets van de stack te halen, veroorzaak je een crash (dus het RAM wordt gewist), omdat de stack, en dus het 'bovenste' getal, niet meer hetzelfde is als vóór het programma.

Zorg er dus voor dat de stack altijd gelijk is vóór en na je programma!

Verder kan het programma crashen als je heel veel registerparen op de stack legt (bij ongeveer 100).

← Variabelen De stack Toets hoofdstuk 1 →
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.