Programmeren in TI-83+ Assembly/Controle/Springen en subroutines

Uit Wikibooks

Ga naar: navigatie, zoek
Programmeren in TI-83+ Assembly

WSBN

Je weet al wat labels zijn. Het is mogelijk om naar zo'n label te springen.

Inhoud

[bewerken] jp

Naar een label springen kan met

    jp labelnaam

jp staat voor JumP. Als de processor zo'n regel tegenkomt, gaat hij verder met lezen bij het label met labelnaam. TASM vervangt ieder label namelijk door het geheugenadres daarvan. De regel kan zou dan bijvoorbeeld kunnen worden vervangen door

    jp $8000

De processor weet nu waar hij heen moet springen.

[bewerken] jr

Een andere manier om te springen is

    jr labelnaam

jr staat voor Jump Relative. Dit is één byte kleiner dan jp, maar het kan alleen maar als het label ongeveer 128 bytes vóór of achter de jr-regel staat. Bij jr zet TASM namelijk, in plaats van het precieze geheugenadres, neer hoeveel bytes er gesprongen moet worden. Bijvoorbeeld

    jr 4

Als de label te ver weg staat, krijg je een foutmelding van TASM.

[bewerken] call

Er is nóg een manier van springen, en dat is om subroutines te maken. Het werkt als volgt:

    call Subroutine
    ; instructies-1
    ret

Subroutine:
    ; instructies-2
    ret

Eerst springt de processor naar Subroutine. Daar voert hij dus instructies-2 uit. Als hij ret tegenkomt, gaat hij weer terug naar waar hij vandaan kwam en voert hij instructies-1 uit. Bij de volgende ret eindigt het programma (dus terug naar de TI-OS).

[bewerken] Opdracht

Het resultaat

Maak een programma dat vier keer een tekst op het scherm schrijft. Gebruik daarvoor een subroutine met een bcall. Roep deze vier keer aan. Het resultaat moet er ongeveer uitzien als het plaatje hiernaast.

Klap uit voor het antwoord

Een mogelijk antwoord zie je hier. Vul de standaardcode zelf aan.

    call TekstSchrijven      ; TekstSchrijven aanroepen
    call TekstSchrijven      ; ... en nog een keer ...
    call TekstSchrijven
    call TekstSchrijven
    ret                      ; Terug naar de TI-OS.

TekstSchrijven:
    ; Let op, níét PenCol instellen, want dan zouden de "Hallo!"'s iedere keer op dezelfde plek komen!
    ld    hl, Tekst          ; Laad het label in hl.
    bcall(_PutS)             ; Zet de tekst, die staat vanaf hl (dus het label) op het scherm.
    bcall(_NewLine)          ; Zet de cursor op de volgende regel op kolom 0.
    ret                      ; Terug naar de hoofdmodule.

Tekst:                       ; Label Tekst
    .db "Hallo!", 0          ; Voeg aan het programma de tekenreeks "Hallo!" toe, gevolgd door een nul.


← Controle Springen en subroutines Optellen en aftrekken →
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Persoonlijke instellingen