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

Programmeren in TI-83+ Assembly


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 dataBewerken

ldBewerken

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.

exBewerken

ex wisselt twee registers om. ex roep je aan met

    ex (reg1), (reg2)

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

ldirBewerken

Logische instructiesBewerken

Er zijn vier logische instructies.

andBewerken

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.

orBewerken

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.

xorBewerken

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.

cplBewerken

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-instructiesBewerken

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

setBewerken

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

    set bitnummer, (reg)

(reg) is een register of (hl).

resBewerken

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

    res bitnummer, (reg)

(reg) is een register of (hl).

bitBewerken

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

ControleBewerken

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

jpBewerken

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.

jrBewerken

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.

callBewerken

retBewerken

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

De stackBewerken

pushBewerken

Stopt een registerpaar op de stack

popBewerken

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

RekenenBewerken

addBewerken

subBewerken

incBewerken

decBewerken

cpBewerken

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