# With jim's annotations # and parallel look at what "gdb small" spits out. # .text .globl _algebra _algebra: # --- gdb disass algebra --- pushl %ebp 0x00001dd6 : push %ebp movl %esp, %ebp 0x00001dd7 : mov %esp,%ebp subl $8, %esp 0x00001dd9 : sub $0x8,%esp movl 8(%ebp), %edx 0x00001ddc : mov 0x8(%ebp),%edx movl %edx, %eax 0x00001ddf : mov %edx,%eax sall $2, %eax 0x00001de1 : shl $0x2,%eax addl %edx, %eax 0x00001de4 : add %edx,%eax addl %eax, %eax 0x00001de6 : add %eax,%eax leal (%eax,%edx), %ecx 0x00001de8 : lea (%eax,%edx,1),%ecx movl 12(%ebp), %edx 0x00001deb : mov 0xc(%ebp),%edx movl %edx, %eax 0x00001dee : mov %edx,%eax addl %eax, %eax 0x00001df0 : add %eax,%eax addl %edx, %eax 0x00001df2 : add %edx,%eax sall $2, %eax 0x00001df4 : shl $0x2,%eax addl %edx, %eax 0x00001df7 : add %edx,%eax leal (%ecx,%eax), %eax 0x00001df9 : lea (%ecx,%eax,1),%eax leal 7(%eax), %ecx 0x00001dfc : lea 0x7(%eax),%ecx movl 16(%ebp), %edx 0x00001dff : mov 0x10(%ebp),%edx movl %edx, %eax 0x00001e02 : mov %edx,%eax sall $4, %eax 0x00001e04 : shl $0x4,%eax addl %edx, %eax 0x00001e07 : add %edx,%eax leal (%ecx,%eax), %eax 0x00001e09 : lea (%ecx,%eax,1),%eax leave 0x00001e0c : leave ret 0x00001e0d : ret .globl _swap _swap: # --- gdb disass swap --- pushl %ebp 0x00001e0e : push %ebp movl %esp, %ebp 0x00001e0f : mov %esp,%ebp subl $24, %esp 0x00001e11 : sub $0x18,%esp movl 8(%ebp), %eax 0x00001e14 : mov 0x8(%ebp),%eax movl (%eax), %eax 0x00001e17 : mov (%eax),%eax movl %eax, -12(%ebp) 0x00001e19 : mov %eax,-0xc(%ebp) movl 12(%ebp), %eax 0x00001e1c : mov 0xc(%ebp),%eax movl (%eax), %edx 0x00001e1f : mov (%eax),%edx movl 8(%ebp), %eax 0x00001e21 : mov 0x8(%ebp),%eax movl %edx, (%eax) 0x00001e24 : mov %edx,(%eax) movl 12(%ebp), %edx 0x00001e26 : mov 0xc(%ebp),%edx movl -12(%ebp), %eax 0x00001e29 : mov -0xc(%ebp),%eax movl %eax, (%edx) 0x00001e2c : mov %eax,(%edx) leave 0x00001e2e : leave ret 0x00001e2f : 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 : push %ebp movl %esp, %ebp 0x00001e31 : mov %esp,%ebp pushl %ebx 0x00001e33 : push %ebx subl $20, %esp 0x00001e34 : sub $0x14,%esp call L7 0x00001e37 : call 0x1e3c "L01$pb": # note two labels, L0000001$pb (shortened), L7 L7: # for this one location, 0x1e3c popl %ebx 0x00001e3c : pop %ebx movl 8(%ebp), %eax 0x00001e3d : mov 0x8(%ebp),%eax movl %eax, 4(%esp) 0x00001e40 : mov %eax,0x4(%esp) leal LC0-"L01$pb"(%ebx), %eax 0x00001e44 : lea 0xd4(%ebx),%eax movl %eax, (%esp) 0x00001e4a : mov %eax,(%esp) call _printf 0x00001e4d : call 0x1f88 addl $20, %esp 0x00001e52 : add $0x14,%esp popl %ebx 0x00001e55 : pop %ebx leave 0x00001e56 : leave ret 0x00001e57 : 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 : push %ebp movl %esp, %ebp 0x00001e59 : mov %esp,%ebp pushl %ebx 0x00001e5b : push %ebx subl $68, %esp 0x00001e5c : sub $0x44,%esp call L13 0x00001e5f : call 0x1e64 "L02$pb": L13: popl %ebx 0x00001e64 : pop %ebx leal LC1- "L02$pb"(%ebx), %eax 0x00001e65 : lea 0xba(%ebx),%eax movl %eax, -16(%ebp) 0x00001e6b : mov %eax,-0x10(%ebp) leal LC2-"L02$pb"(%ebx), %eax 0x00001e6e : lea 0xd8(%ebx),%eax movl %eax, -20(%ebp) 0x00001e74 : mov %eax,-0x14(%ebp) movl $4, -24(%ebp) 0x00001e77 : movl $0x4,-0x18(%ebp) movl $6, -28(%ebp) 0x00001e7e : movl $0x6,-0x1c(%ebp) movl $8, -32(%ebp) 0x00001e85 : movl $0x8,-0x20(%ebp) leal -28(%ebp), %eax 0x00001e8c : lea -0x1c(%ebp),%eax movl %eax, 4(%esp) 0x00001e8f : mov %eax,0x4(%esp) leal -24(%ebp), %eax 0x00001e93 : lea -0x18(%ebp),%eax movl %eax, (%esp) 0x00001e96 : mov %eax,(%esp) call _swap 0x00001e99 : call 0x1e0e movl -28(%ebp), %edx 0x00001e9e : mov -0x1c(%ebp),%edx movl -24(%ebp), %ecx 0x00001ea1 : mov -0x18(%ebp),%ecx movl -32(%ebp), %eax 0x00001ea4 : mov -0x20(%ebp),%eax movl %eax, 8(%esp) 0x00001ea7 : mov %eax,0x8(%esp) movl %edx, 4(%esp) 0x00001eab : mov %edx,0x4(%esp) movl %ecx, (%esp) 0x00001eaf : mov %ecx,(%esp) call _algebra 0x00001eb2 : call 0x1dd6 movl %eax, -12(%ebp) 0x00001eb7 : mov %eax,-0xc(%ebp) movl -28(%ebp), %edx 0x00001eba : mov -0x1c(%ebp),%edx movl -24(%ebp), %ecx 0x00001ebd : mov -0x18(%ebp),%ecx movl -12(%ebp), %eax 0x00001ec0 : mov -0xc(%ebp),%eax movl %eax, 16(%esp) 0x00001ec3 : mov %eax,0x10(%esp) movl -32(%ebp), %eax 0x00001ec7 : mov -0x20(%ebp),%eax movl %eax, 12(%esp) 0x00001eca : mov %eax,0xc(%esp) movl %edx, 8(%esp) 0x00001ece : mov %edx,0x8(%esp) movl %ecx, 4(%esp) 0x00001ed2 : mov %ecx,0x4(%esp) leal LC3-"L02$pb"(%ebx), %eax 0x00001ed6 : lea 0xf8(%ebx),%eax movl %eax, (%esp) 0x00001edc : mov %eax,(%esp) call _printf 0x00001edf : call 0x1f88 cmpl $10, -12(%ebp) 0x00001ee4 : cmpl $0xa,-0xc(%ebp) jle L9 0x00001ee8 : jle 0x1ef7 movl -16(%ebp), %eax 0x00001eea : mov -0x10(%ebp),%eax movl %eax, (%esp) 0x00001eed : mov %eax,(%esp) call _print_string 0x00001ef0 : call 0x1e30 jmp L11 0x00001ef5 : jmp 0x1f02 L9: movl -20(%ebp), %eax 0x00001ef7 : mov -0x14(%ebp),%eax movl %eax, (%esp) 0x00001efa : mov %eax,(%esp) call _print_string 0x00001efd : call 0x1e30 L11: movl $0, %eax 0x00001f02 : mov $0x0,%eax addl $68, %esp 0x00001f07 : add $0x44,%esp popl %ebx 0x00001f0a : pop %ebx leave 0x00001f0b : leave ret 0x00001f0c : ret .subsections_via_symbols