请教一个关于浮点指令的问题
时间:2011-10-30
来源:互联网
Assembly code
最近正在学浮点指令,这应该是浮点指令里面很简单的一段代码吧,我知道fld应该改为fild才算是把10压入浮点寄存器,但用fld压入浮点寄存器产生的结果让我很疑惑
首先,fpValue的值为10,汇编后用补码表示就是0000000AH,因为我调用的命令是fld,所以系统会把它当成一个浮点型存储进浮点寄存器中,那这个0000000A到底代表哪个浮点数呢?我算了一下,因为是DWORD,所以应该把它当成单精度浮点型,我计算方法如下
第一位是0,代表正数
中间8个0,代表指数为0,
后面23为有效数字为000 0000 0000 0000 0000 1010,也就是二进制的纯小数0.000 0000 0000 0000 0000 1010,其十进制形式为0.0000011920928955078125
这样,该浮点数的十进制表示为(1+0.0000011920928955078125)x2^(0-127)=5.8774787606037591639290373047591e-39
但是我用OllyDbg调试发现,压入浮点寄存器的值为1.401298e-44,很不理解,是我算错了,还是我的计算方法不对呢,请高手指点一下,十分感谢!
include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .data fpValue DWORD 10 start: finit fld fpValue end start
最近正在学浮点指令,这应该是浮点指令里面很简单的一段代码吧,我知道fld应该改为fild才算是把10压入浮点寄存器,但用fld压入浮点寄存器产生的结果让我很疑惑
首先,fpValue的值为10,汇编后用补码表示就是0000000AH,因为我调用的命令是fld,所以系统会把它当成一个浮点型存储进浮点寄存器中,那这个0000000A到底代表哪个浮点数呢?我算了一下,因为是DWORD,所以应该把它当成单精度浮点型,我计算方法如下
第一位是0,代表正数
中间8个0,代表指数为0,
后面23为有效数字为000 0000 0000 0000 0000 1010,也就是二进制的纯小数0.000 0000 0000 0000 0000 1010,其十进制形式为0.0000011920928955078125
这样,该浮点数的十进制表示为(1+0.0000011920928955078125)x2^(0-127)=5.8774787606037591639290373047591e-39
但是我用OllyDbg调试发现,压入浮点寄存器的值为1.401298e-44,很不理解,是我算错了,还是我的计算方法不对呢,请高手指点一下,十分感谢!
作者: MarkZar 发布时间: 2011-10-30
没人回答,谁来回复一下,直接给分
作者: MarkZar 发布时间: 2011-11-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28