Table of Contents

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: Opcode
  • l: Lexikalische Level-Differenz
  • a: 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 Counter
  • B: 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)