.title "call.ic" # global declarations .global _ic_main .global _compute .global _i .global _j # data section .data .align 4 _i: .int 0 _j: .int 0 # text (code) section .text #---------------------------------------------------- .align 4 _ic_main: push %ebp # prologue mov %esp,%ebp # prologue movl $100, _i # i = 100 movl $200, _j # j = 200 # function call push _j # pre-call push _i # pre-call call _compute add $8, %esp # post-call # print result push %eax # pre-call call _printi add $4, %esp # post-call # print new line push $10 # pre-call call _printc add $4, %esp # post-call xor %eax, %eax # return 0 epilogue_ic_main: mov %ebp,%esp # epilogue pop %ebp # epilogue ret # epilogue #---------------------------------------------------- .align 4 _compute: push %ebp # prologue mov %esp, %ebp # prologue sub $4, %esp # prologue mov 8(%ebp), %eax # l = a+2 add $2, %eax mov %eax, -4(%ebp) mov 12(%ebp), %ecx # t = b+3 add $3, %ecx imul -4(%ebp), %ecx # l = l * t mov %ecx, -4(%ebp) mov -4(%ebp), %eax # return l epilogue_compute: mov %ebp, %esp # epilogue pop %ebp # epilogue ret # epilogue