Tellen & Talstelsels (6)

Inhoud:

[1] tellen
[2] modulus rekenen
[3] gekoppelde tellers
[4] een gerobotiseerd onderdelen magazijn
[5] talstelsels
[6] negatieve getallen
[7] som, verschil, complement
[8] antwoorden


Negatieve getallen
De tellertjes krijgen een extra mogelijkheid: een signaal om de waarde te verlagen.
Een 10-tallige teller zal op een reeks verlagingen reageren met de rij
0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6,....

Bij de overgang van 0 naar 9 geeft de teller een "borrow" signaal door, dat
een volgend tellertje kan aandrijven.
Opmerking:
Hieronder staat een 5-bits telwerk, dat zowel kan bij- als aftellen.




Een telwerk van 5 bits kan 25 = 32 codes weergeven, nl. 0 0000 ... 1 1111

Voor het coderen van negatieve getallen ligt het voor de hand, van die 32 codes
er 16 aan positieve (0 .. 15) en 16 aan negatieve getallen (-1 .. -16) toe te kennen.

Het telwerk hierboven laat zien hoe die codes ontstaan:

aan het meest linkse bit is het teken te zien: Registers en berekeningen
Een tweetallig cijfer heet een bit.
Een geheugen van aantal bits, die samen een getal vormen, heet een register.
In een processor vinden berekeningen plaats tussen registers.
De registers zijn 8, 16, 32 of 64 bits lang.

Registers ontvangen hun informatie uit het geheugen.
Na de berekening worden de resultaten weer in het geheugen opgeborgen.
De ruimte in de registers is namelijk beperkt.
Alleen de getallen waarmee op dat moment wordt gerekend, staan daarin.

Getallen kunnen positief, zonder teken worden opgevat. Dat heten unsigned integers.
Getallen met een teken heten signed integers.
De Pentium heeft verschillende bewerkingen voor signed- en unsigned integers.

Opmerking: integer is het Engelse woord voor "geheel getal".

Negatieve getallen coderen
Voor het principe is het niet belangrijk uit hoeveel bits een getal bestaat.
We gebruiken het 5-bits telwerk hierboven.

Stel, dat we -7 willen coderen.
-7 heet het complement van 7.
Er moet gelden: (7) + (-7) = 0
of (-7) = 0 - (7)
0 mag vervangen worden door een ander getal G,
zolang G mod 32 maar gelijk is aan 0.
dus Controle: 0 0111 + 1 1001 = (1) 0 0000, klopt. De waarde [ ]wordt genegeerd,
want die valt buiten het register.

Voor het aftrekken van registers heeft een processor geen aparte schakelingen nodig.
Aftrekken gebeurt door optellen van het complement.

Nu werd is het voorbeeld hierboven, het complement van 7 bepalen, wel degelijk afgetrokken.
Maar met een trucje is dat te vermijden.
In plaats van 0 0000 is te schrijven 1 1111 + 1, zodat
Aftrekken van 1 1111 komt neer op omdraaien van het bit: 0 wordt 1 en 1 wordt 0.

Opmerking: het 1-complement van 0 0111 is 1 1000
het 2-complement van 0 0111 is 1 1000 + 1 = 1 1001

Voorbeeld.
We bepalen een 16-bit integer, die gelijk is aan -27543.


Op de volgende page staan enkele registers om te oefenen.