P-Codemaschine

In der Computerprogrammierung, einer P-Codemaschine oder tragbaren Codemaschine ist eine virtuelle Maschine, die entworfen ist, um P-Code (die Zusammenbau-Sprache einer hypothetischen Zentraleinheit) durchzuführen. Dieser Begriff wird sowohl allgemein auf alle diese Maschinen (wie Java Virtuelle Maschine als auch MATLAB vorkompilierter Code), und zu spezifischen Durchführungen, das berühmteste Wesen die P-Maschine des Systems von Pascal-P, besonders die UCSD Durchführung von Pascal angewandt.

Obwohl das Konzept zuerst um 1966 durchgeführt wurde (als O-Code für BCPL und P - ein Code für Euler Language, Wirth & Weber, CACM Vol9 No2, 1966), ist der Begriff P-Code zuerst am Anfang der 1970er Jahre erschienen. Zwei frühe Bearbeiter, die P-Code erzeugen, waren der Bearbeiter von Pascal-P 1973, durch Nori, Ammann, Jensen, Hageli und Jacobi,

und der Bearbeiter von Pascal-S 1975, durch Niklaus Wirth.

Programme, die zum P-Code übersetzt worden sind, werden durch ein Softwareprogramm interpretiert, das mit dem Verhalten der hypothetischen Zentraleinheit wetteifert. Wenn es genügend kommerzielles Interesse gibt, kann eine Hardware-Durchführung der Zentraleinheitsspezifizierung (z.B, das Pascal MicroEngine oder eine Version des javanischen Verarbeiters) gebaut werden.

Vorteile und Schwächen, P-Code durchzuführen

Warum P-Code?

Im Vergleich zur direkten Übersetzung in den heimischen Maschinencode eine zweistufige Annäherung, die mit Übersetzung in den P-Code und die Ausführung durch einen Dolmetscher oder gerade rechtzeitig verbunden ist, bietet Bearbeiter mehrere Vorteile an.

Beweglichkeit: Es ist viel leichter, einem kleinen P-Codedolmetscher für eine neue Maschine zu schreiben, als es einen Bearbeiter modifizieren soll, um heimischen Code für dieselbe Maschine zu erzeugen.

Einfache Durchführung: Das Erzeugen des Maschinencodes ist einer der mehr komplizierten Teile, einen Bearbeiter zu schreiben. Vergleichsweise ist das Erzeugen des P-Codes viel leichter. Das macht es nützlich, für einen Bearbeiter zu veranstalten und schnell zu laufen.

Kompaktgröße: Da P-Code auf einer idealen virtuellen Maschine basiert, ist ein P-Codeprogramm häufig viel kleiner als dasselbe Programm, das übersetzt ist, um Code maschinell herzustellen.

Beseitigen: Wenn der P-Code interpretiert wird, kann der Dolmetscher zusätzliche Laufzeitkontrollen anwenden, die schwierig sind, mit dem heimischen Code durchzuführen.

Am Anfang der 1980er Jahre haben mindestens zwei Betriebssysteme Maschinenunabhängigkeit durch erreicht

umfassender Gebrauch des P-Codes. Business Operating System (BOS) war eine Quer-Plattform Betriebssystem hat vorgehabt, P-Codeprogramme exklusiv zu führen. Das UCSD P-System, das an Der Universität Kaliforniens, San Diegos entwickelt ist, war ein Selbstkompilieren und hat Betriebssystem selbstveranstaltet, das auf dem P-Code gestützt ist, der für die Generation durch die Programmiersprache von Pascal optimiert ist.

In den 1990er Jahren ist die Übersetzung in den P-Code eine populäre Strategie für Durchführungen von Sprachen wie Pythonschlange und Java geworden.

Warum nicht P-Code?

Einer der bedeutenden Nachteile des P-Codes ist Ausführungsgeschwindigkeit, die manchmal durch den Gebrauch eines JIT Bearbeiters behoben werden kann.

UCSD P-Maschine

Architektur

Wie viele andere P-Codemaschinen ist die UCSD P-Maschine eine Stapel-Maschine, was bedeutet, dass die meisten Instruktionen ihren operands vom Stapel nehmen, und Ergebnisse zurück auf dem Stapel legen. So ersetzt die "hinzufügen" Instruktion die zwei höchsten Elemente des Stapels mit ihrer Summe. Einige Instruktionen nehmen ein unmittelbares Argument. Wie Pascal wird der P-Code stark getippt, boolean (b), Charakter (c), ganze Zahl (i), echt (r), Satz (E) und Zeigestock (a) Typen heimisch unterstützend.

Einige einfache Instruktionen:

Insn. Stapel-Stapel-Beschreibung

bevor nach

adi i1 i2 i1+i2 fügen zwei ganze Zahlen hinzu

adr r1 r2 r1+r2 fügen zwei reals hinzu

dvi i1 i2 i1/i2 Abteilung der ganzen Zahl

Gasthof i1 s1 b1 Satz-Mitgliedschaft; b1 =, ob i1 ein Mitglied von s1 ist

ldci i1 i1 laden ganze Zahl unveränderlicher

mov a1 a2 bewegen

nicht b1 ~b1 boolean Ablehnung

Umgebung

Verschieden von anderen Stapel-basierten Umgebungen (solcher als Hervor und Java Virtuelle Maschine) hat das P-System nur einen Stapel, der durch Verfahren-Stapel-Rahmen geteilt ist (Rücksprungadresse usw. zur Verfügung stellend), und die Argumente für lokale Instruktionen. Drei der Register der Maschine weisen in den Stapel hin (der aufwärts wächst):

  • SP weist zur Spitze des Stapels (der Stapel-Zeigestock) hin.
  • Abgeordneter kennzeichnet den Anfang des aktiven Stapel-Rahmens (der Rahmenzeigestock).
  • EP weist zur höchsten im aktuellen Verfahren verwendeten Stapel-Position hin (der Ausführungszeigestock?).

Auch Gegenwart ist ein Konstantenbereich, und, darunter, der Haufen, der unten zum Stapel wächst. Das NP-Register weist zur Spitze (niedrigste verwendete Adresse) des Haufens hin. Wenn EP größer wird als NP, wird das Gedächtnis der Maschine erschöpft.

Das fünfte Register, PC, weist auf die aktuelle Instruktion im Codegebiet hin.

Das Benennen der Vereinbarung

Stapel-Rahmen sehen wie das aus:

EP->

lokaler Stapel

SP->...

Ortsansässige

...

Rahmen

...

Rücksprungadresse (vorheriger PC)

vorheriger EP

dynamische Verbindung (der vorherige Abgeordnete)

statische Verbindung (Abgeordneter des Umgebungsverfahrens)

Abgeordneter-> Funktionsrückkehr schätzt

Die Verfahren-Aufrufroutine arbeitet wie folgt: Der Anruf wird mit eingeführt

mst n

wo n angibt, der Unterschied in nistenden Niveaus (erinnern Sie sich, dass Pascal verschachtelte Verfahren unterstützt). Diese Instruktion wird den Stapel kennzeichnen, d. h. die ersten fünf Zellen des obengenannten Stapel-Rahmens vorbestellen, und vorherigen EP, dynamische und statische Verbindung initialisieren. Der Anrufer schätzt dann und bedrängt irgendwelche Rahmen wegen des Verfahrens, und gibt dann aus

Tasse n, p

ein Benutzerverfahren (n zu nennen, die Zahl von Rahmen, p die Adresse des Verfahrens zu sein). Das wird den PC in der Rücksprungadresse-Zelle sparen, und die Adresse des Verfahrens als der neue PC setzen.

Benutzerverfahren beginnen mit den zwei Instruktionen

ent 1, ich

ent 2, j

Die ersten Sätze SP dem Abgeordneten + ich, die zweiten Sätze EP zu SP + j. So gebe ich im Wesentlichen den Raum an, der für Ortsansässige (plus die Zahl von Rahmen plus 5) vorbestellt ist, und j die Zahl von Einträgen erforderlich lokal für den Stapel gibt. Speichererschöpfung wird an diesem Punkt überprüft.

Das Zurückbringen dem Anrufer wird über vollbracht

retC

mit C das Geben des Rücktyps (ich, r, c, b, als oben, und p für keinen Rückwert). Der Rückwert muss in der passenden Zelle vorher versorgt werden. Auf allen Typen außer p wird das Zurückbringen diesen Wert auf dem Stapel verlassen.

Anstatt ein Benutzerverfahren (Tasse) zu nennen, kann normales Verfahren q mit genannt werden

csp q

Diese Standardverfahren sind Verfahren von Pascal wie readln ("csp rln"), Sünde ("csp Sünde") usw. Eigenartig ist eof eine P-Codeinstruktion stattdessen.

Beispiel-Maschine

Niklaus Wirth hat angegeben, dass eine einfache P-Codemaschine 1976 Algorithmen + Datenstrukturen = Programme vorbestellt. Die Maschine hatte 3 Register - ein Programm entgegnet p, ein Grundregister b, und eine Spitze des Stapels schreibt t ein. Es gab 8 Instruktionen, mit einer (opr) vielfache Formen zu haben.

Das ist der Code für die Maschine, die in Pascal geschrieben ist:

const

levmax=3;

amax=2047;

Typ

fct = (angezündet, opr, lod, sto, cal, interne Nummer, jmp, jpc);

instruction=packed registrieren

f:fct;

l:0.. levmax;

a:0.. amax;

Ende;

Verfahren dolmetscht;

const stacksize = 500;

var

p, b, t: ganze Zahl; {schreibt Programm - Basis - }\topstack-ein

i: Instruktion; {Instruktionsregister }\

s: Reihe [1.. stacksize] der ganzen Zahl; {datastore }\

fungieren Sie Basis (l: ganze Zahl): ganze Zahl;

var b1: ganze Zahl;

beginnen Sie

b1: = b; {finden Basis l Niveaus unten }\

während l> 0 wirklich beginnen

b1: = s [b1];

l: = l - 1

Ende;

Basis: = b1

Ende {Basis};

beginnen Sie

writeln (' fangen pl/0' an);

t: = 0; b: = 1; p: = 0;

s [1]: = 0; s [2]: = 0; s [3]: = 0;

wiederholen Sie

i: = Code [p]; p: = p + 1;

mit tue mir

Fall f

angezündet: Beginnen Sie t: = t + 1; s [t]: = ein Ende;

opr:

umgeben Sie von {Maschinenbediener }\

0:

beginnen Sie {geben }\zurück

t: = b - 1; p: = s [t + 3]; b: = s [t + 2];

Ende;

1: s [t]: =-s [t];

2: beginnen Sie t: = t - 1; s [t]: = s [t] + s [t + 1] Ende;

3: beginnen Sie t: = t - 1; s [t]: = s [t] - s [t + 1] Ende;

4: beginnen Sie t: = t - 1; s [t]: = s [t] * s [t + 1] Ende;

5: beginnen Sie t: = t - 1; s [t]: = s [t] div s [t + 1] Ende;

6: s [t]: = ord (seltsam (s [t]));

8: beginnen Sie t: = t - 1; s [t]: = ord (s [t] = s [t + 1]) Ende;

9: beginnen Sie t: = t - 1; s [t]: = ord (s [t]

10: beginnen Sie t: = t - 1; s [t]: = ord (s [t]

12: beginnen Sie t: = t - 1; s [t]: = ord (s [t]> s [t + 1]) Ende;

13: beginnen Sie t: = t - 1; s [t]: = ord (s [t]

Diese Maschine wurde verwendet, um den PL/0 von Wirth zu führen, der ein Teilmenge-Bearbeiter von Pascal war, der verwendet ist, um Bearbeiter-Entwicklung zu unterrichten.

Siehe auch

Referenzen

Weiterführende Literatur

  • Steven Pemberton und Martin Daniels: Durchführung von Pascal: Der P4 Bearbeiter und Dolmetscher. Internationale Standardbuchnummer 0-85312-358-6; internationale Standardbuchnummer 0-13-653031-1
  • Die Seite von Steven Pemberton auf Pascal hat Quellen von Pascal des P4 Bearbeiters und des Dolmetschers, der Gebrauch-Instruktionen und des P-Codes des Bearbeiters (erzeugt allein).
  • Die Computermuseum-Seite von Jefferson auf dem UCSD P-System
  • Durchführung des Open Sources, einschließlich des Verpackens und der vorkompilierten Dualzahlen; eine freundliche Gabel der Durchführung von Klebsch
  • Mit C# und Java, Pat Terry, 2005, internationale Standardbuchnummer 0 321 26360 X, 624 kompilierend
  • Algorithmen + Datenstrukturen = Programme, Niklaus Wirth, 1975, internationale Standardbuchnummer 0-13-022418-9
  • Bearbeiter-Aufbau, Niklaus Wirth, 1996, internationale Standardbuchnummer 0-201-40353-6
  • Das Byte-Buch des Pascal, Blaise W. Lifficks, Redakteurs, 1979, internationale Standardbuchnummer 0-07-037823-1
  • PASCAL - Die Sprache und seine Durchführung, die durch D.W. Barron, 1981, internationale Standardbuchnummer 0-471-27835-1 editiert ist. Sieh besonders die Artikel Durchführungszeichen von Pascal-P und Pascal-S: Eine Teilmenge und seine Durchführung.

Planetarischer Ring / Protonenpumpe-Hemmstoff
Impressum & Datenschutz