Naar inhoud springen

Programmeren in TI-83+ Assembly/Assembly-basis/Registers

Uit Wikibooks

Programmeren in TI-83+ Assembly

Voorblad / Inhoudsopgave

Assembly-basis

1 · 2 · 3 · 4 · 5 · T

Controle

1 · 2 · 3 · 4 · 5 · T

Geheugenbeheer

1 · 2 · 3 · 4 · 5 · T

Input en output

1 · 2 · 3 · 4 · 5 · T

Tekenen

1 · 2 · 3 · 4 · 5 · T

Registers en procedures

1 · 2 · 3 · 4 · 5 · T

Applications

1 · 2 · 3 · 4 · T

Gebruikersvariabelen

1 · T

Extra

1 · T

Speciaal

Op deze pagina vind je alles over registers. Registers zijn kleine, zeer snelle geheugens in de processor die worden gebruikt als tijdelijke opslagplaatsen voor data, net zoals je in andere programmeertalen variabelen hebt.

Soorten registers

[bewerken]

Er zijn twee soorten registers: 8-bit-registers en 16-bit-registers.

8-bit-registers

[bewerken]

8-bit-registers kunnen 8 bits aan gegevens opslaan (de naam zegt het al). Dat komt overeen met een getal van 0 tot en met 255. De 8-bit-registers heten: a, b, c, d, e, f, h, l.

16-bit-registers

[bewerken]

Deze registers kunnen dus 16 bits aan gegevens opslaan. Dat is een getal van 0 tot 65535. Eigenlijk zijn deze registers combinaties van twee 8-bit-registers, bijvoorbeeld het register af is een combinatie van a en f. De 16-bit-registers zijn: af, bc, de, hl. Let op: als je iets opslaat in een 16-bit-register, dan wis je de bijbehorende 8-bit-registers. Voorbeeld: als je het geheugenadres $84AA opslaat in hl, dan komt in h $84 te staan en in l $AA (zie figuur hiernaast).

Als je iets opslaat in hl, dan wordt dat eigenlijk gewoon gesplitst en geplaatst in h en l.

Nu we weten wat registers zijn, willen we er ook graag gebruik van maken. Ten eerste zullen we hier bespreken hoe je data in de registers laadt. Dit gaat met de instructie (commando voor de processor) ld. Deze instructie werkt als volgt.

    ld a, b

Deze instructie laadt de gegevens uit register b in register a.

    ld a, 0

Deze instructie laadt het getal 0 in register a.

    ld hl, tekst
[...]
tekst:
    .db "Hoi", 0

Deze instructie laadt het geheugenadres van tekst: in hl, in dit geval dus de plek waar "Hoi" in het geheugen staat. Dit is als het ware een soort verwijzing (pointer). Andere instructies, die data uit het geheugen willen hebben, kunnen dat dan gebruiken. Dit lijkt misschien niet zo belangrijk, maar dat is het wel. Zie de paragraaf over variabelen voor meer informatie hierover.

In principe zijn alle registers hetzelfde, maar soms is het beter om een bepaald register te gebruiken als je iets wilt doen. Soms heb je zelfs geen andere keuze. Wil je bijvoorbeeld getallen optellen, dan moet je één getal in a hebben. Er zijn namelijk geen instructies om iets bij b op te tellen. a wordt ook wel de accumulator of het rekenregister genoemd.

Problemen bij het gebruik van registers

[bewerken]

Er is een groot probleem als je registers gebruikt om data op te slaan. De meeste instructies, zoals bcall's, gebruiken namelijk zelf ook registers! Als je een instructie hebt gebruikt, is er een goede kans dat je data opeens weg is. Gebruik dus geen registers om data voor langere tijd op te slaan. Hiervoor kun je bijvoorbeeld variabelen of de stack gebruiken, waarover je in een volgende les meer zult leren.

Opdracht

[bewerken]

Maak een programma dat het getal 14 in het register a laadt, en dit daarna overzet naar register b.

Klap uit voor het antwoord

Een mogelijk antwoord zie je hier. Vul de standaardcode zelf aan.

    ld a, 14    ; 14 in a laden
    ld b, a     ; a in b laden
    ret         ; terug naar TI-OS

Het antwoord staat achterin het boek.

← Het eerste programma Registers Variabelen →
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.