# 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

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
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
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
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
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
(reg) is een register of (hl).

### res

res zet een bit van een bepaald register op 0. res roep je aan met
(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
(reg) is een register of (hl).

## Systeemvlaggen

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