Programmeren in TI-83+ Assembly/Geheugenbeheer/Het gebruik van EQU: verschil tussen versies

Uit Wikibooks
Verwijderde inhoud Toegevoegde inhoud
Willem1 (overleg | bijdragen)
Willem1 (overleg | bijdragen)
sub
Regel 27: Regel 27:
bedrag2 .equ appBackUpScreen + 1 ; = $9873</pre>
bedrag2 .equ appBackUpScreen + 1 ; = $9873</pre>
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.
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.


{{sub}}

Versie van 5 okt 2009 18:28

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

TASM heeft een handige functie, je kunt namelijk bepaalde geheugenadressen vervangen door woorden. Dit kan met .equ.

Wat doet .equ?

Stel 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

MijnLabel:

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

Wil 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.

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