P-Code

P-Code

P-Code ist der Befehlssatz einer Pseudo-Maschine (oder P-Maschine), also einer virtuellen CPU, die P-Code als Maschinensprache ausführt. Der P-Code war ein Computer- bzw. CPU-unabhängiger Code und war Teil der Entwicklungsumgebung UCSD-Pascal. Die Umsetzung in die Maschinensprache der CPU erfolgt durch den Interpreter der P-Maschine. Man kann den P-Code und das Konzept der virtuellen Maschine als geistigen Vorläufer der heutigen Java Virtual Machine betrachten.

Inhaltsverzeichnis

Plattformen

Durch die Unabhängigkeit von bestimmten Rechnerarchitekturen konnte das P-System auf verschiedenste Plattformen portiert werden:

Funktionsumfang der P-Maschine

Register des Emulators

Die P-Maschine ist eine 16-Bit-Maschine. Der Adressraum ist damit auf 64KB beschränkt. Sie ist aber in der Lage, mehrere Adressräume zu verwalten, beispielsweise 128KB in Version IV. Zur Emulation des P-Codes dienen folgende Register (Pointer):

SP: Stack-Pointer Zeiger auf das oberste Wort im Stack. Dient der Parameterübergabe und als Operandenquelle für den Interpreter.
IPC: Interpreter Program Counter Adresse der nächsten P-Code-Instruktion im Codesegment der aktuellen Prozedur
SEG: Segment Pointer Zeiger auf das Prozedurverzeichnis des aktuellen Segments
JTAB: Jump Table Pointer Zeiger auf die Sprungtabelle des aktuellen Segments
KP: Program Stack Pointer Zeiger auf das Ende des Programm-Stacks
MP: Markstack Pointer Zeiger auf den Aktivierungs-Record der aktuellen Prozedur zum Zugriff auf die lokalen Variablen
NP: New Pointer Zeiger auf das Ende des dynamischen Heaps
BASE: Base Procedure Zeiger auf den Aktivierungs-Record der Basis-Prozedur zum Zugriff auf die globalen Variablen

P-Code (Befehlssatz der P-Maschine)

Der Befehlscode der Pseudo-Maschine ist ein oder zwei Byte lang und wird von bis zu vier Operanden gefolgt. Es gibt folgende Befehlsklassen:

  • 1-Wort-Transportbefehle
  • Mehr-Wort-Transportbefehle
  • Byte-Array-Behandlung
  • String-Behandlung
  • Record und Array-Behandlung
  • Dynamische Speicherallokation
  • Arithmetik-Befehle
  • Sprungbefehle
  • Prozedur- und Funktionsaufrufe
  • Unterstützungs-Routinen

Verbindung zwischen P-Maschine und Betriebssystem

Das UCSD-Pascal-Betriebssystem und die virtuelle P-Maschine tauschen Informationen über die Systemvariable SYSCOM aus. Diese befindet sich im äußeren Block des Betriebssystems. Dieser Speicherbereich ist der P-Maschine "bekannt".

P-Code-Beispiel

Auszug aus einem Decompiler-Listing:


Attribute Table
-------------------------
Procedure No.:   37
Lex Level:        0
EnterIC:         54
Exit IC:          7
Parameter Size:   0 words
Data Size:        2 words
-------------------------
Block No:|58
Block Offset:|132

Offset P-Code             Hex-Code
     0 CBP     36         C224        
     2 LOD      1     1   B60101
     5 SRO      1         AB01
     7 SLDO1              E4
     8 INC     31         A21F
    10 SRO      2         AB02
    12 SLDC3              03          
    13 CSP   UNITCLEA     9E26        
    15 SLDO2              E9
    16 INC 1              A201
    18 SLDC8              08
    19 SLDC0              00
    20 LDP                BA
    21 SLDC0              00
    22 NEQI               CB
    23 FJP     36         A10B
    25 SLDC3              03
    26 SLDO2              E9
    27 INC      1         A201
    29 SLDC8              08
    30 SLDC0              00
    31 LDP                BA
    32 CBP     52         C234
    34 UJP     45         B909
    36 SLDC6              06
    37 SLDD02             E9
    38 INC      4         A204
    40 SLDC8              08
    41 SLDC8              08
    42 LDP                BA
    43 CBP     52         C234
    45 RBP      0         C100

In UCSD-Pascal sieht die Prozedur so aus:

PROCEDURE CLEARSCREEN;                (*Bemerkung*)
  BEGIN HOMECURSOR;                   (*Offset  0*)
    WITH SYSCOM^,CRTCTRL DO           (*Offset 10*)
      BEGIN
        UNITCLEAR(3);                 (*Offset 13*)
        IF ERASEEOS <> CHR(0) THEN    (*Offset 23*)
          PUTPREFIXED(3,ERASEEOS)     (*Offset 32*)
        ELSE                          (*Offset 34*)
          PUTPREFIXED(6,CLEARSCREEN)  (*Offset 43*)
      END
END (*CLEARSCREEN*) ;                 (*Offset 45*)

Siehe auch

Apple Pascal

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Code Cyclique — En mathématiques et en informatique, un code cyclique est un code correcteur linéaire. Ce type de code possède non seulement la capacité de détecter les erreurs, mais aussi de les corriger sous reserve d altérations modérée. Les mathématiques… …   Wikipédia en Français

  • Code De Hamming — Un code de Hamming est un code correcteur linéaire. Il permet la détection et la correction automatique d une erreur si elle ne porte que sur une lettre du message. Un code de Hamming est parfait, ce qui signifie que pour une longueur de code… …   Wikipédia en Français

  • Code de hamming — Un code de Hamming est un code correcteur linéaire. Il permet la détection et la correction automatique d une erreur si elle ne porte que sur une lettre du message. Un code de Hamming est parfait, ce qui signifie que pour une longueur de code… …   Wikipédia en Français

  • code — [ kɔd ] n. m. • 1220; lat. jurid. codex « planchette, recueil » 1 ♦ Recueil de lois. Le code de Justinien, et absolt le Code. Ensemble des lois et dispositions légales relatives à une matière spéciale. Livre, article d un code. Le C ODE CIVIL ou… …   Encyclopédie Universelle

  • Code page — is another term for character encoding. It consists of a table of values that describes the character set for a particular language. The term code page originated from IBM s EBCDIC based mainframe systems,[1] but many vendors use this term… …   Wikipedia

  • Code Geass — Code Geass: Lelouch of the Rebellion First Code Geass DVD volume released in Japan. コードギアス 反逆のルルーシュ (Kōdo Giasu: Hangyaku no Rurūshu) …   Wikipedia

  • Code Civil (France) — Première page de l édition originale (1804) …   Wikipédia en Français

  • Code Correcteur — Un code correcteur est une technique de codage basée sur la redondance. Elle est destinée à corriger les erreurs de transmission d une information (plus souvent appelée message) sur une voie de communication peu fiable. La théorie des codes… …   Wikipédia en Français

  • Code Linéaire — En mathématiques, plus précisément en théorie des codes, un code linéaire est un code correcteur. Il est structuré comme un sous espace vectoriel sur un corps fini. L espace utilisé est souvent F2n le terme usuel est alors celui de code linéaire… …   Wikipédia en Français

  • Code MDS — Code parfait et code MDS Un code parfait (ou code MDS, pour maximum distance séparable) est un concept de la théorie des codes et qui traite plus spécifiquement des codes correcteurs. Un code correcteur est un code permettant au récepteur de… …   Wikipédia en Français

  • Code NAF — Le code NAF est l un des codes INSEE. C est la Nomenclature des Activités Françaises. Elle permet la codification de l APE, c est à dire de l activité principale exercée dans l entreprise ou l association. Cette nomenclature d activités… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”