area.s
# The area function. (函数使用堆栈传递数据)
#
# 计算给定半径的圆的面积
#
.section .text
.type area, @function
.globl area
area:
push %ebp
movl %esp, %ebp
subl $4, %esp
fldpi
filds 8(%ebp)
fmul %st(0), %st(0)
fmulp %st(0), %st(1)
fstps -4(%ebp)
movl -4(%ebp), %eax
movl %ebp, %esp
pop %ebp
ret
# as -gstabs -o area.o area.s
main.s
# An example of using external functions. (使用外部函数)
#
# 计算给定半径的圆的面积
#
.section .data
precision:
.byte 0x7f, 0x00
.section .bss
.lcomm result, 4
.section .text
.globl _start
_start:
nop
finit
fldcw precision
push $10
call area
addl $4, %esp
movl %eax, result
push $2
call area
addl $4, %esp
movl %eax, result
push $120
call area
addl $4, %esp
movl %eax, result
movl $1, %eax
movl $0, %ebx
# as -gstabs -o main.o main.s
# ld -o main main.o area.o