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 Thomas - 11.11.2004 23:57)
Als Antwort auf Re: if-Abfrage bei Datentyp long von André H. - 11.11.2004 23:16
Ich nutze:
C-Control II Unit, CC2-Application-Board, eigenes Board, OSOPT V3.0
Hallo Andrè,

ich wollte eigentlich nur schnell meine Rolladen- und Alarmsteuerung bauen. Aber dieses Thema ist ja
auch interessant.

Mit Assembler habe ich in etwa bei 8080  und  6502 vor 25 Jahren aufgehört. Ich sehe zwar grob was da
passiert, aber richtig lesen kann ich das OS leider nicht. Da bist Du, neben den Interna, um Lichtjahre
vorne.

Wenn die VM einen Long oder Float auf dem Stack hat, muss sie das doch wissen? Sonst kein korrekter "pop" und damit
keine korrekter "return", oder? Oder wird bei einem einfachen Ausdruck / Literal, egal ob long oder float
nur ein Wort (die unteren 16 Bit) übergeben. Dann wäre die VM / das OS bereits zu spät, um den
Fehler zu fixen. Wie schaut der VM-Code für einen einfachen Ausdruck aus?


> > wenn ich den Code des Compilers richtig verstehe, enthält der generierte VM-Code im zweiten Fall
> > einen CAST-Operator. Im ersten, bei dem Literal, scheint INT default zu sein.
>
> Hier liegst zu ziemlich richtig.
> CAST ist bei der VM kein richtiger Operator. Zumindest kein extra VM-Code.
> Es ist eher ein Parameter, der dem eigentlichen Operator mit angegeben wird, damit
> die VM-Routine "weiÃ?" mit welchen Datentyp sie arbeiten soll.
>
> Ein CAST-Parameter ist nur bei folgenden VM-Codes möglich:
> const VM_ADD                      = ( VM_CODE_B |  5 );
> const VM_SUB                      = ( VM_CODE_B |  6 );
> const VM_MUL                      = ( VM_CODE_B |  7 );
> const VM_DIV                      = ( VM_CODE_B |  8 );
> const VM_MOD                      = ( VM_CODE_B |  9 );
> const VM_EQU                      = ( VM_CODE_B | 10 );
> const VM_NEQU                     = ( VM_CODE_B | 11 );
> const VM_HI                       = ( VM_CODE_B | 12 );
> const VM_HIS                      = ( VM_CODE_B | 13 );
> const VM_LO                       = ( VM_CODE_B | 14 );
> const VM_LOS                      = ( VM_CODE_B | 15 );
> const VM_AND                      = ( VM_CODE_B | 16 );
> const VM_NAND                     = ( VM_CODE_B | 17 );
> const VM_OR                       = ( VM_CODE_B | 18 );
> const VM_NOR                      = ( VM_CODE_B | 19 );
> const VM_XOR                      = ( VM_CODE_B | 20 );
> const VM_NXOR                     = ( VM_CODE_B | 21 );
> const VM_SHL                      = ( VM_CODE_B | 22 );
> const VM_SHR                      = ( VM_CODE_B | 23 );
> const VM_ASR                      = ( VM_CODE_B | 24 );
> const VM_ROL                      = ( VM_CODE_B | 25 );
> const VM_ROR                      = ( VM_CODE_B | 26 );
> const VM_MIN                      = ( VM_CODE_B | 27 );
> const VM_MAX                      = ( VM_CODE_B | 28 );
>
>   const CALC_INT_INT              = 0;
>   const CALC_INT_LONG             = 1;
>   const CALC_INT_FLOAT            = 2;
>   const CALC_LONG_INT             = 3;
>   const CALC_LONG_LONG            = 4;
>   const CALC_LONG_FLOAT           = 5;
>   const CALC_FLOAT_INT            = 6;
>   const CALC_FLOAT_LONG           = 7;
>   const CALC_FLOAT_FLOAT          = 8;

>
> Es heiÃ? thier eben nur "CALC".

Deutet das nicht auf den Compiler?

Beste Grü�e
Thomas


    Antwort schreiben


Antworten:

Re: if-Abfrage bei Datentyp long (von André H. - 19.11.2004 11:41)
    Re: if-Abfrage bei Datentyp long oder float (von krassos - 7.11.2005 15:32)