En la programación de computadora, una máquina del p-código del o la máquina del pseudo-code del es una especificación de una CPU cuyas instrucciones se esperen ser ejecutados en software algo que en el hardware (IE, interpretado ). Este término se aplica genéricamente a todas tales especificaciones, aunque muchas especificaciones creen su propio nombre (e., el Java utiliza el Octeto-código ), y a las especificaciones particulares (el ser más famoso p-código del UCSD Pascal ).

Aunque el concepto primero fuera ejecutado como O-código para BCPL, circa 1966, el p-código del término primero apareciera en la escena a principios de los años 70. Dos puestas en práctica tempranas de los recopiladores que generaban p-código eran el recopilador de Pascal-p en 1973, por Nori, Ammann, Jensen, Hageli, y Jacobi, y el recopilador de PASCAL en 1975, al lado de Niklaus Wirth .

Los programas que han sido p-código traducido son ejecutados ( interpretado ) por un programa informático que emule al comportamiento de la especificación de la CPU. Si hay suficiente interés comercial una puesta en práctica de hardware de la especificación puede ser construida (e., el Pascal MicroEngine ).

¿Por qué p-código?

Para los propósitos que viran hacia el lado de babor. Es mucho más fácil escribir a un pequeño (comparado al tamaño del recopilador) intérprete del p-código para una nueva máquina, en comparación con el cambio de un recopilador para generar el código nativo para la misma máquina.

para rápidamente conseguir un recopilador en servicio. La generación del código automático es una de las partes más complicadas de escribir un recopilador. Por la comparación, la generación de p-código es mucho más fácil.
Apremios del tamaño del

. Puesto que el p-código se basa en una máquina virtual ideal, muchas veces el p-código resultante es mucho más pequeño que el mismo programa traducido al código automático.

para los propósitos de depuración. Puesto que se interpreta el p-código, el intérprete puede aplicar muchos cheques runtime adicionales que sean más duros de ejecutar con código nativo.

Algunos artículos de Niklaus Wirth mencionan la mañana - cifrar la variante para el Modula-2 del sucesor de Pascal.

El sistema operativo (BOS) del negocio de los años 80 era un sistema operativo de la cruz-plataforma diseñado para funcionar con exclusivamente programas basados p-código.

El p-Sistema del UCSD era un sistema operativo independiente de la máquina portable basado en p-código.

Arquitectura

El p-código se ejecuta comúnmente en una máquina de apilado, así que significa que la mayoría de las instrucciones toman sus operandos del apilado, y pone resultados detrás en el apilado. Tan el " add" la instrucción substituye los dos elementos superiores del apilado por su suma. Algunas instrucciones toman una discusión inmediata. Como Pascal, el p-Código se mecanografía fuerte, (b) boleano favorable, carácter (c), número entero (i), (r) verdadero, fijó (s), y el indicador (a) mecanografía nativo.

Algunas instrucciones simples:

Insn. Descripción del apilado del apilado antes después   el adi i1 i2 i1+i2 agrega dos números enteros el efecto negativo del medicamento r1 r2 r1+r2 agrega dos reals división del número entero del dvi i1 i2 i1/i2 calidad de miembro determinada del mesón i1 S1 b1; b1 = si i1 es un miembro del S1 constante entera de la carga del ldci i1 i1 movimiento de los movimientos a1 a2 no negación boleana de b1 ~b1

Ambiente

La diferenciación de otra los ambientes apilar-basados (tales como adelante y la máquina virtual de Java) el p-Sistema tiene solamente un apilado compartido por los marcos de apilado del procedimiento (que proporcionan el remite, etc.) y las discusiones a las instrucciones locales. Tres de la máquina coloca el punto de en el apilado (que crece hacia arriba):
Puntos del SP del

a la tapa del apilado (el puntero de pila ). marca el principio del bastidor de apilado activo (el indicador del capítulo).
El EP señala a la localización más alta del apilado usada en el proceso actual.

También el presente es un área constante, y, debajo de ese, el montón que crece abajo hacia el apilado. NP coloca puntos a la tapa (dirección lo más bajo posible usada) del montón. Cuando el EP consigue mayor que NP, se agota la memoria de la máquina.

El quinto registro, PC, puntos en la instrucción actual en el área de código.

Llamada de convenciones

La mirada de los marcos de apilado tiene gusto de esto:

EP - > apilado local SP - >… locals … parámetros … remite (PC anterior) EP anterior acoplamiento dinámico (P. anterior) acoplamiento estático (P. del procedimiento circundante) P. - > valor de vuelta de la función

La secuencia de llamada del procedimiento trabaja como sigue: La llamada se introduce con mst n donde el n especifica la diferencia en niveles de imbricación (recordar que Pascal apoya procedimientos jerarquizados). Esta instrucción la marca del el apilado, es decir reservará las primeras cinco células del bastidor de apilado antedicho, e inicializa el EP anterior, dinámico, y el acoplamiento estático. El llamador después computa y empuja cualquier parámetro para el procedimiento, y entonces ediciones taza n, p para llamar un procedimiento del usuario ( n que es el número de parámetros, p la dirección del procedimiento). Esto ahorrará la PC en la célula del remite, y fijó la dirección del procedimiento como la nueva PC.

Los procedimientos del usuario comienzan con las dos instrucciones 1 ent, i 2 ent, j El primer fija el SP a P. + el i, el EP de los sistemas del segundo a SP + el j . El i esencialmente especifica tan el espacio reservado para los locals (más el número de parámetros más 5), y el j da el número de entradas necesarias localmente para el apilado. El agotamiento de la memoria se comprueba a este punto.

La vuelta al llamador es realizada vía retC con el C dando el tipo de vuelta (i, r, c, b, a como arriba, y p para ningún valor de vuelta). El valor de vuelta tiene que ser almacenado en la célula apropiada previamente. En todos los tipos excepto p, la vuelta dejará este valor en el apilado.

En vez de llamar un procedimiento del usuario (taza), el q del procedimiento estándar se puede llamar con csp q Estos procedimientos estándar son procedimientos de Pascal como el readln del () (" rln" del csp;), pecado del () (" sin" del csp;), el eof () del etc. es peculiar una instrucción del p-Código en lugar de otro.

Máquina del ejemplo

El Niklaus Wirth especificó una máquina simple del p-código en las 1976 estructuras de los algoritmos + de datos del del libro = los programas . La máquina tenía 3 registros - un contador de programa, p, un registro bajo b, y un registro top-of-stack T. Había 8 instrucciones, con una (opr) teniendo formas múltiples.

Éste es el código para la máquina:

 el procedimiento interpreta; el const stacksize = 500; var p, b, t: número entero; {el programa, base, topstack-se coloca}  i: instrucción; {registro de instrucción}  s: arsenal del número entero; {datastore} base de la función (l: número entero): número entero;  var b1: número entero; comenzar b1: = b; {hallazgo l bajo nivelaciones por abajo}  mientras que hace l > 0  comenzar b1: = s; l: = l - 1  extremo;  base: = b1 extremo {base}; 

comenzar el writeln (“comienzo pl/0”); t: = 0; b: = 1; p: = 0; s: = 0; s: = 0; s: = 0; repetición i: = código; p: = p + 1; conmigo hago caso f de encendido: comenzar t: = t + 1; s: = un extremo; opr: encajonar a de {el operador} 0: comenzar {vuelta} t: = b - 1; p: = s + 3; b: = s + 2; extremo; 1: s: = - s; 2: comenzar t: = T-1; s: = s + s + 1 extremo; 3: comenzar t: = T-1; s: = s - s + 1 extremo; 4: comenzar t: = T-1; s: = s * s + 1 extremo; 5: comenzar t: = T-1; s: = s div s + 1 extremo; 6: s: = ord ( 8: comenzar t: = T-1; s: = ord (s = s + 1) extremo; 9: comenzar t: = T-1; s: = ord (<> de s s + 1) extremo; 10: comenzar t: = T-1; s: = ord (s < s + 1) extremo; 11: comenzar t: = T-1; s: = ord (>= de s s + 1) extremo; 12: comenzar t: = T-1; s: = ord (s > s + 1) extremo; 13: comenzar t: = T-1; s: = ord (<= de s s + 1) extremo; extremo; lod: comenzar t: = t + 1; s: = s + un extremo; sto: comenzar s: = s; ;; t: = extremo T-1; caloría: comenzar {generar la nueva marca de bloque} s + 1: = base (l); s + 2: = b; s + 3: = p; b: = t + 1; p: = a extremo; internacional: t: = t + a; jmp: p: = a; jpc: comenzar si s = 0 entonces p: = a; t: = extremo T-1 extremo {con, caso} hasta p = 0; escribir (“extremo pl/0”); extremo {interpretar};

Esta máquina fue utilizada para funcionar el PL/0 de Wirth, que era un recopilador del subconjunto de Pascal usado para enseñar al desarrollo del recopilador.

Lectura adicional

Steven Pemberton y Martin Daniels: Puesta en práctica de Pascal: El recopilador P4 y el intérprete. ISBN 0-85312-358-6; ISBN 0-13-653031-1
La página de Steven Pemberton en Pascal tiene fuentes de Pascal del recopilador P4 y del intérprete, de instrucciones del uso, y del p-código del recopilador (generado por sí mismo).
La página de Jefferson del museo de la computadora en el p-Sistema del UCSD
Puesta en práctica de Open Source
que compila con C# y Java, palmadita Terry, 2005, ISBN 0-321-26360-X, 624
Las estructuras de los algoritmos + de datos del = programan, Niklaus Wirth, 1975, ISBN 0-13-022418-9
Construcción, Niklaus Wirth, 1996, ISBN 0-201-40353-6 del recopilador del
el libro del octeto de Pascal, Blaise W. Liffick, Editor, 1979, ISBN 0-07-037823-1
PASCAL del - la lengua y su puesta en práctica, corregidas por D. Barron, 1981, ISBN 0-471-27835-1. Ver especialmente las notas de la puesta en práctica de Pascal-p del de los artículos y los PASCAL del : Un subconjunto y su puesta en práctica .

Ver también

Bytecode
Pascal (lenguaje de programación)
Tiempo de pasada
Recopilador
intérprete
Lengua interpretada
PL/0
P-Sistema del UCSD
UCSD Pascal
Joel McCormack
el P-código es una clase del código roscado simbólico

.

  • Zenithic
  • Miguel Cairo
    Random links:Ludolf von Alvensleben | De Op. Sys. de vals. 64, No. 2 (Chopin) | Síntesis convergente | Matt Treanor | Caja del principio fijada - El CD escoge la colección del principio

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">