.pos 0 main: irmovl stack,%esp # initialisation du pointeur de pile (stack pointer) mrmovl b,%eax # on empile le second param b pushl %eax mrmovl a,%eax # on empile le premier param a pushl %eax call f # appel de la fonction f() aret: popl %ecx # on depile le premier param popl %ecx # on depile le second param rmmovl %eax,res # recup resultat halt f: isubl 4,%esp # alloc variable locale x sur la pile mrmovl 8(%esp),%eax # recup premier param a mrmovl 12(%esp),%edx # recup second param b ... # compute x mrmovl (%esp),%ecx # load x pushl %ecx # save x ... # do something else mrmovl (%esp),%eax # restore x (variable de retour dans %eax) iaddl 4,%esp # liberation variable locale x ret .pos 0x100 a: .long 1 b: .long 1 res: .long 0 .pos 0x200 # adresse de base de la pile stack: