 80484b9:       8b 45 08                mov    0x8(%ebp),%eax
 80484bc:       8b 50 04                mov    0x4(%eax),%edx
 80484bf:       52                      push   %edx
 80484c0:       68 58 86 04 08          push   $0x8048658

 80484d0:       8b 45 08                mov    0x8(%ebp),%eax

^^ load base pointer

 80484d3:       8b 50 34                mov    0x34(%eax),%edx
 80484d6:       52                      push   %edx

^^ use arg

 80484d7:       68 5c 86 04 08          push   $0x804865c

^^ examples of unoptimised compiled code to handle accessing a member
from a structure pointer passed as a proc argument.

 804854f:       8b 5d 08                mov    0x8(%ebp),%ebx

^^ load base pointer

 8048552:       83 c4 f8                add    $0xfffffff8,%esp
 8048555:       ff 73 04                pushl  0x4(%ebx)

^^ use arg

 8048558:       68 18 86 04 08          push   $0x8048618

 804855d:       e8 4a fe ff ff          call   80483ac <_init+0x80>
 8048562:       83 c4 f8                add    $0xfffffff8,%esp
 8048565:       ff 73 34                pushl  0x34(%ebx)
 8048568:       68 1c 86 04 08          push   $0x804861c
 804856d:       e8 3a fe ff ff          call   80483ac <_init+0x80>

^^ optimised version.

in the 2nd example, we maintain the base pointer across multiple calls.
we also do not use an intermediate register to push into the next
call.
