< Programmeren in TI-83+ Assembly < Speciaal

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 data

ld

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-getal16-bit-getal
8-bit-register MogelijkNiet mogelijkMogelijkNiet mogelijk
16-bit-register Soms mogelijkNiet mogelijkNiet mogelijkMogelijk
Geheugenadres Alleen vanuit aMogelijkNiet mogelijkNiet 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

ex wisselt twee registers om. ex roep je aan met

    ex (reg1), (reg2)

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

ldir

Logische instructies

Er zijn vier logische instructies.

and

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

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

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

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

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

set

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

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

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

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

jp

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

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.

call

ret

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

De stack

push

Stopt een registerpaar op de stack

pop

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

Rekenen

add

sub

inc

dec

cp

This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.