VM-Instruction-Set (kuratiert)
Dieses Kapitel bindet das Instruktionsset der VM ein und ergaenzt es um Hinweise zur Nutzung im Unterricht.
Hinweise
- Die P-Code-Instruktionen sind zentral fuer das P-Code-Handbuch.
- Beispiele in diesem Handbuch referenzieren diese Liste.
Originalinhalt
TinyPl0 VM-Befehlssatz
Instruktionsformat
Jede Instruktion besteht aus:
op: Opcodel: Lexikalische Level-Differenza: Argument (Adresse oder Untercode)
Kodiert in C# als:
Opcodes
| Opcode | Wert | Bedeutung |
|---|---|---|
lit |
0 | Konstante a auf Stack laden |
opr |
1 | ALU-/Kontrolloperation nach Untercode a |
lod |
2 | Variable aus statischer Tiefe l, Offset a laden |
sto |
3 | Obersten Stackwert in statische Tiefe l, Offset a speichern |
cal |
4 | Prozeduraufruf mit statischem Link |
int |
5 | Stack um a Zellen erweitern |
jmp |
6 | Unbedingter Sprung zu a |
jpc |
7 | Bedingter Sprung zu a bei 0 auf Stack |
Klarstellung zu Inc, Int und int
Deutsch:
Historische P-Code-Artefakte schreiben die Stack-Reservierungsoperation oft als
Inc. TinyPl0 liest diese Eingabe ebenfalls ein und bildet sie intern auf
denselben Opcode Int ab. In TinyPl0-Listings, ToAsm()-Ausgaben und der
gepflegten Dokumentation bleibt die kanonische Textform trotzdem int, damit
aktuelles Lernmaterial und bestehende Artefakte konsistent bleiben.
English:
Historical P-Code artifacts often write the stack-reservation operation as
Inc. TinyPl0 accepts that input as well and maps it internally to the same
Int opcode. In TinyPl0 listings, ToAsm() output, and the maintained
documentation, the canonical text form still stays int so current teaching
material and existing artifacts remain consistent.
OPR-Untercodes
| Untercode | Bedeutung |
|---|---|
| 0 | Return (Frame verlassen) |
| 1 | Vorzeichenwechsel (-x) |
| 2 | Addition |
| 3 | Subtraktion |
| 4 | Multiplikation |
| 5 | Division |
| 6 | odd-Test |
| 8 | Gleichheit (=) |
| 9 | Ungleichheit (#) |
| 10 | Kleiner (<) |
| 11 | Groesser-gleich (>=) |
| 12 | Groesser (>) |
| 13 | Kleiner-gleich (<=) |
| 14 | Integer-Eingabe (?) |
| 15 | Integer-Ausgabe (!) |
Implementierung:
Registermodell
P: Program CounterB: Basiszeiger (aktueller Aktivierungsrahmen)T: Stack-Top
Statische Kette (base(l)) wird ueber ResolveBase aufgeloest.
Definierte Laufzeitdiagnosen
| Code | Bedeutung |
|---|---|
| 206 | Division durch 0 |
| 98 | EOF bei Integer-Eingabe |
| 97 | Ungueltiges Integer-Format bei Eingabe |
| 99 | Sonstiger VM-Laufzeitfehler (z. B. Stack-/Pointerfehler) |