Hallo, ich will versuchen ein kleines Interpreter-System für meinen AVR zu schreiben. Dazu will ich den Compiler den Code in Byte-Tokens übersetzen lassen. Im AVR selbst sollen dann die zum Token gehörigen Routinen mit einer Sprungtabelle angesprungen werden. Mit dem folgenden Code kann ich die zum Token gehörige Sprungadresse holen. Wie kann man es schaffen, an diese Adresse (in r1 u. r2) zu springen? MfG Matthias .include "2333def.inc" .def sprung_low = r1 .def sprung_high = r2 ;... ;Token holen ;... ldi r30,low(tabelle) ;Anfang der Tabelle in Z-Pointer ldi r31,high(tabelle) ;Token auf Anfangsadresse addieren ;... lpm ;Low-Byte der Sprungadresse holen mov r0,sprung_low adiw r30,1 ;Z-Pointer inkrementieren lpm ;High-Byte der Sprungadresse holen mov r0,sprung_high ;Sprung an 'sprung_low','sprung_high' ;... ;Routinen für Tokens token1: nop ret token2: nop ret ;... ;Sprungtabelle tabelle: .dw token1,token2
Vielleicht so: push r1 push r2 (oder umgedreht, bin grad zu faul darüber nachzudenken) ret Oder schau dir mal den Befehl icall an. BTW: ich fange auch gerade an einen Interpreter zu schreiben, allerdings direkt für Klartext-Programme. Im Moment bin ich noch beim Parsen von mathematischen Ausdrücken... geklammert funktioniert das schon, aber Punkt vor Strich wäre auch ganz schön, deswegen wird das ganze jetzt neu gemacht :-)
Hi, wieso wollen auf einmal allen Interpreter für AVR schreiben? :) Ich selbst plane einen Interpreter und ein Bekannter von mir auch :)) Wie soll denn Deine Syntax aussehen? Gruß Markus
Meiner soll vielleicht ungefähr so aussehen: int $variable1 int $variable2 $variable1=300 $variable2=($variable1/100)+(25*einefunktion(1,5)) Also ziemlich C-ähnlich. Ist aber alles erst in Planung. Gruß Andreas
Hallo, danke, der icall-Befehl ist genau das, was ich gesucht habe! Ich stehe mit meinem Interpretersystem noch ganz am Anfang. Aber die Syntax soll Pascal ähnlich werden. MfG Matthias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.