comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey Creem" <jeff@thecreems.com>
Subject: Re: if X in 1..35000 versus Boolean
Date: Sat, 13 Jul 2002 20:02:17 GMT
Date: 2002-07-13T20:02:17+00:00	[thread overview]
Message-ID: <dH%X8.180698$Uu2.40374@sccrnsc03> (raw)
In-Reply-To: mailman.1026584402.3884.comp.lang.ada@ada.eu.org

Note that for anthing bigger than a trival program, it is often easier to
use objdump so you
can see the source code intermixed in the assembly code (perhaps this can be
done in
one step with gcc as well but I tend to use the approach below since it
follows
the ada xxx.ads, a.das xxx paradigm I got used to with VADS many years back
now).

For example (with the previous sample code):
gcc -c -O3 -g xxx.adb

C:\Documents and Settings\jcreem\Desktop>objdump --disassemble --source
xxx.o

xxx.o:     file format pe-i386

Disassembly of section .text:

00000000 <__ada_xxx>:
   0:   55              pushl  %ebp
begin
Loop_Name : for i in 1 .. 1000 loop
   1:   b8 e7 03 00 00  movl   $0x3e7,%eax
   6:   89 e5           movl   %esp,%ebp
   8:   48              decl   %eax
   9:   79 fd           jns    8 <__ada_xxx+8>
   b:   89 ec           movl   %ebp,%esp
   d:   5d              popl   %ebp
   e:   c3              ret
   f:   90              nop


(If you want that boring program to be even easier to understand, omit the
frame pointer and then
there are no "surprise" instructions there (suprise for a non assembly
person)

C:\Documents and Settings\jcreem\Desktop>gcc -c -O3 -g -fomit-frame-pointer
xxx.
adb

C:\Documents and Settings\jcreem\Desktop>objdump --disassemble --source
xxx.o

xxx.o:     file format pe-i386

Disassembly of section .text:

00000000 <__ada_xxx>:
begin
Loop_Name : for i in 1 .. 1000 loop
   0:   b8 e7 03 00 00  movl   $0x3e7,%eax
   5:   90              nop
   6:   48              decl   %eax
   7:   79 fd           jns    6 <__ada_xxx+6>
   9:   c3              ret
   a:   89 f6           movl   %esi,%esi


"sk" <noname@myob.com> wrote in message
news:mailman.1026584402.3884.comp.lang.ada@ada.eu.org...
>
> Hi,
>
> > I know only basics of Assembler, so this would be pointless in my case.
>
> Pointless ?
>
> ---------------------------------------------------
> procedure xxx is
> begin
>     Loop_Name : for i in 1 .. 1000 loop
>         null;
>     end loop Loop_Name;
> end xxx;
>
> ---------------------------------------------------
> gcc -S -c xxx.adb (Linux, Gnat 3.13p)
>
> ---------------------------------------------------
> .file "xxx.adb"
> .version "01.01"
> gcc2_compiled.:
> .text
> .align 4
> .globl _ada_xxx
> .type _ada_xxx,@function
> _ada_xxx:                          -- Set up
> pushl %ebp
> movl %esp,%ebp             <-- Set base to stack
> subl $4,%esp               <-- Decrement stack 4 bytes for loop
> variable
> movl $1,-4(%ebp)           <-- Set loop variable to 1
> .L2:
> cmpl $1000,-4(%ebp)        <-- Is the loop variable = 1000 ?
> jle .L5                    <-- No, variable is less than 1000, jump
> to .L5
> jmp .L3                    <-- Yes, jump to .L3
> .align 4
> .L5:
> jmp .L4                    <-- Jump to .L4
> .align 4
> jmp .L3
> .align 4
> .L6:
> .L4:
> incl -4(%ebp)              <-- Increment the loop counter
> jmp .L2                    <-- Go to beginning of loop
> .align 4
> .L3:
> jmp .L1                    <-- Ok, finished
> .align 4
> .L1:                               -- Clean up
> movl %ebp,%esp
> popl %ebp
> ret
> .Lfe1:
> .size _ada_xxx,.Lfe1-_ada_xxx
> .ident "GCC: (GNU) 2.8.1"
>
> ---------------------------------------------------
> Play with the Ada code by changing the "x in 1 .. 1000" to
> "x in 5 .. 57" for example, and look at the resultant
> assembly listing.
>
> --
> -------------------------------------
> -- Merge vertically for real address
> -------------------------------------
> s n p @ t . o
>  k i e k c c m
> -------------------------------------





  reply	other threads:[~2002-07-13 20:02 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-07-13 19:10 if X in 1..35000 versus Boolean Jan Prazak
2002-07-13 16:27 ` Frank J. Lhota
2002-07-13 20:36   ` Jan Prazak
2002-07-13 18:05     ` Jeffrey Carter
2002-07-14 15:02       ` Jan Prazak
2002-07-13 22:10     ` Robert Dewar
2002-07-14 21:16       ` Jan Prazak
2002-07-14 20:47         ` Frank J. Lhota
2002-07-15  1:21         ` Jeffrey Carter
2002-07-16  8:18     ` Keith Thompson
2002-07-16 13:54       ` Jan Prazak
2002-07-16 11:13         ` Lutz Donnerhacke
2002-07-17 19:04           ` Jan Prazak
2002-07-17 20:00             ` Georg Bauhaus
2002-07-18  8:11             ` Lutz Donnerhacke
2002-07-18 14:39               ` Georg Bauhaus
2002-07-20  0:37               ` Robert Dewar
2002-07-16 20:25         ` Georg Bauhaus
2002-07-17 19:29           ` Jan Prazak
2002-07-16 19:24       ` Gautier
2002-07-17 19:04         ` Jan Prazak
2002-07-13 16:32 ` David C. Hoos, Sr.
2002-07-13 20:36   ` Jan Prazak
2002-07-13 18:02     ` David C. Hoos, Sr.
2002-07-13 18:17     ` sk
2002-07-13 20:02       ` Jeffrey Creem [this message]
     [not found]     ` <3D306ED5.33E80E09@myob.com>
2002-07-13 18:52       ` David C. Hoos, Sr.
     [not found]       ` <020a01c22a9f$2b50d6c0$6400000a@dhoos>
2002-07-13 19:02         ` sk
2002-07-14 15:02           ` Jan Prazak
2002-07-14 19:25             ` Darren New
2002-07-15 15:22               ` Steffen Huber
2002-07-13 16:44 ` Christopher Browne
2002-07-13 22:09   ` Robert Dewar
2002-07-13 17:17 ` tmoran
2002-07-13 19:44 ` Florian Weimer
  -- strict thread matches above, loose matches on Subject: below --
2002-07-14 20:22 Gautier direct_replies_not_read
2002-07-15 11:36 ` Jan Prazak
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox