求懂汇编的人帮我改一行代码

rym1020 2009-12-25 07:11:57
0E1A75EA - f2 0f 10 40 04 - movsd xmm0,[eax+04]
0E1A75EF - 8b 05 d8 90 12 08 - mov eax,[081290d8] : 00000000
0E1A75F5 - 85 c0 - test eax,eax
0E1A75F7 - 0f 85 28 00 00 00 - jne 0e1a7625
0E1A75FD - 8b 45 08 - mov eax,[ebp+08]
0E1A7600 - 8b 10 - mov edx,[eax]
0E1A7602 - 8b 52 14 - mov edx,[edx+14]
0E1A7605 - 8b 52 10 - mov edx,[edx+10]
0E1A7608 - 83 e2 f8 - and edx,f8
0E1A760B - 8b 52 24 - mov edx,[edx+24]
0E1A760E - f2 0f 2a ca - cvtsi2sd xmm1,xmm2
0E1A7612 - f2 0f 59 c1 - mulsd xmm0,xmm1
0E1A7616 - f2 0f 11 41 18 - movsd [ecx+18],xmm0


以上是反汇编出来的代码。关键就在最后这句movsd [ecx+18],xmm0,给ecx+18这个地址写一个数据。我想要的结果是把这个ecx+18地址里的数据每次都写为100000000(10进制1亿),可是我改为movsd [ecx+18],05f5e100就报错。05f5e100就是1亿的16进制形式。
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-12-26
  • 打赏
  • 举报
回复
双浮点数是什么意思?是双精度浮点数吗?双精度浮点数需要占8字节,可以分两条指令还写:
mov DWORD PTR [ecx+18], 0
mov DWORD PTR [ecx+1C], 4197d784H
rym1020 2009-12-26
  • 打赏
  • 举报
回复
感谢!揭贴了
Jekhn 2009-12-26
  • 打赏
  • 举报
回复
学习!
rym1020 2009-12-26
  • 打赏
  • 举报
回复
非常感谢,试了果然刚好是1亿了。我还有一点点小疑问,为什么是写4197d784呢?我用计算器转换1亿的16进制是05f5e100啊。麻烦楼上的高手再解答最后这个问题,明天来结贴,不好意思
xglkjmn 2009-12-26
  • 打赏
  • 举报
回复
强人啊
cnzdgs 2009-12-26
  • 打赏
  • 举报
回复
浮点数和整数的表示方法是不同的,整数是直接用二进制数表示,浮点数分为三个部分,分别表示符号、阶数和精度,感兴趣可以搜索一下浮点数的表示方法。
maimang09 2009-12-25
  • 打赏
  • 举报
回复
如何写入双浮点数?帮顶
rym1020 2009-12-25
  • 打赏
  • 举报
回复
写进去了,但是ecx+18这个地址内的数据应该是双浮点数的,请问如何写入双浮点数的1亿呢?
我用mov DWORD PTR [ecx+18],05f5e100写进去了,用4字节类型查看是1亿,可是用双浮点数看就是10的-300多次方去了。
cnzdgs 2009-12-25
  • 打赏
  • 举报
回复
mov DWORD PTR [ecx+18],05f5e100H

21,458

社区成员

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

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