Forum: Mikrocontroller und Digitale Elektronik Interpreter-System mit AVR


von Matthias (Gast)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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 :-)

von Markus (Gast)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.