Article View: pl.comp.lang.asm
Article #1306gcc - wyrownanie esp w main?
From: Jedrzej Dudkiewicz
Date: Fri, 06 Jul 2007 14:52
Date: Fri, 06 Jul 2007 14:52
28 lines
1770 bytes
1770 bytes
Program w C w pliku x.c:
int main() { }
po gcc -S -O3 x.c daje taki fragment:
6 main:
7 pushl %ebp
8 movl %esp, %ebp
9 subl $8, %esp
10 andl $-16, %esp
11 subl $16, %esp
12 leave
13 ret
Ja to rozumiem tak, że linie 9 - 11 to jest wyrównanie stosu do potęgi 4.
Tylko po co te odejmowania? Skoro stos rośnie w dół, to samo andl przesuwa
adres nie wyżej niż andl. Nie jest to raczej rezerwowanie miejsca na żadne
zmienne - nigdy nie widziałem, aby to miejsce było wykorzystane (pewnie mało
widziałem). Szukałem jakichś informacji po sieci, ale nie znalazłem nic
prócz tego, że to jest wyrównanie, raz tylko określone jako "strange".
Z góry dzięki za odpowiedź,
JD
PS. Próbuję szukać czegoś w źródłach gcc, ale... Tonący może i chwyta się
brzytwy, ale wcześniej niż źródeł gcc. Tak mi się wydaje :)
Technical Details
Message-ID:
<f6ll1j$ktc$1@news.supermedia.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.supermedia.pl!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.supermedia.pl!not-for-mail From: "Jedrzej Dudkiewicz" <jedrzej.dudkiewicz@poczta.interia.pl> Newsgroups: pl.comp.lang.asm Subject: gcc - wyrownanie esp w main? Date: Fri, 6 Jul 2007 16:52:48 +0200 Organization: SuperMedia - http://www.sm.pl Lines: 29 Message-ID: <f6ll1j$ktc$1@news.supermedia.pl> NNTP-Posting-Host: 212.180.147.34 Mime-Version: 1.0 X-Trace: news.supermedia.pl 1183733619 21420 212.180.147.34 (6 Jul 2007 14:53:39 GMT) X-Complaints-To: abuse@supermedia.pl NNTP-Posting-Date: Fri, 6 Jul 2007 14:53:39 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1896 X-Newsreader: Microsoft Outlook Express 6.00.2800.1807 X-Priority: 3 X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit