Inkrement und Dekrement ("Programmieren" lernen)

  • Das Wort Inkrement ist ja schon beim Thema Register - oder: was ist ein Akku ("Programmieren" lernen) schonmal angesprochen worden.

    Dort wurde damit je ein Register hochgezählt. Außerdem konnte mit vielen Inkrementierungen - genau 256 - das Register einmal komplett "durchgezählt" werden. Dabei hat es jeden möglichen Zustand einmal angenommen (was aber nicht per Ausgabe kontolliert worden ist) und war am Ende wieder beim Startwert angekommen.


    Nun ist das Weiterzählen von Zahlen ein ziemlich universeller Vorgang in so einem Rechner. Oft genug auch einfach in Einerschritten, d.h.

    Zahl = Zahl + 1


    Sowas nennt man INKREMENT


    Und wenn es ein Hochzählen gibt, gibt es vermutlich auch ein Herunterzählen in Einerschritten, d.h.

    Zahl = Zahl - 1


    Sowas nennt man DEKREMENT


    Man spricht dann auch von inkrementieren bzw. dekrementieren.


    Man könnte sowas natürlich auch einfach mit einer Addition machen, aber oft ist es bequemer eine extra Anweisung dafür zu haben und zu benutzen.

    Umgekehrt könnte man natürlich auch jede beliebige Addition mit einer basalen Inkrementierung erledigen. Dazu müßte man dann für ein xneu=x+80 die Inkrementierungsanweisung 80 mal ausführen ! Das ist einfach ein bißchen albern, weshalb es eher selten gemacht wird. Davon abgesehen kostet es natürlich auch VIEL mehr Rechenzeit eine Anweisung 80mal auszuführen als gleich die Addition mit +80 durchzuführen.


    ( Strengenommen wäre ein Erhöhen um z.B. +4 ja auch ein Inkrementieren. Und ein Erniedrigen mit -7 ein Dekrementieren. Meist werden die Begriffe aber für +1 bzw. -1 benutzt.)



    Was kann man nun alles Erhöhen bzw. Erniedriegen ?


    Zunächst mal natürlich wieder Register. Daneben werden aber auch bestimmte Strukturen aufgebaut, die auch quasi in jedem Rechner irgendwie da sind, bei denen automatisch etwas inkrementiert oder dekrementiert wird. Das Paradebeispiel dafür ist ein Stack bzw. dessen Stackpointer (siehe Extrathema). Immer dann, wenn man Schleifen bautbenutzt man oft in irgendeiner Form einen Schleifenzähler (Counter), den man so sehr schön hoch/runterzählen kann. Je nach Rechner lassen sich auch beliebige RAM Adressen direkt so verändern (siehe Beispiel).


    Interessant ist auch, daß auch hier wieder der Prozessor bestimmte Änderungen quasi automatisch registriert und mitteilt. Etwa wenn ein Register beim Hochzählen seinen Wert vom größten Wert kommend ändern muß, passiert ja wieder, daß die darstellbare Zahlenmenge überschritten wird, weshalb als Ergebnis eine $00 entsteht aber zusätzlich ein Überlauf registriert wird (den man abfragen kann). (Nebenbei: Gleichzeitig wird dabei auch festgestellt, daß jetzt eine $00 entstanden ist und auch das wird extra "notiert" (im Zero Flag) (siehe im Thread Flags) ).

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • =6502=


    Das man mit INX und INY die Register X bzw. Y hochzählen kann, kann steht schon beim Register Thread.


    Nun will man evtl. diese auch herunterzählen. Das kann man mit DEX und DEY machen.

    Ich schreibe das hier jetzt nicht mit Bild nochmal auf, empfehle aber die Übung mit dem kleinen Programm


    .5000 DEX

    .5001 BRK


    analog zu dem INX bzw. INY mal zu machen. Insbesondere welche Zahl erscheint, wenn man vorher im XR eine $00 stehen hat, sollte man sich anschauen.


    Um den Wert vorgeben zu können (hier eine (hexadezimale) 02), benutzt man


    .5100 LDX#$02

    .5102 BRK



    Und nun mal zu was "Richtigem" !


    Man kann nämlich, wie oben erwähnt, bei bestimmten CPU auch Speicherstellen direkt (!) erhöhen. Also eine Adresse im RAM nehmen und sagen, daß man ihren Wert um +1 erhöhen will.

    Das geht nun so einfach nicht bei allen CPU's (RISC CPU's können sowas i.a. nicht so direkt).

    Beim 6502 geht das aber schon, mit dem Kommando

    INC


    Diesem muß man natürlich noch sagen, welche Adresse erhöht werden soll. Nun kann man einfach alle durchprobieren, oft wird man dabei nichts sehen oder muß es extra abfragen, bei manchen wichtigen wird man irgendwas "verstellen" oder man schafft es den Rechner damit ins Nirvana zu "befehlen".


    Besser ist es, man weiß, welche Adresse man nimmt und was man damit bewirkt.


    Für den C16, Plus/4 gibt es ein paar sehr wirkmächtige; eine besonders nette ist die $FF19. Dort steht nämlich die Farbe des Bildschirmrandes.

    Wenn man deren Wert mit INC erhöht, sollte sich also die Farbe des Randes ändern.


    .5000 INC $FF19

    .5003 BRK


    Einfach ein paarmal mit G 5000 starten und schauen, was passiert !

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    5 Mal editiert, zuletzt von ThoralfAsmussen ()