Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
forth:fgforth:see [2018/02/13 16:00] – angelegt volkerp | forth:fgforth:see [2020/01/07 08:08] (aktuell) – volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Decompiler | + | ====== |
- | SEE ist ein kleiner Decompiler nach F83. | + | |
+ | **SEE** ist ein kleiner Decompiler nach F83. | ||
Benutzung: | Benutzung: | ||
Zeile 10: | Zeile 11: | ||
Beispiel: | Beispiel: | ||
< | < | ||
+ | : << | ||
+ | |||
SEE << | SEE << | ||
: << | : << | ||
Zeile 26: | Zeile 29: | ||
| ;ok | ; | | | ;ok | ; | | ||
| (DO) .. (LOOP) | DO .. LOOP | | | (DO) .. (LOOP) | DO .. LOOP | | ||
+ | | (?LEAVE) | ?LEAVE | | ||
| ?BRANCH m1 .. m1: | IF .. THEN | | | ?BRANCH m1 .. m1: | IF .. THEN | | ||
| ?BRANCH m1 .. BRANCH m2 m1: ... m2: | IF .. ELSE .. THEN | | | ?BRANCH m1 .. BRANCH m2 m1: ... m2: | IF .. ELSE .. THEN | | ||
Zeile 31: | Zeile 35: | ||
| m1: .. ?BRANCH m2 .. BRANCH m1 m2: | BEGIN .. WHILE .. REPEAT | | | m1: .. ?BRANCH m2 .. BRANCH m1 m2: | BEGIN .. WHILE .. REPEAT | | ||
| m1: .. BRANCH m1 | BEGIN .. AGAIN | | | m1: .. BRANCH m1 | BEGIN .. AGAIN | | ||
+ | |||
+ | < | ||
+ | IF +-- ?BRANCH m1 | ||
+ | ... | ||
+ | THEN +-> m1: | ||
+ | +-|-> m1: | ||
+ | ... | | ||
+ | THEN +-> m2: | ||
+ | |||
+ | |||
+ | BEGIN +--> | ||
+ | ... | ||
+ | UNTIL +-- ?BRANCH m1 AGAIN +-- BRANCH m1 | ||
+ | |||
+ | |||
+ | BEGIN +---> | ||
+ | ... | | ||
+ | WHILE | +-- ?BRANCH m2 | ||
+ | ... | | | ||
+ | REPEAT | ||
+ | +-> m2: | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | **REASS** ist ein zugehöriger Reassembler. | ||
+ | |||
+ | Er bindest sich in SEE ein. SEE zeigt dann auch Code-Worte an: | ||
+ | |||
+ | < | ||
+ | 1 GET REASS | ||
+ | 1 22 THRU | ||
+ | |||
+ | SEE COUNT | ||
+ | COUNT is | ||
+ | 0F70: POP HL | ||
+ | 0F71: LD E,(HL) | ||
+ | 0F72: LD D,00 | ||
+ | 0F74: INC HL | ||
+ | 0F75: EX DE,HL | ||
+ | 0F76: JP 0420 | ||
+ | 0F79: END | ||
+ | ok | ||
+ | </ | ||
+ | |||
+ | |||
+ | Durch Anpassen von (.PFA) kann die Ausgabe Forth-ähnlicher gestaltet werden. Allerdings ist es dann schwierig, Verzweigungen und Schleifen zu erkennen: | ||
+ | |||
+ | < | ||
+ | DECOMPILER DEFINITIONS | ||
+ | : (.PFA) | ||
+ | DUP @ ?SPECIAL SPECIAL DUP | ||
+ | 0= ?STOP OR UNTIL DROP ; | ||
+ | ' (.PFA) IS .PFA | ||
+ | </ | ||