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

opdracht
(afbeeldingen naar onderen verplaatst om te voorkomen dat ze naast de inhoudsopgave kwamen te staan)
(opdracht)
 
===Een praktische toepassing===
Je weet al dat je er bij instructiesbcalls 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:
<pre> push af
; instructiebcall
pop af</pre>
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, namelijk om op te slaan waar hij terug moet keren na afloop van het programma. Je moet de stack dus precies hetzelfde achterlaten als hij was toen het programma startte, want anders springt TI-OS ergens anders heen terug en dat is hoogstwaarschijnlijk geen nuttige programmacode. Zie het volgende voorbeeld.
<pre> ; start van het programma
push af
pop af
ret ; terug naar de TI-OS</pre>
Als het programma wordt beëindigd, en de TI-OS probeert iets van de stack te halen, veroorzaak je direct 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).
==Opdracht==
De bcall <code>_PutS</code> vernielt het registerpaar <code>hl</code>. Schrijf een programma dat iets naar het scherm schrijft met <code>_PutS</code> en <code>hl</code> bewaart. Tip: met <code>_DispHL</code> kun je <code>hl</code> wegschrijven naar het scherm om te kijken of je het goed gedaan hebt. {{Niet afdrukken|Als het niet lukt, kijk dan hieronder voor het antwoord.
{{Toggletext
|koptekst=Klap uit voor het antwoord
|hoofdtekst=
...bezig...
</pre>
...bezig...
}}
}}
 
{{Alleen afdrukken|''Het antwoord staat achterin het boek.''}}
 
 
{{VorigeVolgende
775

bewerkingen

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.