第11部分-Linux x86 64位汇编 函数完整示例

第11部分-Linux x86 64位汇编 函数完整示例

调用函数示例

这里开始使用到64位的寄存器了,编译的也是64位可执行程序了。

.extern printf ;//调用外部的printf函数
.section .data

result:
   .ascii "Area result is %f.\n"
   .byte 0x0a,0x0

precision:
   .byte 0x7f, 0x00
.section .bss
   .lcomm value, 4
   .lcomm areasize, 8

.section .text
.globl _start
_start:
   nop
   finit;//初始化FPU
   fldcw precision;//加载精度到FPU的控制寄存器

   movl $10, %ebx
   call area;//调用函数area
   movq $result,%rdi
   fstpl areasize 
   movq areasize, %xmm0
   call printf


   movl $2, %ebx
   call area;//调用函数area
   movq $result,%rdi
   fstpl areasize 
   movq areasize,%xmm0
   call printf


   movl $120, %ebx
   call area;//调用函数area
   movq $result,%rdi
   fstpl areasize 
   movq areasize,%xmm0
   call printf

   mov $60,%rax
   syscall

.type area, @function;//定义函数area
area:
   fldpi;//加载π
   imull %ebx, %ebx;//半径相乘
   movl %ebx, value;//半径相乘结果移动到value
   filds value;//加载半径相乘结果到st0,π移动到st1
   fmulp %st(0), %st(1) ;//求面积,保存到栈顶st0
   ret

as -o functest.o functest.s

ld -o functest functest.o -lc -I /lib64/ld-linux-x86-64.so.2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值