9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Charles Forsyth <charles.forsyth@gmail.com>
To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net>
Subject: Re: [9fans] assembly syntax in plan 9
Date: Mon, 16 Jan 2012 13:08:01 +0000	[thread overview]
Message-ID: <CAOw7k5ifn8knOApHOCY5ZM-8TDJaXKPReHAhB-ZYgSxYFRi7Rw@mail.gmail.com> (raw)
In-Reply-To: <CAJ1xhMUwAqtCmJSh3xUVVWS0fhAj4py2LtMfbeVuai2k2o3hzg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2519 bytes --]

You should read /sys/doc/asm.pdf first.
careful: TOS is only for 68k. nothing else defines or uses it.

Plan 9 doesn't use a base pointer, because everything can be addressed
relative to the stack pointer,
and the loader keeps track of the SP level. thus FP is a virtual register,
that the loader implements
by replacing offsets relative to it by the current appropriate offset from
the hardware stack pointer register (whatever
that might be on a given platform). That's esp on the x86. the TEXT
directive specifies the space a function
requires for its stack frame, and the loader then adds appropriate code at
start and end to provide it.
0(FP) is the first argument, 4(FP) is the second, and so on. 0(SP) is the
bottom of the current frame,
and 0(SP), 4(SP) etc are referenced to build the arguments for outgoing
calls (but that space must
be accounted for in the TEXT directive).

(it's probably not very different in effect from -fno-frame-pointer or
whatever it is for gcc,
which also doesn't use ebp except that is implemented entirely by the
compiler.)

On 16 January 2012 12:30, Alexander Kapshuk <alexander.kapshuk@gmail.com>wrote:

> i have a question about putting things on the stack for x86 arch under
> plan 9...
>
> under unix/linux, when defining a function, i would:
> (1). push the address the base pointer is pointing to prior to this
> function being called, onto the stack; e.g. pushl %ebp
> (2). then i would have the base pointer point to the current stack
> pointer; e.g. movl %esp, %ebp
> (3). then i would allocate space on the stack for local variables, if any;
> e.g. subl $n, %esp;
> (4). then follows the function body;
> to return from the function i would:
> (1). restore the stack pointer; e.g. movl %ebp, %esp;
> (2). restore the base pointer, e.g. popl %ebp;
> (3). then return to the calling function;
>
> i searched the 9fans archives for posts on assembly programming under plan
> 9; found some bits and pieces; e.g. in one of the posts it was mentioned
> that BP is a general purpose register, not the base pointer; and that FP is
> what ebp is under unix/linux;
>
> in the paper for the plan 9 assembler, it says that there are three
> registers available to manipulate the stack, FP, SP, and TOS; would the
> following comparison stand true then?
> plan9    unix/linux
> -------     -------------
> FP        EBP
> SP        -4(%EBP)...-n(%EBP) /* local variables */
> TOS     ESP
>
> thanks;
>
> sasha kapshuk
>
>

[-- Attachment #2: Type: text/html, Size: 3149 bytes --]

  reply	other threads:[~2012-01-16 13:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-16 12:30 Alexander Kapshuk
2012-01-16 13:08 ` Charles Forsyth [this message]
2012-01-16 13:27   ` Alexander Kapshuk
2012-01-16 15:41   ` Bakul Shah
2012-01-16 18:51     ` Comeau At9Fans
2012-01-16 19:03       ` Bakul Shah
2012-01-16 19:39         ` Charles Forsyth
2012-01-17 19:27           ` Comeau At9Fans
     [not found]         ` <CAOw7k5iYxoVUHYYxf1Dg9ESWwTon_aGFxhNkuyUGbkXwiKO9DA@mail.gmail.c>
2012-01-16 19:49           ` erik quanstrom
2012-01-17 19:29             ` Comeau At9Fans
2012-01-16 20:11         ` Joel C. Salomon
2012-01-16 23:18           ` Bakul Shah
2012-01-17 19:31           ` Comeau At9Fans
2012-01-17 19:21         ` Comeau At9Fans
2012-01-18 17:48           ` Bakul Shah
2012-01-18 18:32             ` Comeau At9Fans
2012-01-16 16:07   ` Joel C. Salomon
2012-01-16 16:27     ` erik quanstrom
2012-01-16 16:40     ` Charles Forsyth
2012-01-16 16:54     ` Bakul Shah

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOw7k5ifn8knOApHOCY5ZM-8TDJaXKPReHAhB-ZYgSxYFRi7Rw@mail.gmail.com \
    --to=charles.forsyth@gmail.com \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).