Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: elegante EEPROM-Adressierung oberhalb 32KByte? Kategorie: C-Control I V1.2/2.0 (von André H. - 6.09.2004 14:53)
 Als Antwort auf Re: elegante EEPROM-Adressierung oberhalb 32KByte? von Achim - 6.09.2004 13:46
Hallo Achim
> > 0 bis 32768 = &h0000 bis &h7FFF
>  
> Typo: bis 32767

Kleiner Tipfehler, kann jedem mal passieren. ;-)

> > Selbst in einer For-Schleife sollte es keine Rolle spielen,
> > Wenn Du z.B.
> > for i = &h7F00 to &h9000
> > schreibst, da hier die Forschleife erst abgebrochen wird, sobald der Endwert erreicht wurde.
>
> Wenn schon, dann "nachdem" und nicht "sobald"

Also, so kleinlich braucht man nicht sein. ;-)
Es war ja klar, was gemeint ist.

> Aber selbst damit meinst Du doch nicht allen Ernstes, dass
>
> FOR i=1 to 0
>   print i
> next
>
> 65536 mal durrchlaufen wird? Das wäre aber eine sehr dämliche und exotische Semantik.

Ähhh, hast Du dies jemals ausprobiert ??
Denn dann wüsstest Du, daß die For-Schleife auf "gleich" und nicht auf größer oder irgendwie
anders prüft, ob der Endwert erreicht wird.
Also halte Dich bitte mit solchen Bemerkungen zurück, wenn Du es nicht genau weißt,
wie For-Schleifen bei der CC1 funzen.

> Da die word-Variablen bei arithmetischen Operationen nunmal vorzeichenbehaftet sind (auch, wenn
> es sedizmale Konstanten > 0x8000 gibt), wird doch wohl eher so sein, dass die Endebedingung
> bei "STEP > 0" "Laufvariable >  Endwert" und bei "STEP < 0" "Laufvariable < Endwert" lautet.

Wie gesagt, funzt das "For" bei der CC1 so eben nicht.
Vorzeichen sind hier völlig unwichtig !
Schau Dir mal das ROM-Listing ab "BASIC Token 74" an. *grins*

Oder dies:

define i word[1]
define x word[2]
for i=0 to -1
 x=x 'Dummyzeile, um die Token besser analysieren zu können.
next

Dies ergibt folgende Tokens:

20 0 0    - Lade Wert 0 auf den Stack
26 0      - Hole Wert vom Stack und speichere in Word-Variable 0 (=word[1])

23 1      - Lade Word-Var.1(=word[2]) auf den Stack
26 1      - Speichere den letzten Stackeintrag in Word-Var.1
           Das ist das x=x
20 0 1    - Lade Wert 1 auf den Stack
50        - Negiere letzten Stack-Eintrag (= -1 = Endwert)
75 0 0 28 - Vergleiche Word-Var.0 mit Wert vom Stack und springe zu Addr. 28,
            wenn beide gleich sind.
20 0 1    - Lade Wert 1 auf den Stack (=step 1)
77 0 0 9  - Addiere zu Wordvariable 0 den letzten Stackwert und
            springe anschließend zu Addr. 9

Das erste Token befindet sich an Addr. 4

Jetzt sollte eigentlich klar sein, wie eine For-Schleife bei der CC1 funzt.
Somit war sogar mein "sobald" vorhin korrekt. *grins*
Denn geprüft wird nicht am Anfang der For-Schleife, sondern am Ende !
Somit hatte ich in meinem letzten Posting nur einen Tipfehler zwecks &h7FFF. ;-)

MfG André H.

 Antwort schreiben

Bisherige Antworten:

Re: elegante EEPROM-Adressierung oberhalb 32KByte? (von Achim - 6.09.2004 15:37)
    Re: elegante EEPROM-Adressierung oberhalb 32KByte? (von André H. - 6.09.2004 20:23)
        Re: elegante EEPROM-Adressierung oberhalb 32KByte? (von Achim - 7.09.2004 0:24)
            Re: elegante EEPROM-Adressierung oberhalb 32KByte? (von Carsten - 7.09.2004 11:17)
                Re: elegante EEPROM-Adressierung oberhalb 32KByte? (von Achim - 7.09.2004 14:44)