Programmeren in TI-83+ Assembly/Registers en procedures/De OP-registers: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Willem1 (overleg | bijdragen)
nieuwe pagina
 
Willem1 (overleg | bijdragen)
informatie toegevoegd
Regel 8:
Het voordeel van OP-registers is dat TI allerlei bcalls heeft meegegeven aan het besturingssysteem om ermee te rekenen. Er zijn bijvoorbeeld bcalls om op te tellen, af te trekken, enzovoorts.
 
==EenDe getalstructuur invan een OP-register laden==
HetDe ladenstructuur van getallen in een OP-register is vrij ingewikkeld. Je moet als eerste weten hoe een OP-registerZie inde elkaarafbeelding zithieronder.
 
<center>[[Image:Assembly_OP-registers.png|600px]]</center>
 
Een OP-register bestaat dus uit in totaal 11 bytes:
* Byte 1 is het teken van het getal (positief of negatief). Dit kan twee waarden aannemen: $00 betekent positief en $80 betekent negatief.
* Byte 2 is de exponent van de tien-macht. Bijvoorbeeld bij 5,22·10^74 is de exponent 74. Maar wat nu als de exponent kleiner is dan 0? Je kunt immers geen negatief getal opslaan in een byte. Daarom wordt iedere exponent vermeerderd met $80 (= 128). Het resultaat is dus (voor 5,22·10^74) 128 + 74 = 202 = $CA. Voor negatieve exponenten wordt de uitkomst dus kleiner dan $80.
* Byte 3-9 bevatten de echte cijfers van het getal. Vreemd genoeg wordt het getal decimaal opgeslagen: ieder cijfer komt in een halve byte (dus 4 bits) te staan. Voor ons getal 5,22·10^74 wordt dat dus $52, $20, $00, $00, ... De hexadecimale waarden A-F kunnen dus nooit worden gebruikt. Het getal wordt altijd in strikt wetenschappelijke notatie opgeslagen, dus precies één cijfer voor de komma. Het getal 10 sla je dus op als 1,0·10^1. Op deze manier weet de TI waar de komma valt.
* Byte 10-11 bevatten vier extra cijfers, die nodig zijn om de precisie bij rekensommen te garanderen. Stel je voor dat je 100 deelt door 3 en het resultaat in OP1 zet. Stel dat er dan geen extra cijfers waren, en we het getal weer met 3 zouden vermenigvuldigen, dan zou het resultaat 99,99999... zijn in plaats van 100. Om dit soort afrondingsfouten te voorkomen, rekent de TI met 4 cijfers extra.
 
==Een getal in een OP-register zetten==
Om een getal in een OP-register te laden, moet je de benodigde 9 bytes (de extra cijfers hoef je niet mee te nemen) eerst ergens in het geheugen zetten, bijvoorbeeld onderaan het programma. Laad daarna in hl het geheugenadres van de eerste byte van de te kopiëren data. Roep daarna de bcall '''_Mov9ToOP''x''''' aan (met ''x'' is 1 of 2). Deze bcall laadt de negen bytes, te beginnen bij (hl), in OP1 of OP2.
Het voorbeeld hieronder laadt de eerste decimalen van π in OP2.
<!-- dit programma moet nog getest worden -->
<pre> ld hl, GetalPi
bcall(_Mov9ToOP2)
 
GetalPi:
.db $00, $80, $31, $41, $59, $26, $53, $58, $97</pre>
 
==Rekenen met OP-registers==
Nu komen we bij het doel van het gebruik van OP-registers. Er is een gigantische hoeveelheid bcalls om met OP's te rekenen.
 
{| class="prettytable"
|-
! _Plus1
| OP1 = OP1 + 1
|-
! _Minus1
| OP1 = OP1 - 1
|-
! _FPAdd
| OP1 = OP1 + OP2
|}
 
{{sub}}
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.