Programmeren in TI-83+ Assembly/Speciaal/De instructieset

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

Hieronder vind je een overzicht van alle processor-instructies die in dit boek gebruikt worden.

Op alfabet: addandbitcallcpcpldecexincjpjrldldirorpoppushresretsetsubxor
Op thema:

Registers en data: ldexldir
Logische instructies: andorxorcpl
Bit-instructies: setresbit
Controle: jpjrcallret
De stack: pushpop
Rekenen: addsubincdeccp


Registers en data

bewerken

ld kopieert een getal of de inhoud van een register naar een ander register. ld roep je aan met

    ld (reg), (waarde)

(reg) is hierbij het register waarnaar gekopieerd kan worden, (waarde) is de waarde die hierin gezet moet worden. Deze waarde kan zijn:

  • Een getal. Als (reg) een 8-bit-register is dan kan het getal 0 t/m 255 zijn, als (reg) daarentegen een 16-bit-register is dan kan het getal 0 t/m 65536 zijn.
  • Een 8-bit-register. Dan moet (reg) natuurlijk ook een 8-bit-register zijn.
  • Een 16-bit-register. Dan moet (reg) natuurlijk ook een 16-bit-register zijn.

Verder kan (reg) ook een geheugenadres zijn (dit dient tussen haakjes te worden gezet). Als (waarde) dan een 8-bit-register is, dan wordt de desbetreffende byte in het geheugen beschreven. Als (waarde) een 16-bit-register is, dan wordt niet alleen de opgegeven byte van het geheugen beschreven, maar ook de eerstvolgende. Let daarop bij het toekennen van geheugen. Bij het schrijven naar geheugenadressen is het niet mogelijk om direct een getal op te geven.

Hieronder een tabel van wat wel en niet mogelijk is. In de rijen staat de (reg), in de kolommen staat de (waarde); in de cel op de kruising van deze kolom en rij zie je of dit commando mogelijk is.

8-bit-reg. 16-bit-reg. 8-bit-getal 16-bit-getal
8-bit-register Mogelijk Niet mogelijk Mogelijk Niet mogelijk
16-bit-register Soms mogelijk Niet mogelijk Niet mogelijk Mogelijk
Geheugenadres Alleen vanuit a Mogelijk Niet mogelijk Niet mogelijk

Voorbeelden:

    ld a, 2

zet het getal 2 in het register a.

    ld hl, 3

zet het getal 3 in het register hl.

ex wisselt twee registers om. ex roep je aan met

    ex (reg1), (reg2)

Te doen: kan ex ook op 16-bit-registers?

Logische instructies

bewerken

Er zijn vier logische instructies.

and vergelijkt van twee registers (a en een ander register) iedere bit. Als beide bits aan zijn, gaat in de uitvoer de bit ook aan. De uitvoer wordt dan in a opgeslagen. and roep je aan met

    and (reg)

met (reg) is een 8-bit-register en natuurlijk niet a. Je mag ook direct een getal opgeven. Aangezien het eerste register toch altijd a is, hoef je dit niet door te geven.

Voorbeeld: a=23 (=00010111) en b=11 (=00001011). and b geeft dat a=00000011.

or vergelijkt van twee registers (a en een ander register) iedere bit. Als minstens één van beide bits aan is, gaat in de uitvoer de bit ook aan. De uitvoer wordt dan in a opgeslagen. or roep je aan met

    or (reg)

met (reg) is een 8-bit-register en natuurlijk niet a. Je mag ook direct een getal opgeven. Aangezien het eerste register toch altijd a is, hoef je dit niet door te geven.

Voorbeeld: a=23 (=00010111) en b=11 (=00001011). or b geeft dat a=00011111.

xor vergelijkt van twee registers (a en een ander register) iedere bit. Als één van beide bits aan is (dus níét als ze allebei aan zijn), gaat in de uitvoer de bit ook aan. De uitvoer wordt dan in a opgeslagen. xor roep je aan met

    xor (reg)

met (reg) is een 8-bit-register en natuurlijk niet a. Je mag ook direct een getal opgeven. Aangezien het eerste register toch altijd a is, hoef je dit niet door te geven.

Voorbeeld: a=23 (=00010111) en b=11 (=00001011). xor b geeft dat a=00011100.

cpl neemt register a en draait ieder bit om (0 wordt 1 en 1 wordt 0). De uitvoer wordt dan in a opgeslagen. cpl roep je aan met

    cpl

Aangezien het register toch altijd a is, hoef je dit niet door te geven.

Voorbeeld: a=23 (=00010111). cpl geeft dat a=11101000.

Bit-instructies

bewerken

Er zijn drie bit-instructies. Met deze instructies is het mogelijk om bepaalde bits in een register te veranderen.

set zet een bit van een bepaald register op 1. set roep je aan met

    set bitnummer, (reg)

(reg) is een register of (hl).

res zet een bit van een bepaald register op 0. res roep je aan met

    res bitnummer, (reg)

(reg) is een register of (hl).

bit kijkt naar de waarde van een bit van een bepaald register. Als deze 1 is, gaat de zero-vlag aan. Anders gaat deze uit. bit roep je aan met

    bit bitnummer, (reg)

(reg) is een register of (hl).

Controle

bewerken

Met deze controle-instructies kan er gesprongen worden in het programma.

jp springt naar een bepaald adres in het geheugen. Hier gaat de uitvoering van het programma dan verder. jp roep je aan met

    jp geheugenadres

of

    jp label

Bij de laatste variant vervangt TASM het label automatisch door het bijbehorende geheugenadres.

jr springt ook naar een andere plaats in het programma, maar nu 128 bytes naar voren of naar achter. jr roep je aan met

    jr label

TASM kijkt nu hoeveel bytes het label verwijderd is van de jr-instructie en voegt dat in. Let op: het label waartoe gesprongen wordt, mag niet verder weg zijn van de jr-instructie dan 128 bytes, anders geeft TASM een foutmelding.

Geeft de controle terug aan het TI-OS of keert terug naar de hoofdfunctie. Deze gebruik je na een call instructie

De stack

bewerken

Stopt een registerpaar op de stack

Haalt de bovenste 16-bits van de stack en stop deze in het aangegeven register. pop [register], zonder de []

Rekenen

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