首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

请问一个关于浮点指令的有关问题

2012-02-26 
请教一个关于浮点指令的问题Assembly codeinclude windows.incinclude user32.incincludelib user32.libin

请教一个关于浮点指令的问题

Assembly code
include windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib.datafpValue        DWORD        10start:finitfld fpValueend 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,很不理解,是我算错了,还是我的计算方法不对呢,请高手指点一下,十分感谢!


[解决办法]
网上搜索看了下,这类指数为 0 的属于“非规范化数”,有着特殊的表示和规范。这里,简单地,就是它没有缺省的尾数位,指数增 1。可用参考下面这个链接的 5.4 节。
http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html

热点排行