-
-
[原创]浮点数计算,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直播授课