Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: if-Abfrage bei Datentyp long Kategorie: Programmierung (von André H. - 11.11.2004 23:10)
Als Antwort auf Re: if-Abfrage bei Datentyp long von Thomas - 11.11.2004 21:54
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Thomas,

> ... (vorher war es ja im Wertebereich eines int - habe falsch abgetippt).

Das hätte ich auch sehen müssen. Dabei habe ich schon eine neue Brille. ;-)

Du hast recht. Ein Binärvergleich oberhalb des 16. Bits ist nicht möglich.
Ich hab' kurz in die VM gesehen. IF-Bedingungen werden immer nur 16 Bit-weise ausgewertet.
Im Falle von Longvariablen heiÃ?t dies, daÃ? die oberen 16Bit abgeschnitten werden.

Es gibt nämlich nur einen VM-Code, der beim If zu tragen kommt:
VM_BRANCH_IF_ZERO
Und dieser prüft nur den letzten 16Bit-Stack-Eintrag, ob dieser 0 ist.
So sieht die Routine im OS aus:

0x69d8:  MOV     [-R0],R12                      ;VM_BRANCH_IF_ZERO
0x69da:  CALLS   0x765a ;POP_R4
0x69de:  MOV     R12,[R0+]      ;Branch-Ziel
0x69e0:  CMP     R4,#0x0
0x69e2:  JMPR    cc_NZ,0x69e8
0x69e4:  ADD     0xf92c,R12     ;Branch zur aktuellen Adresse addieren
0x69e8:  RETS ;Rücksprung, VM macht ab der geänderten Adresse weiter


Man müsste irgendwie erkennen, ob sich im Stack ein 16Bit oder ein 32Bit-Eintrag
befindet. Ob eine Erkennung möglich ist, habe ich aber noch nicht geprüft.
Falls ja, könnte ich evtl. eine änderung dieser Routine für OSOPT V3.1 vornehmen.

Bis dahin muÃ?t Du leider mit dem Konstrukt
if Bedingung!=0 Anweisung;
bei Long-Werten vorlieb nehmen.
Denn für alle Operatoren gibt es auch CAST-Anweisungen. NAtürlich nur als VM-Code,
nicht direkt in C2. (Das macht der Compiler von selbst.)
Für "If" gibt es dies leider nicht.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: if-Abfrage bei Datentyp long (von Thomas - 12.11.2004 0:09)
    Re: if-Abfrage bei Datentyp long (von André H. - 19.11.2004 11:51)
    Re: if-Abfrage bei Datentyp long (von krassos - 12.11.2004 12:46)