From owner-freebsd-chat Mon Jul 23 13:43:51 2001 Delivered-To: freebsd-chat@freebsd.org Received: from serenity.mcc.ac.uk (serenity.mcc.ac.uk [130.88.200.93]) by hub.freebsd.org (Postfix) with ESMTP id 7293D37B409; Mon, 23 Jul 2001 13:40:52 -0700 (PDT) (envelope-from jcm@freebsd-uk.eu.org) Received: from dogma.freebsd-uk.eu.org ([130.88.200.97] ident=root) by serenity.mcc.ac.uk with esmtp (Exim 2.05 #6) id 15OmVX-000Eqv-00; Mon, 23 Jul 2001 21:40:51 +0100 Received: (from jcm@localhost) by dogma.freebsd-uk.eu.org (8.11.3/8.11.1) id f6NKeoY56806; Mon, 23 Jul 2001 21:40:50 +0100 (BST) (envelope-from jcm) Date: Mon, 23 Jul 2001 21:40:50 +0100 From: j mckitrick To: John Baldwin Cc: freebsd-chat@freebsd.org Subject: Re: stack use preference Message-ID: <20010723214050.A56756@dogma.freebsd-uk.eu.org> References: <20010723183331.A55127@dogma.freebsd-uk.eu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0.1i In-Reply-To: ; from jhb@freebsd.org on Mon, Jul 23, 2001 at 01:18:38PM -0700 Sender: owner-freebsd-chat@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org On Mon, Jul 23, 2001 at 01:18:38PM -0700, John Baldwin wrote: | | On 23-Jul-01 j mckitrick wrote: | > | > For those of you who write or at one time wrote assembly language programs | > for the x86 cpus, what is your preference for local variable on the stack? | > Do you | > | > (a) push the esp down, then move esp to ebp and allocate memory for local | > vars above the esp? | > | > (b) move esp to ebp first, then push the esp down | > | > (c) real programmers don't need ebp for local vars. They calculate offsets | > from esp on the fly. :-) | > | > It seems (a) would be easier for humans, since all offsets, including | > procedure parameters, would be positive. | > | > However, compilers seem to generate type (b), so parameters are positive | > offsets from ebp, and local vars are negative. | | (b), as you can walk back through stack traces when debugging by always looking | at [ebp] to get the previous ebp, and [ebp+4] to get the previous IP. | (Assuming you do the normal: | | push %ebp | mov %esp, %ebp | ... | leave | ret | | This is the convention used with the enter/leave 286+ instructions as well. I just realized my comment was completely obfuscated by the word 'push.' I said 'push down' when I meant decrement, thus pushing the esp down in memory. So the question (if it still stands) is do you subtract the space for local vars before or after moving esp to ebp? I've seen both ways in Win32 and Unix code. jcm -- o-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-o | ~~~~~~~~~~~~ Jonathon McKitrick ~~~~~~~~~~~~~ | | "I prefer the term 'Artificial Person' myself." | o-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-o To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-chat" in the body of the message