首页
社区
课程
招聘
[旧帖] 加载double型数据到fpu寄存器的问题 0.00雪花
发表于: 2010-1-23 20:28 4409

[旧帖] 加载double型数据到fpu寄存器的问题 0.00雪花

2010-1-23 20:28
4409
有以下数据
        double x1 =  1.3340161527072821e+003;
        double x2 = -8.2664507980767962e+002;
        double x3 = -2.1784998484594144e+003;
        double x4 = -2.9574861290531987e+002;
问题:
1.用汇编,如何加载到fpu的各个寄存器呢?
2.在网上查资料说double是8字节,但是为何在手动修改od的st(0)时发现od是用了10字节表示的这个数,为什么呢?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
2
查汇编手册
_asm  fld x1

指令格式     指令含义         执行的操作
FLD src    装入实数到st(0)   st(0) <- src (mem32/mem64/mem80) 
 

mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
2010-1-23 21:04
0
雪    币: 2332
活跃值: (3624)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
3
我知道使用fld指令.
第一个问题我已经解决了.
目前第二个问题还是不明白.为什么双击st(0),下面的hex数据和内存中的数据不一样?
2010-1-23 21:32
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
4
也许st(0)本来就是80位的寄存器,就像eax是个32位寄存器一样,试过float x1,结果st0还是10个字节的
看上面指令的解释st(0) <- src (mem32/mem64/mem80),就是操作数最大也只能是80位的,用fld 指令时会将原数据自动转换成80位的实数,所以HEX数据不同
2010-1-23 22:08
0
雪    币: 56
活跃值: (276)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习学习
2010-1-23 22:33
0
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
6
刚才查了下资料如下
FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。
     使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶,
     当一个值被压入时,被存入st0,原来st0中的值被存入st1
刚才测试了下,每执行一次fld指令,会依次将数据由st0向st7传递,如上面将x1,x2,x3,x4分别放进st0,st1,st2,st3可写为
_asm {
  fld x4
  fld x3
  fld x2
  fld x1
}
haha,又学了一点
2010-1-23 23:13
0
游客
登录 | 注册 方可回帖
返回
//