问个浮点数汇编

jiangguobin 2013-03-23 02:09:06
问题在汇编代码里,有两个问题

290: int main( int argc, char* argv[] )
291: {
00E51490 push ebp
00E51491 mov ebp,esp
00E51493 sub esp,54h
00E51496 push ebx
00E51497 push esi
00E51498 push edi
292: float ff1=3.0;
00E51499 fld dword ptr ds:[00E548A4h]
-------------------------------------------------------
;这个ds是什么意思?我鼠标放上去显示值为0
; 所以我看了00E548A4内存的值,显示如下,3.0是我期望的值
- (float*)(0x0E548a4) 0x00e548a4 __real@40400000 float *
3.0000000 float
;寄存器窗口显示:
; CS = 0023 DS = 002B ES = 002B SS = 002B FS = 0053 GS = 002B
; 请问这里的DS又是什么?
-------------------------------------------------------
00E5149F fstp dword ptr [ebp-4]
293: float ff11=4.0;
00E514A2 fld dword ptr ds:[00E54854h]
00E514A8 fstp dword ptr [ebp-8]
294: float ff2 = ff1+2.0;
00E514AB fld dword ptr [ebp-4]
00E514AE fadd qword ptr ds:[00E54890h]
-------------------------------------------------------
;这里做加法,我期望00E54890h里的值是2.0
; 可是,为什么是0呢?我怎么找不到2.0在哪里?
- (float*)(0x00E54890) 0x00e54890 __real@4000000000000000 float *
0.00000000 float
-------------------------------------------------------
00E514B4 fstp dword ptr [ebp-0Ch]
295: float ff22 = 5.0;
00E514B7 fld dword ptr ds:[00E54850h]
00E514BD fstp dword ptr [ebp-10h]
296: float ff3 = floatfunc(ff2);
00E514C0 push ecx
00E514C1 fld dword ptr [ebp-0Ch]
00E514C4 fstp dword ptr [esp]
00E514C7 call 00E51177
00E514CC add esp,4
00E514CF fstp dword ptr [ebp-14h]
297: }
00E514D2 xor eax,eax
00E514D4 pop edi
00E514D5 pop esi
00E514D6 pop ebx
00E514D7 mov esp,ebp
00E514D9 pop ebp
00E514DA ret
...全文
71 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangguobin 2013-03-24
  • 打赏
  • 举报
回复
问题解决了 后面的加法中的2.0是一个double的,64位 所以我cast成float就看不到这个值了
O丸子爹O 2013-03-23
  • 打赏
  • 举报
回复
这是反汇编的代码,看得有些糊涂。 要是自己写的,还能给点建议。 这些8087浮点操作指令真的比较好用,以前用过。
课程背景Modbus 协议是工业自动化控制系统中常见的通信协议,协议的全面理解是个痛点。本课程主讲老师集10多年在Modbus协议学习、使用中的经验心得,结合当前物联网浪潮下Modbus协议开发的痛点,推出这套面向Modbus 协议初学者的课程。本课程不同于以往市面课程只是协议讲解无实现代码,而是采用讲解与实践并重的方式,结合STM32F103ZET6开发板进行手把手编程实践,十分有利于初学者学习。涵盖了学习者在Modbus协议方面会遇到的方方面面的问题,是目前全网首个对Modbus协议进行全面总结的课程。课程名称   协议讲解及实现>>课程内容1、Modbus 协议的基础。2、Modbus协议栈函数编程实现。3、Modbus协议在串行链路编程实现。4、Modbus协议在以太网链路编程实现。5、常见问题的解决方法。带给您的价值通过学习本课程,您可以做到如下:1、全面彻底的理解Modbus协议。2、理解在串行链路,以太网链路的实现。3、掌握Modbus协议解析的函数编程方法,调试工具的使用。4、掌握多个串口,网口同时运行同一个Modbus协议栈的方法。5、掌握Modbus协议下,负数,浮点数等处理方法。讲师简介许孝刚,山东大学工程硕士,副高职称,技术总监。10多年丰富嵌入式系统开发经验,国家软考“嵌入式系统设计师”。2017年获得“华为开发者社区杰出贡献者”奖励。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧