.file "test3.s" .section .rodata .STR0: .string "%d " .STR1: .string "\n" .STR2: .string "%d " .text AAA_new: ret AAA_f: pushl %ebp movl %esp, %ebp addl $-16, %esp movl 12(%ebp), %edx pushl %edx pushl %esi imul $4, %edx pushl %edx call malloc subl $-4, %esp popl %esi popl %edx movl %eax, %ebx movl %ebx, -4(%ebp) movl $0, -8(%ebp) WHILE1: movl -8(%ebp), %edx cmp 12(%ebp), %edx jge WHILEXIT1 movl 12(%ebp), %edx subl $1, %edx subl -8(%ebp), %edx movl 8(%ebp), %ebx movl (%ebx,%edx,4), %edx movl -8(%ebp), %edi movl -4(%ebp), %ecx movl %edx, (%ecx,%edi,4) movl -8(%ebp), %edx addl $1, %edx movl %edx, -8(%ebp) jmp WHILE1 WHILEXIT1: movl -4(%ebp), %eax movl %ebp, %esp popl %ebp ret .globl main main: pushl %ebp movl %esp, %ebp addl $-16, %esp pushl %esi pushl %ecx pushl %edi pushl $0 call malloc subl $-4, %esp movl (%esp), %edi movl 4(%esp), %ecx movl 8(%esp), %esi pushl %eax movl %eax, %esi call AAA_new popl %edx popl %edi popl %ecx popl %esi movl %edx, -4(%ebp) movl $3, %edx pushl %edx pushl %esi pushl %ecx pushl %edi imul $4, %edx pushl %edx call malloc subl $-4, %esp popl %edi popl %ecx popl %esi popl %edx movl %eax, %edx movl %edx, %edi movl $0, %ebx movl %edi, %edx movl $1, (%edx,%ebx,4) movl $1, %ebx movl $3, (%edx,%ebx,4) movl $2, %ebx movl $5, (%edx,%ebx,4) pushl %esi pushl %ecx pushl %edi addl $-16, %esp movl %edi, (%esp) movl $3, 4(%esp) movl -4(%ebp), %esi call AAA_f addl $16, %esp popl %edi popl %ecx popl %esi movl %eax, %edx movl %edx, -12(%ebp) movl $0, %ecx WHILE2: movl %ecx, %edx cmp $3, %edx jge WHILEXIT2 pushl %esi pushl %ecx pushl %edi addl $-16, %esp movl $.STR0, (%esp) movl %ecx, %edx movl -12(%ebp), %ebx movl (%ebx,%edx,4), %edx movl %edx, 4(%esp) call printf addl $16, %esp popl %edi popl %ecx popl %esi addl $1, %ecx jmp WHILE2 WHILEXIT2: pushl %esi pushl %ecx pushl %edi addl $-16, %esp movl $.STR1, (%esp) call printf addl $16, %esp popl %edi popl %ecx popl %esi movl $0, %ecx WHILE3: movl %ecx, %edx cmp $3, %edx jge WHILEXIT3 pushl %esi pushl %ecx pushl %edi addl $-16, %esp movl $.STR2, (%esp) movl %ecx, %edx movl %edi, %ebx movl (%ebx,%edx,4), %edx movl %edx, 4(%esp) call printf addl $16, %esp popl %edi popl %ecx popl %esi addl $1, %ecx jmp WHILE3 WHILEXIT3: movl $0, %eax movl %ebp, %esp popl %ebp ret