Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > 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: > > <code>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;</code> > > > > Es heiß thier eben nur "CALC". > > Deutet das nicht auf den Compiler? > > Beste Grüße > Thomas