# f4.s , to use an external function to calculate the area of a circle
.section .data
precision:
.byte 0x7f, 0x00 # 0 , 127
.section .bss
.lcomm result, 4 # result in a 32 bit, single precision floating point 
.section .text
.globl _start
_start:
nop
finit
fldcw precision
pushl $10 # radius value is pushed onto the stack before the call to the area function
call area
addl $4, %esp # stack is reset to its previous location by adding 4 (the data size of the radius value) to the ESP=-4ebp
movl %eax, result # the result is then moved from the EAX register to the variable memory location
pushl $2 # radius value is pushed onto the stack before the call to the area function
call area
addl $4, %esp # stack is reset to its previous location by adding 4 (the data size of the radius value) to the ESP=-4ebp
movl %eax, result # the result is then moved from the EAX register to the variable memory location
pushl $120 # radius value is pushed onto the stack before the call to the area function
call area
addl $4, %esp # stack is reset to its previous location by adding 4 (the data size of the radius value) to the ESP=-4ebp
movl %eax, result # the result is then moved from the EAX register to the variable memory location
movl $1, %eax
movl $0, %ebx
int $0x80

