Programmeren in TI-83+ Assembly/Speciaal/De instructieset
Hieronder vind je een overzicht van alle processor-instructies die in dit boek gebruikt worden.
Op alfabet: add • and • bit • call • cp • cpl • dec • ex • inc • jp • jr • ld • ldir • or • pop • push • res • ret • set • sub • xor |
Op thema: Registers en data: ld • ex • ldir |
Registers en data
[bewerken]ld
[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
[bewerken]ex wisselt twee registers om. ex roep je aan met
ex (reg1), (reg2)
Te doen: kan ex ook op 16-bit-registers?
ldir
[bewerken]Logische instructies
[bewerken]Er zijn vier logische instructies.
and
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]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
[bewerken]ret
[bewerken]Geeft de controle terug aan het TI-OS of keert terug naar de hoofdfunctie. Deze gebruik je na een call instructie
De stack
[bewerken]push
[bewerken]Stopt een registerpaar op de stack
pop
[bewerken]Haalt de bovenste 16-bits van de stack en stop deze in het aangegeven register. pop [register], zonder de []