Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
P-code machine
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
===Calling conventions=== {{how-to|section|date=January 2024}} 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 <code>n</code> 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 initialize 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 (<code>n</code> being the number of parameters, <code>p</code> 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 + <code>i</code>, the second sets EP to SP + <code>j</code>. So <code>i</code> essentially specifies the space reserved for locals (plus the number of parameters plus 5), and <code>j</code> 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 <code>C</code> 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 <code>q</code> can be called with csp q These standard procedures are Pascal procedures like <code>readln()</code> (<code>csp rln</code>), <code>sin()</code> (<code>csp sin</code>), etc. Peculiarly <code>eof()</code> is a p-Code instruction instead.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)