首页
社区
课程
招聘
[原创]浮点数计算,printf的妙用
发表于: 2013-5-28 16:16 7478

[原创]浮点数计算,printf的妙用

2013-5-28 16:16
7478
标 题: 【原创】浮点数计算,printf的妙用
作 者: 没缴电费
时 间: 2013-05-28,16:20:17
链 接: http://bbs.pediy.com/showthread.php?t=172452

在分析某软件时发现,所有的浮点数计算均通过软浮点库函数来实现。
看到的都是类似如下表示方式:

LDR     R0, [SP,#0x198+var_70]
LDR     R1, [SP,#0x198+var_6C]
LDR     R2, =0xE147AE14
LDR     R3, =0x3FD6147A
BL      ___adddf3

这就是一简单的加法计算,不过参数2是一个常量,这给理解带来相当麻烦。(正常人不可能看见R2 R3就能得出该值是多少吧)

ARM,fastcall,其中,double型使用两个通用寄存器来存储,那么只需使用两个寄存器,分别传入该值即可。

printf("%f\n", 0xE147AE14, 0x3FD6147A);

编译后,该行代码应该表现为以下形式:

MOV     R0, xxxxxxxx          ; "%f\n"
LDR     R1, =0xE147AE14
LDR     R2, =0x3FD6147A
BL      _printf

结果为0.345
放入 http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml 验证
正确

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 601
活跃值: (256)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
2
2013-5-28 16:32
0
雪    币: 507
活跃值: (130)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
还行,支持一下·~
2013-9-29 17:10
0
游客
登录 | 注册 方可回帖
返回
//