Programmeren in TI-83+ Assembly/Input en output/Logische en bit-instructies
In dit hoofdstuk komt er weer een lading instructies om logische bewerkingen uit te voeren en individuele bits aan te passen.
Logische instructies
bewerkenEr zijn vier logische instructies.
and
bewerkenand 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
bewerkenor 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
bewerkenxor 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
bewerkencpl 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
bewerkenEr zijn drie bit-instructies. Met deze instructies is het mogelijk om bepaalde bits in een register te veranderen.
set
bewerkenset zet een bit van een bepaald register op 1. set roep je aan met
set bitnummer, (reg)
(reg) is een register of (hl).
res
bewerkenres zet een bit van een bepaald register op 0. res roep je aan met
res bitnummer, (reg)
(reg) is een register of (hl).
bit
bewerkenbit 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).
Systeemvlaggen
bewerkenSysteemvlaggen zijn bits op een bepaalde plek in het geheugen die het gedrag van de rekenmachine bepalen. Je kunt een systeemvlaggen aan- en uitzetten met de instructies hierboven. Bijvoorbeeld: zet de systeemvlag TextInverse (alle tekst wordt nu wit geschreven op een zwarte achtergrond) aan.
ld hl, $89F5 set 3, (hl)
Hieronder een tabel met een paar belangrijke (en leuke) systeemvlaggen. In de kolom Voorbeeld zie je hoe je de systeemvlag aan zet.
Naam | Geheugenadres | Bitnummer | Voorbeeld | Wat gebeurt er als deze aan is? |
---|---|---|---|---|
TextInverse | $89F5 | 3 | ld hl, $89F5 set 3, (hl) |
Alle tekst wordt wit geschreven op een zwarte achtergrond. |
IndicRun | $8A02 | 0 | ld hl, $8A02 set 0, (hl) |
De run-indicator is aan (het flikkerende balkje rechtsboven in het scherm). |
LwrCaseActive | $8A14 | 3 | ld hl, $8A14 set 3, (hl) |
Je kunt voortaan kleine letters op het basisscherm typen (alpha-alpha). |
DonePrgm | $89F0 | 5 | ld hl, $89F0 set 5, (hl) |
"Done" wordt getoond na het uitvoeren van een TI-Basic-programma. |