首页
论坛
课程
招聘
《C++反汇编》关于浮点寄存器所占字节数
2014-7-17 17:09 13327

《C++反汇编》关于浮点寄存器所占字节数

2014-7-17 17:09
13327
P23页倒数第五行原文:“每个浮点寄存器占8个字节

今天翻阅《Intel开发者手册》的时候,看到上面有一句话:The x87 FPU data registers (shown in Figure 8-1) consist of eight 80-bit registers. 也就是占80个bit,即10个字节

这里书中是否有误?还是我理解错了?还请赐教

2021 KCTF 秋季赛 防守篇-征题倒计时(11月14日截止)!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 9525
活跃值: 活跃值 (1144)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
bxc 活跃值 6 2014-7-17 18:05
2
0
我记得有
single float,单精度浮点 4字节
double float,双精度浮点 8字节
long double float,长双精度
long double有时候是10字节,80位的。

x86中浮点寄存器好像也是80位的。

80x87支持三种浮点数据类型:单精度、双精度和扩展精度;它们的长度依次为32、64和80位,即4、8和10个字节;它们遵循美国IEEE(电子电气工程师协会)定义的国际标准浮点格式。

· 单精度浮点数(32位短实数)——由1位符号、8位指数、23位有效数组成。

· 双精度浮点数(64位长实数)——由1位符号、11位指数、52位有效数组成。

· 扩展精度浮点数(80位临时实数)——由1位符号、15位指数、64位有效数组成。很多计算机中并没有80位扩展精度这种数据类型,80x87 FPU主要在内部使用它存贮中间结果,以保证最终数值的精度。



另外:
FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。
使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶,
当一个值被压入时,被存入st0,原来st0中的值被存入st7
MMX: 将8个FPU寄存器重命名为8个64位MMX寄存器,即mm0到mm7。[号称多媒体处理技术]
57条MMX指令,加快了整形浮点运算,但是对于复杂浮点运算无帮助

不知道64位的是不是MMX寄存器。
雪    币: 462
活跃值: 活跃值 (634)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
gtict 活跃值 2014-7-17 20:22
3
0
64位浮点数肯定用mmx寄存器,自己调试下就知道。具体占多少位没算过
雪    币: 573
活跃值: 活跃值 (433)
能力值: ( LV10,RANK:168 )
在线值:
发帖
回帖
粉丝
kaoyange 活跃值 1 2014-7-17 23:15
4
0
非常感谢,我又看了下《Intel开发者手册》中的MMX部分,好像MMX寄存器也是针对处理整形数据的吧?
雪    币: 9525
活跃值: 活跃值 (1144)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
bxc 活跃值 6 2014-7-17 23:26
5
0
这个不清楚了。x86架构我只熟悉通用寄存器
游客
登录 | 注册 方可回帖
返回