Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
Freenet DSL
Who's Online
12 user(s) are online (10 user(s) are browsing encyclopedia)

Members: 0
Guests: 12

more...
browser tip
recommendation!
Sponsored
partner

P-Code machine

In computer programming, a virtual machine executing p-code, the p-Code machine or pseudo-code machine was the target of some early Pascal programming language implementations. That is, the programming language Pascal was translated not to machine code instructions (understandable directly to a central processing unit), but to p-code instructions. To execute the program, another program is used that interprets this code.

A p-code is similar to a .

The Business Operating System (BOS) of the 1980s was a cross-platform operating system designed to exclusively run p-code based programs.

The UCSD p-System was a portable machine independent operating system based on p-code.

=Architecture=

The p-Code machine is stack (computing)-oriented, which means that most instructions take their operands from the stack, and place results back on the stack. So the add instruction replaces the two topmost elements of the stack with their sum. A few instructions take an immediate argument. Like Pascal, p-Code is strongly typed, supporting boolean (b), character (c), integer (i), real (r), set (s), and pointer (a) types natively.

Some simple instructions:

Insn. Stack Stack Description before after   adi i1 i2 i1+i2 add two integers adr r1 r2 r1+r2 add two reals dvi i1 i2 i1/i2 integer division inn i1 s1 b1 set membership; b1 = whether i1 is a member of s1 ldci i1 i1 load integer constant mov a1 a2 move not b1 ~b1 boolean negation

=Environment=

Differing from other stack-based environments (Forth programming language, the Java virtual machine) the p-System has only one stack shared by procedure stack frames (providing return address, etc.) and the arguments to local instructions. Three of the machine s processor register point into the stack (which grows upwards):

  • SP points to the top of the stack.
  • MP marks the beginning of the active stack frame.
  • EP points to the highest stack location used in the current procedure.
  • Also present is a constant area, and, below that, the dynamic memory allocation growing down towards the stack. The NP register points to the top (lowest used address) of the heap. When EP gets greater than NP, the machine s memory is exhausted.

    The fifth register, PC, points at the current instruction in the code area.

    =Calling conventions=

    Stack frames look like this:

    EP -> local stack SP -> ... locals ... parameters ... return address (previous PC) previous EP dynamic link (previous MP) static link (MP of surrounding procedure) MP -> function return value

    The procedure calling sequence works as follows: The call is introduced with mst n where n specifies the difference in nesting levels (remember that Pascal supports nested procedures). This instruction will mark the stack, i.e. reserve the first five cells of the above stack frame, and initialise previous EP, dynamic, and static link. The caller then computes and pushes any parameters for the procedure, and then issues cup n, p to call a user procedure ( n being the number of parameters, p the procedure s address). This will save the PC in the return address cell, and set the procedure s address as the new PC.

    User procedures begin with the two instructions ent 1, i ent 2, j The first sets SP to MP + i , the second sets EP to SP + j . So i essentially specifies the space reserved for locals (plus the number of parameters plus 5), and j gives the number of entries needed locally for the stack. Memory exhaustion is checked at this point.

    Returning to the caller is accomplished via retC with C giving the return type (i, r, c, b, a as above, and p for no return value). The return value has to be stored in the appropriate cell previously. On all types except p, returning will leave this value on the stack.

    Instead of calling a user procedure (cup), standard procedure q can be called with csp q These standard procedures are Pascal procedures like readln() ( csp rln ), sin() ( csp sin ), etc. Peculiarly eof() is a p-Code instruction instead.

    =Further reading=

  • Steven Pemberton and Martin Daniels: [http://www.cwi.nl/~steven/pascal/book/ Pascal Implementation: The P4 Compiler and Interpreter]. ISBN 0-85312-358-6; ISBN 0-13-653-0311
  • *[http://www.cwi.nl/~steven/pascal.html Steven Pemberton s page on Pascal] has Pascal sources of the P4 compiler and interpreter, usage instructions, and [http://www.cwi.nl/ftp/pascal/pcom.code4.Z the P-code of the compiler] (generated by itself). *[http://www.threedee.com/jcm/psystem/ The Jefferson Computer Museum s page on the UCSD P-System] *[http://www.klebsch.de Open Source implementation]

    =See also=

  • Pascal programming language
  • Runtime
  • Compiler
  • interpreter (computer software)
  • interpreted language
  • UCSD p-System
  • UCSD Pascal