hallo Forumgemeinde, ich brauche etwas Hilfe zu Forth. Ich komme nicht so ganz mit den Wörtern klar. Ich habe natürlich eine Word-Liste aber die ist natürlich auch auf Englisch. Ich würde gerne mal wissen wie groß der Adressbereich ist. Wenn z.B. der Stack leer ist. Dann geben ich z.B. 1 ein, dann 2 und dann 3, 4, 5, 6. Das heißt ich habe ganz unten die eins und am TOS (top of stack) die 6. Jetzt möchte ich mit dem Befehl SP@ auf die 2 zugreifen, und auf TOS legen. Aber ich bekomme das irgendwie nicht hin. Ich bekomme immer nur komische Zahlen. Ich glaube es liegt auch daran das ich eigentlich gar nicht weiß wie groß die Adressen für eine eingegebene Zahl ist. Mir ist auch nicht so der unterschied zwischen @ und SP@ klar. Hat von euch jemand Ahnung wie das geht oder wo ich eventuell eine gute Beschreibung zu den Wörtern bekomme? Danke für eure Mühe und einen schönen Abend noch… Gruß Dirk
Wow. es gibt noch Forth-Programmierer? die Adresse von Stack-Werten kannst du dir glaubich nicht ausgeben lassen, aber um auf "tiefer" am Stack versteckte Werte zuzugreifen gibt es "PICK" 1 2 3 4 5 2 PICK . Gibt "3" aus. Ansonsten Google nach "Forth Tutorial" findet >1Mio Seiten... vielleicht ist ja was brauchbares dabei ;) /Ernst
Stackgröße + ähnliches ist bei Forth sehr stark implementationsabhängig. Sollte also in der Dok der verwendeten Systems enthalten sein. Gruß Thomas
SP@ gibt die Adresse des Top of Stack auf den Stack ( --- addr) was man dann damit machen kann ist implementationsabhängig da Stack Richtung grösserer oder kleinerer Adressen wachsen kann . @ holt Wert aus Speicheradresse in Top of Stack ( addr --- wert). Ansonsten www.forth-ev.de
Alles klar, ich habe es jetzt, glaub ich, kappiert. Wenn ich jetzt z.B. 6 Zahlen eingeben (1, 2, 3, 4, 5, 6)die jeweils ein Byte haben, kann ich mit dem Befehl: sp@ 4 2@ den Stackpointer erst mal auf TOS bringen, dann um 4 Byte nach unten setzen und dann die nächsten 2 Byte auf TOS holen, so richtig?? Danke noch mal für eure mühe!!! Gruß Dirk
Hmm, das weiß ich nicht so genau. Es startet mit "THE UNIFORTH SAMPLER" von Unified Software Systems. Das haben wir in der Vorlesung zur verfügung gestellt bekommen. Grüße :o)
Versuch das Buch 'Programmieren in Forth' von Leo Brodie ISBN 3-446-14070-0 zu bekommen. Gibt es zwar schon lange nicht mehr, ist aber ein Super Forth-Buch für Anfänger bis Profie. Besonders interresant ist der interne Aufbau von Forth, und das jahrelang vor Smalltalk oder Lisp.
@Dirk Post von 17:55 sp@ 4 2@ gibt die Aktuelle Stackadresse und darüber das 32bitWort von Adresse 4 auf dem Stack Das von Dir beschriebene Verhalten hat sp@ 4 - @
Warum benutzt du nicht einfach PICK? SP@ gehört AFAIK nicht zum Standard ANS Forth. BTW: Ich emphehle: http://www.forth.com/forth/fph.html Das Buch ist der Hammer! Anhand dieses Buchen konnte ich nicht nur (ohne Vorkenntnisse) relativ schnell FORTH lernen, sondern habe auch ein portables Forth-System in C geschrieben.
Pick in fig forth : PICK DUP + SP@ + @ ; SP@ kann man zb gebrauchen wenn man den n_obersten Datenstackwert ersetzen möchte. Oder man braucht 32bitwert an n. Oder ... . Das ist ja grad eine Stärke von Forth . Code ergibt sich eigentlich aus dem von PICK. Natürlich nicht Standart. Es gibts Fortsysteme deren Datenstack nicht im von @ erreichbarem Adressraum liegt, dann muss PICK anders aussehen.
ich will in Forth einen Befehl TWIDDLE der die Daten (256 Gleitkkommazahlen) im Eingabefeld in bitreverse order umsortiert. So dass die Beschreibung: TWIDDLE adr— Umsortierung in bitreverse order gilt, BSP: FFT IN TWIDDLE 3 MFG Andrea
ich will in Forth einen Befehl TWIDDLE der die Daten (256 Gleitkkommazahlen) im Eingabefeld in bitreverse order umsortiert. So dass die Beschreibung: TWIDDLE adr— Umsortierung in bitreverse order gilt, BSP: FFT IN TWIDDLE 3 MFG Andrea
Ist ja schon gut. Offenbar gibt es hier niemanden, der gut genug Forth kann um dir deine Hausaufgaben zu erledigen. Vielleicht weiß aber auch nur niemand, was eine 'bitreverse order' eigentlich ist.
'bitreverse order' mit drei Bits http://www.mathworks.com/access/helpdesk/help/toolbox/dspblks/ug/f15-8003.html Andrea hat anscheinend acht Bits (256 Indices). Mir ist der Forth Teil unklar. > BSP: FFT IN TWIDDLE 3 Könnte ich mir zusammenreimen mit Werte (FFT) einlesen (IN) und dann das neue Wort (TWIDDLE) darauf anwenden. Was hat die 3 (adr-) zu sagen?
Die Dame hatte doch diese Hausaufgabe neulich schon mal gepostet. Scheint ja zwischendurch noch nicht wieder ernsthaft drüber nachgedacht zu haben.
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.