Programmeren in TI-83+ Assembly/Geheugenbeheer/Het gebruik van EQU
TASM heeft een handige functie, je kunt namelijk bepaalde geheugenadressen vervangen door woorden. Dit kan met .equ.
Wat doet .equ?
bewerkenStel je voor, je hebt een adres in het geheugen, waarin je een bepaald bedrag opslaat. Dit adres is bijvoorbeeld $A458. Je moet nu iedere keer dit adres intypen om de variabele te gebruiken. Dit is natuurlijk niet handig. Kijk nu naar de regel hieronder.
bedrag .equ $A458
Nu kun je voortaan overal het woordje "bedrag" typen in plaats van $A458, wat natuurlijk veel makkelijker is. Dit is ook veel minder gevoelig voor fouten, want je typt heel gemakkelijk het verkeerde geheugenadres in, wat waarschijnlijk tot een RAM-crash leidt.
Hoe labels werken
bewerkenMijnLabel:
Deze regel definieert een label, namelijk MijnLabel. Maar hoe werkt dit nu? Tijdens het compileren houdt TASM (de compiler dus) een tellertje bij hoeveel bytes er al zijn gecompileerd. Deze teller heet de Location Counter (ofwel LC). Je kunt hem aanroepen met $. Hij start bij $9D93 omdat het programma in dat geheugenadres wordt neergezet bij het uitvoeren. Bij het compileren van iedere instructie wordt het aantal bytes van die instructie bij de LC opgeteld. Stel je voor dat TASM de bovenstaande regel tegenkomt als de LC op $AAAA staat. Nu wordt de regel simpel geïnterpreteerd als
MijnLabel .equ $
wat door de compiler wordt vervangen door:
MijnLabel .equ $AAAA
Als je nu ernaartoe gaat springen:
jp MijnLabel
ziet het er eigenlijk als volgt uit:
jp $AAAA
Op die manier weet de processor waar hij naartoe moet springen.
Nog een manier voor variabelen
bewerkenWil je variabelen gebruiken, dan kun je ze achter het programma zetten. Maar je kunt ook andere plekken in het geheugen gebruiken. Bijvoorbeeld $9872 t/m $9B71, wat geheugen is dat niet wordt gebruikt door de rekenmachine. In de include-file staat $9872 gedefinieerd als appBackUpScreen. Dus stel je voor dat je een variabele wilt maken, kan dat ook zo:
bedrag .equ appBackUpScreen ; = $9872 bedrag2 .equ appBackUpScreen + 1 ; = $9873
Denk bij het definiëren van variabelen wel goed na, want als je nu bijvoorbeeld hl opslaat in bedrag, dan overschrijft hij zowel $9872 als $9873, omdat ieder geheugenadres maar één byte is en hl twee bytes is. Verder moet je hl zeker niet opslaan in $9B71, want dan overschrijft hij ook $9B72 en dat zorgt voor een crash, met inmiddels bekend geachte gevolgen.