# With jim's annotations
# and parallel look at what "gdb small" spits out.
# 

        .text
.globl _algebra
_algebra:                                     # --- gdb disass algebra ---
        pushl   %ebp                          0x00001dd6 <algebra+0>:   push   %ebp
        movl    %esp, %ebp                    0x00001dd7 <algebra+1>:   mov    %esp,%ebp
        subl    $8, %esp                      0x00001dd9 <algebra+3>:   sub    $0x8,%esp
        movl    8(%ebp), %edx                 0x00001ddc <algebra+6>:   mov    0x8(%ebp),%edx
        movl    %edx, %eax                    0x00001ddf <algebra+9>:   mov    %edx,%eax
        sall    $2, %eax                      0x00001de1 <algebra+11>:  shl    $0x2,%eax
        addl    %edx, %eax                    0x00001de4 <algebra+14>:  add    %edx,%eax
        addl    %eax, %eax                    0x00001de6 <algebra+16>:  add    %eax,%eax
        leal    (%eax,%edx), %ecx             0x00001de8 <algebra+18>:  lea    (%eax,%edx,1),%ecx
        movl    12(%ebp), %edx                0x00001deb <algebra+21>:  mov    0xc(%ebp),%edx
        movl    %edx, %eax                    0x00001dee <algebra+24>:  mov    %edx,%eax
        addl    %eax, %eax                    0x00001df0 <algebra+26>:  add    %eax,%eax
        addl    %edx, %eax                    0x00001df2 <algebra+28>:  add    %edx,%eax
        sall    $2, %eax                      0x00001df4 <algebra+30>:  shl    $0x2,%eax
        addl    %edx, %eax                    0x00001df7 <algebra+33>:  add    %edx,%eax
        leal    (%ecx,%eax), %eax             0x00001df9 <algebra+35>:  lea    (%ecx,%eax,1),%eax
        leal    7(%eax), %ecx                 0x00001dfc <algebra+38>:  lea    0x7(%eax),%ecx
        movl    16(%ebp), %edx                0x00001dff <algebra+41>:  mov    0x10(%ebp),%edx
        movl    %edx, %eax                    0x00001e02 <algebra+44>:  mov    %edx,%eax
        sall    $4, %eax                      0x00001e04 <algebra+46>:  shl    $0x4,%eax
        addl    %edx, %eax                    0x00001e07 <algebra+49>:  add    %edx,%eax
        leal    (%ecx,%eax), %eax             0x00001e09 <algebra+51>:  lea    (%ecx,%eax,1),%eax
        leave                                 0x00001e0c <algebra+54>:  leave  
        ret                                   0x00001e0d <algebra+55>:  ret    
.globl _swap
_swap:                                        # --- gdb disass swap ---
        pushl   %ebp                          0x00001e0e <swap+0>:      push   %ebp
        movl    %esp, %ebp                    0x00001e0f <swap+1>:      mov    %esp,%ebp
        subl    $24, %esp                     0x00001e11 <swap+3>:      sub    $0x18,%esp
        movl    8(%ebp), %eax                 0x00001e14 <swap+6>:      mov    0x8(%ebp),%eax
        movl    (%eax), %eax                  0x00001e17 <swap+9>:      mov    (%eax),%eax
        movl    %eax, -12(%ebp)               0x00001e19 <swap+11>:     mov    %eax,-0xc(%ebp)
        movl    12(%ebp), %eax                0x00001e1c <swap+14>:     mov    0xc(%ebp),%eax
        movl    (%eax), %edx                  0x00001e1f <swap+17>:     mov    (%eax),%edx
        movl    8(%ebp), %eax                 0x00001e21 <swap+19>:     mov    0x8(%ebp),%eax
        movl    %edx, (%eax)                  0x00001e24 <swap+22>:     mov    %edx,(%eax)
        movl    12(%ebp), %edx                0x00001e26 <swap+24>:     mov    0xc(%ebp),%edx
        movl    -12(%ebp), %eax               0x00001e29 <swap+27>:     mov    -0xc(%ebp),%eax
        movl    %eax, (%edx)                  0x00001e2c <swap+30>:     mov    %eax,(%edx)
        leave                                 0x00001e2e <swap+32>:     leave  
        ret                                   0x00001e2f <swap+33>:     ret    
        .cstring
LC0:
        .ascii "string: '%s'\12\0"            # note: this is not between swap and print_string in compiled code.
        .text
.globl _print_string
_print_string:                                # --- gdb disass print_string (abbreviated p_s+* below) ---
        pushl   %ebp                          0x00001e30 <p_s+0>:       push   %ebp
        movl    %esp, %ebp                    0x00001e31 <p_s+1>:       mov    %esp,%ebp
        pushl   %ebx                          0x00001e33 <p_s+3>:       push   %ebx
        subl    $20, %esp                     0x00001e34 <p_s+4>:       sub    $0x14,%esp
        call    L7                            0x00001e37 <p_s+7>:       call   0x1e3c <p_s+12>
"L01$pb":                                       # note two labels, L0000001$pb (shortened), L7
L7:                                             # for this one location, 0x1e3c
        popl    %ebx                          0x00001e3c <p_s+12>:      pop    %ebx
        movl    8(%ebp), %eax                 0x00001e3d <p_s+13>:      mov    0x8(%ebp),%eax
        movl    %eax, 4(%esp)                 0x00001e40 <p_s+16>:      mov    %eax,0x4(%esp)
        leal    LC0-"L01$pb"(%ebx), %eax      0x00001e44 <p_s+20>:      lea    0xd4(%ebx),%eax
        movl    %eax, (%esp)                  0x00001e4a <p_s+26>:      mov    %eax,(%esp)
        call    _printf                       0x00001e4d <p_s+29>:      call   0x1f88 <dyld_stub_printf>
        addl    $20, %esp                     0x00001e52 <p_s+34>:      add    $0x14,%esp
        popl    %ebx                          0x00001e55 <p_s+37>:      pop    %ebx
        leave                                 0x00001e56 <p_s+38>:      leave  
        ret                                   0x00001e57 <p_s+39>:      ret    
        .cstring
LC1:
        .ascii "The first string.  I think.\0"
        .align 2
LC2:
        .ascii "This second string.  So there.\0"
        .align 2
LC3:
        .ascii "x,y,z = %i,%i,%i, algebra(x,y,z)=%i \12\0"
        .text
.globl _main
_main:
        pushl   %ebp                          0x00001e58 <main+0>:      push   %ebp
        movl    %esp, %ebp                    0x00001e59 <main+1>:      mov    %esp,%ebp
        pushl   %ebx                          0x00001e5b <main+3>:      push   %ebx
        subl    $68, %esp                     0x00001e5c <main+4>:      sub    $0x44,%esp
        call    L13                           0x00001e5f <main+7>:      call   0x1e64 <main+12>
"L02$pb":
L13:
        popl    %ebx                          0x00001e64 <main+12>:     pop    %ebx
        leal    LC1-    "L02$pb"(%ebx), %eax  0x00001e65 <main+13>:     lea    0xba(%ebx),%eax
        movl    %eax, -16(%ebp)               0x00001e6b <main+19>:     mov    %eax,-0x10(%ebp)
        leal    LC2-"L02$pb"(%ebx), %eax      0x00001e6e <main+22>:     lea    0xd8(%ebx),%eax
        movl    %eax, -20(%ebp)               0x00001e74 <main+28>:     mov    %eax,-0x14(%ebp)
        movl    $4, -24(%ebp)                 0x00001e77 <main+31>:     movl   $0x4,-0x18(%ebp)
        movl    $6, -28(%ebp)                 0x00001e7e <main+38>:     movl   $0x6,-0x1c(%ebp)
        movl    $8, -32(%ebp)                 0x00001e85 <main+45>:     movl   $0x8,-0x20(%ebp)
        leal    -28(%ebp), %eax               0x00001e8c <main+52>:     lea    -0x1c(%ebp),%eax
        movl    %eax, 4(%esp)                 0x00001e8f <main+55>:     mov    %eax,0x4(%esp)
        leal    -24(%ebp), %eax               0x00001e93 <main+59>:     lea    -0x18(%ebp),%eax
        movl    %eax, (%esp)                  0x00001e96 <main+62>:     mov    %eax,(%esp)
        call    _swap                         0x00001e99 <main+65>:     call   0x1e0e <swap>
        movl    -28(%ebp), %edx               0x00001e9e <main+70>:     mov    -0x1c(%ebp),%edx
        movl    -24(%ebp), %ecx               0x00001ea1 <main+73>:     mov    -0x18(%ebp),%ecx
        movl    -32(%ebp), %eax               0x00001ea4 <main+76>:     mov    -0x20(%ebp),%eax
        movl    %eax, 8(%esp)                 0x00001ea7 <main+79>:     mov    %eax,0x8(%esp)
        movl    %edx, 4(%esp)                 0x00001eab <main+83>:     mov    %edx,0x4(%esp)
        movl    %ecx, (%esp)                  0x00001eaf <main+87>:     mov    %ecx,(%esp)
        call    _algebra                      0x00001eb2 <main+90>:     call   0x1dd6 <algebra>
        movl    %eax, -12(%ebp)               0x00001eb7 <main+95>:     mov    %eax,-0xc(%ebp)
        movl    -28(%ebp), %edx               0x00001eba <main+98>:     mov    -0x1c(%ebp),%edx
        movl    -24(%ebp), %ecx               0x00001ebd <main+101>:    mov    -0x18(%ebp),%ecx
        movl    -12(%ebp), %eax               0x00001ec0 <main+104>:    mov    -0xc(%ebp),%eax
        movl    %eax, 16(%esp)                0x00001ec3 <main+107>:    mov    %eax,0x10(%esp)
        movl    -32(%ebp), %eax               0x00001ec7 <main+111>:    mov    -0x20(%ebp),%eax
        movl    %eax, 12(%esp)                0x00001eca <main+114>:    mov    %eax,0xc(%esp)
        movl    %edx, 8(%esp)                 0x00001ece <main+118>:    mov    %edx,0x8(%esp)
        movl    %ecx, 4(%esp)                 0x00001ed2 <main+122>:    mov    %ecx,0x4(%esp)
        leal    LC3-"L02$pb"(%ebx), %eax      0x00001ed6 <main+126>:    lea    0xf8(%ebx),%eax
        movl    %eax, (%esp)                  0x00001edc <main+132>:    mov    %eax,(%esp)
        call    _printf                       0x00001edf <main+135>:    call   0x1f88 <dyld_stub_printf>
        cmpl    $10, -12(%ebp)                0x00001ee4 <main+140>:    cmpl   $0xa,-0xc(%ebp)
        jle     L9                            0x00001ee8 <main+144>:    jle    0x1ef7 <main+159>
        movl    -16(%ebp), %eax               0x00001eea <main+146>:    mov    -0x10(%ebp),%eax
        movl    %eax, (%esp)                  0x00001eed <main+149>:    mov    %eax,(%esp)
        call    _print_string                 0x00001ef0 <main+152>:    call   0x1e30 <print_string>
        jmp     L11                           0x00001ef5 <main+157>:    jmp    0x1f02 <main+170>
L9:     
        movl    -20(%ebp), %eax               0x00001ef7 <main+159>:    mov    -0x14(%ebp),%eax
        movl    %eax, (%esp)                  0x00001efa <main+162>:    mov    %eax,(%esp)
        call    _print_string                 0x00001efd <main+165>:    call   0x1e30 <print_string>
L11:                                          
        movl    $0, %eax                      0x00001f02 <main+170>:    mov    $0x0,%eax
        addl    $68, %esp                     0x00001f07 <main+175>:    add    $0x44,%esp
        popl    %ebx                          0x00001f0a <main+178>:    pop    %ebx
        leave                                 0x00001f0b <main+179>:    leave  
        ret                                   0x00001f0c <main+180>:    ret    
        .subsections_via_symbols

