.file "lists.c" .section .rodata.str1.1,"aMS",@progbits,1 .LC0: .string "%d " .LC1: .string "the length of B is %d\n" .text .align 2 .p2align 2,,3 .globl main .type main,@function main: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi pushl %ebx subl $12, %esp andl $-16, %esp subl $12, %esp pushl $8 call malloc movl $7, (%eax) movl $0, 4(%eax) movl %eax, %esi movl $8, (%esp) call malloc movl $5, (%eax) movl %esi, 4(%eax) movl %eax, %edi movl $8, (%esp) call malloc movl %edi, 4(%eax) movl $3, (%eax) movl %eax, %ebx movl $8, (%esp) call malloc movl %ebx, 4(%eax) movl $1, (%eax) movl 4(%ebx), %ebx movl %eax, %edi movl $8, (%esp) call malloc movl %ebx, 4(%eax) addl $16, %esp xorl %ebx, %ebx testl %edi, %edi movl %eax, -16(%ebp) movl $1, (%eax) je .L10 movl $3, %eax cmpl (%edi), %eax je .L11 subl $8, %esp pushl 4(%edi) pushl $3 call member addl $16, %esp testl %eax, %eax je .L10 .L11: movl $1, %ebx .L10: testl %ebx, %ebx je .L9 testl %edi, %edi movl %edi, %ebx je .L70 .p2align 2,,3 .L21: subl $8, %esp pushl (%ebx) pushl $.LC0 call printf movl 4(%ebx), %ebx addl $16, %esp testl %ebx, %ebx jne .L21 .L70: subl $12, %esp pushl $10 call putchar addl $16, %esp .L9: movl -16(%ebp), %edx xorl %eax, %eax testl %edx, %edx je .L24 subl $12, %esp movl -16(%ebp), %eax pushl 4(%eax) call length incl %eax addl $16, %esp .L24: subl $8, %esp pushl %eax pushl $.LC1 call printf addl $16, %esp xorl %eax, %eax testl %edi, %edi je .L28 subl $12, %esp pushl (%edi) call sqr popl %edx popl %ecx pushl 4(%edi) pushl $sqr movl %eax, %esi call mapfun movl %eax, %ebx movl $8, (%esp) call malloc movl %esi, (%eax) addl $16, %esp movl %ebx, 4(%eax) .L28: testl %eax, %eax movl %eax, %ebx je .L72 .p2align 2,,3 .L39: subl $8, %esp pushl (%ebx) pushl $.LC0 call printf movl 4(%ebx), %ebx addl $16, %esp testl %ebx, %ebx jne .L39 .L72: subl $12, %esp pushl $10 call putchar xorl %ebx, %ebx addl $16, %esp testl %edi, %edi je .L42 movl (%edi), %esi movl $3, %eax cmpl %esi, %eax je .L78 subl $8, %esp pushl 4(%edi) pushl $3 call deleteall movl %eax, %ebx movl $8, (%esp) call malloc movl %esi, (%eax) addl $16, %esp movl %ebx, 4(%eax) .L77: movl %eax, %ebx .L42: testl %edi, %edi je .L52 subl $12, %esp pushl 4(%edi) call freecells movl %edi, (%esp) call free addl $16, %esp .L52: testl %ebx, %ebx je .L74 .p2align 2,,3 .L59: subl $8, %esp pushl (%ebx) pushl $.LC0 call printf movl 4(%ebx), %ebx addl $16, %esp testl %ebx, %ebx jne .L59 .L74: subl $12, %esp pushl $10 call putchar movl -16(%ebp), %ebx addl $16, %esp testl %ebx, %ebx je .L76 .p2align 2,,3 .L67: subl $8, %esp pushl (%ebx) pushl $.LC0 call printf movl 4(%ebx), %ebx addl $16, %esp testl %ebx, %ebx jne .L67 jmp .L76 .L78: subl $8, %esp pushl 4(%edi) pushl $3 call deleteall addl $16, %esp jmp .L77 .p2align 2,,3 .L76: subl $12, %esp pushl $10 call putchar movl $0, (%esp) call exit .Lfe1: .size main,.Lfe1-main .align 2 .p2align 2,,3 .globl cons .type cons,@function cons: pushl %ebp movl %esp, %ebp subl $20, %esp pushl $8 call malloc movl 8(%ebp), %ecx movl %ecx, (%eax) movl 12(%ebp), %ecx movl %ecx, 4(%eax) leave ret .Lfe2: .size cons,.Lfe2-cons .align 2 .p2align 2,,3 .globl car .type car,@function car: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl (%eax), %eax leave ret .Lfe3: .size car,.Lfe3-car .align 2 .p2align 2,,3 .globl cdr .type cdr,@function cdr: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl 4(%eax), %eax leave ret .Lfe4: .size cdr,.Lfe4-cdr .align 2 .p2align 2,,3 .globl freecells .type freecells,@function freecells: pushl %ebp movl %esp, %ebp pushl %ebx pushl %eax movl 8(%ebp), %ebx testl %ebx, %ebx je .L97 subl $12, %esp pushl 4(%ebx) call freecells movl %ebx, 8(%ebp) addl $16, %esp movl -4(%ebp), %ebx leave jmp free .p2align 2,,3 .L97: movl -4(%ebp), %ebx leave ret .Lfe5: .size freecells,.Lfe5-freecells .align 2 .p2align 2,,3 .globl length .type length,@function length: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx xorl %eax, %eax testl %edx, %edx je .L100 subl $12, %esp pushl 4(%edx) call length incl %eax .L100: leave ret .Lfe6: .size length,.Lfe6-length .align 2 .p2align 2,,3 .globl member .type member,@function member: pushl %ebp movl %esp, %ebp movl 12(%ebp), %eax pushl %ebx xorl %ebx, %ebx testl %eax, %eax movl 8(%ebp), %edx je .L106 cmpl (%eax), %edx je .L107 subl $8, %esp pushl 4(%eax) pushl %edx call member addl $16, %esp testl %eax, %eax je .L106 .L107: movl $1, %ebx .L106: movl %ebx, %eax movl -4(%ebp), %ebx leave ret .Lfe7: .size member,.Lfe7-member .align 2 .p2align 2,,3 .globl nth .type nth,@function nth: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx movl 12(%ebp), %eax .p2align 2,,3 .L115: testl %edx, %edx jle .L116 decl %edx movl 4(%eax), %eax jmp .L115 .L116: leave ret .Lfe8: .size nth,.Lfe8-nth .align 2 .p2align 2,,3 .globl printlist .type printlist,@function printlist: pushl %ebp movl %esp, %ebp pushl %ebx pushl %eax movl 8(%ebp), %ebx testl %ebx, %ebx je .L126 .p2align 2,,3 .L124: subl $8, %esp pushl (%ebx) pushl $.LC0 call printf movl 4(%ebx), %ebx addl $16, %esp testl %ebx, %ebx jne .L124 .L126: movl $10, 8(%ebp) movl -4(%ebp), %ebx leave jmp putchar .Lfe9: .size printlist,.Lfe9-printlist .align 2 .p2align 2,,3 .globl doubleup .type doubleup,@function doubleup: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi pushl %ebx subl $12, %esp movl 8(%ebp), %edx xorl %eax, %eax testl %edx, %edx je .L127 subl $12, %esp movl (%edx), %edi pushl 4(%edx) call doubleup movl %eax, %esi movl $8, (%esp) call malloc movl %edi, (%eax) movl %esi, 4(%eax) movl %eax, %ebx movl $8, (%esp) call malloc movl %edi, (%eax) addl $16, %esp movl %ebx, 4(%eax) .L127: leal -12(%ebp), %esp popl %ebx popl %esi popl %edi leave ret .Lfe10: .size doubleup,.Lfe10-doubleup .align 2 .p2align 2,,3 .globl mapfun .type mapfun,@function mapfun: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi pushl %ebx subl $12, %esp movl 12(%ebp), %ebx xorl %eax, %eax testl %ebx, %ebx movl 8(%ebp), %edi je .L136 subl $12, %esp pushl (%ebx) call *%edi popl %edx popl %ecx pushl 4(%ebx) pushl %edi movl %eax, %esi call mapfun movl %eax, %edi movl $8, (%esp) call malloc movl %esi, (%eax) addl $16, %esp movl %edi, 4(%eax) .L136: leal -12(%ebp), %esp popl %ebx popl %esi popl %edi leave ret .Lfe11: .size mapfun,.Lfe11-mapfun .align 2 .p2align 2,,3 .globl sqr .type sqr,@function sqr: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax imull %eax, %eax leave ret .Lfe12: .size sqr,.Lfe12-sqr .align 2 .p2align 2,,3 .globl reverse .type reverse,@function reverse: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi pushl %ebx subl $12, %esp movl 8(%ebp), %esi movl 12(%ebp), %edi .p2align 2,,3 .L150: testl %esi, %esi je .L151 subl $12, %esp movl (%esi), %ebx pushl $8 call malloc movl %edi, 4(%eax) addl $16, %esp movl 4(%esi), %esi movl %eax, %edi movl %ebx, (%eax) jmp .L150 .L151: leal -12(%ebp), %esp popl %ebx popl %esi movl %edi, %eax popl %edi leave ret .Lfe13: .size reverse,.Lfe13-reverse .align 2 .p2align 2,,3 .globl deleteall .type deleteall,@function deleteall: pushl %ebp movl %esp, %ebp pushl %esi pushl %ebx movl 8(%ebp), %ecx movl 12(%ebp), %edx .p2align 2,,3 .L158: xorl %eax, %eax testl %edx, %edx je .L152 movl (%edx), %esi cmpl %esi, %ecx jne .L155 movl 4(%edx), %edx jmp .L158 .L155: subl $8, %esp pushl 4(%edx) pushl %ecx call deleteall movl %eax, %ebx movl $8, (%esp) call malloc movl %esi, (%eax) addl $16, %esp movl %ebx, 4(%eax) .L152: leal -8(%ebp), %esp popl %ebx popl %esi leave ret .Lfe14: .size deleteall,.Lfe14-deleteall .ident "GCC: (GNU) 3.2 20020903 (Red Hat Linux 8.0 3.2-7)"