/* generated by minijava+ compiler */ .section .rodata NLST: .string "\n" PRLNST: .string "%d\n" STR0: .string "no kidding\n" STR1: .string "I have more money than you do\n" STR2: .string "You have more money than I do\n" STR3: .string "-\n" bankaccount_bankaccount: push %edi pushl $8 call malloc add $4, %esp mov %eax, %edi mov $2, %eax mov %eax, 4(%edi) mov %edi, %eax pop %edi ret bankaccount_init: push %ebp mov %esp, %ebp mov 8(%ebp), %eax mov %eax, (%edi) mov (%edi), %eax mov %ebp, %esp pop %ebp ret bankaccount_withdraw: push %ebp mov %esp, %ebp pushl 4(%edi) mov (%edi), %eax mov 8(%ebp), %ebx sub %ebx, %eax pop %ebx sub %ebx, %eax mov %eax, (%edi) mov (%edi), %eax mov %ebp, %esp pop %ebp ret bankaccount_deposit: push %ebp mov %esp, %ebp pushl 8(%ebp) mov (%edi), %ebx add %ebx, (%esp) pop %eax mov %eax, (%edi) mov (%edi), %eax mov %ebp, %esp pop %ebp ret rational_rational: push %edi pushl $8 call malloc add $4, %esp mov %eax, %edi mov $1, %eax mov %eax, 4(%edi) mov %edi, %eax pop %edi ret rational_set: push %ebp mov %esp, %ebp mov 8(%ebp), %eax mov %eax, (%edi) mov $0, %ebx mov 12(%ebp), %eax mov $0, %ecx cmp %ebx, %eax sete %cl push %ecx xorl $1, (%esp) pop %eax cmp $1, %eax jne else0 mov 12(%ebp), %eax mov %eax, 4(%edi) jmp endif0 else0: nop endif0: nop mov $0, %eax mov %ebp, %esp pop %ebp ret rational_invert: push %ebp mov %esp, %ebp sub $4, %esp mov $0, %ebx mov (%edi), %eax mov $0, %ecx cmp %ebx, %eax sete %cl push %ecx xorl $1, (%esp) pop %eax cmp $1, %eax jne else1 mov (%edi), %eax mov %eax, -4(%ebp) mov 4(%edi), %eax mov %eax, (%edi) mov -4(%ebp), %eax mov %eax, 4(%edi) mov $1, %eax mov %ebp, %esp pop %ebp ret jmp endif1 else1: nop endif1: nop mov $0, %eax mov %ebp, %esp pop %ebp ret rational_print: push %ebp mov %esp, %ebp push %edi pushl (%edi) pushl $PRLNST call printf add $8, %esp pop %edi push %edi pushl $STR3 call printf add $4, %esp pop %edi push %edi pushl 4(%edi) pushl $PRLNST call printf add $8, %esp pop %edi mov $0, %eax mov %ebp, %esp pop %ebp ret .global main main: push %ebp mov %esp, %ebp sub $28, %esp mov $STR0, %eax mov %eax, -4(%ebp) mov $4, %eax mov %eax, -8(%ebp) pushl $1 mov -8(%ebp), %ebx add %ebx, (%esp) mov -8(%ebp), %eax pop %ebx mov $0, %ecx cmp %ebx, %eax sete %cl push %ecx xorl $1, (%esp) pop %eax cmp $1, %eax jne else2 push %edi pushl -4(%ebp) call printf add $4, %esp pop %edi jmp endif2 else2: nop endif2: nop call bankaccount_bankaccount mov %eax, -12(%ebp) call bankaccount_bankaccount mov %eax, -16(%ebp) push %edi mov -12(%ebp), %edi pushl $500 call bankaccount_init add $4, %esp pop %edi mov %eax, -20(%ebp) push %edi mov -16(%ebp), %edi pushl $800 call bankaccount_init add $4, %esp pop %edi mov %eax, -24(%ebp) push %edi mov -12(%ebp), %edi pushl $200 call bankaccount_withdraw add $4, %esp pop %edi mov %eax, -20(%ebp) push %edi mov -16(%ebp), %edi pushl $100 call bankaccount_deposit add $4, %esp pop %edi mov %eax, -24(%ebp) push %edi mov -12(%ebp), %edi pushl $50 call bankaccount_withdraw add $4, %esp pop %edi mov %eax, -20(%ebp) push %edi pushl -20(%ebp) pushl $PRLNST call printf add $8, %esp pop %edi push %edi pushl -24(%ebp) pushl $PRLNST call printf add $8, %esp pop %edi mov -20(%ebp), %ebx mov -24(%ebp), %eax mov $0, %ecx cmp %ebx, %eax setl %cl mov %ecx, %eax cmp $1, %eax jne else3 push %edi pushl $STR1 call printf add $4, %esp pop %edi jmp endif3 else3: nop push %edi pushl $STR2 call printf add $4, %esp pop %edi endif3: nop call rational_rational mov %eax, -28(%ebp) push %edi mov -28(%ebp), %edi pushl $3 pushl $2 call rational_set add $8, %esp pop %edi mov %eax, -8(%ebp) push %edi mov -28(%ebp), %edi call rational_invert add $0, %esp pop %edi mov %eax, -8(%ebp) push %edi mov -28(%ebp), %edi call rational_print add $0, %esp pop %edi mov %eax, -8(%ebp) pushl $0 call exit