2021-10-24 st 浮点栈寄存器的存储方式

st 浮点栈寄存器的存储方式

问题描述:

我把1转成double压入st(0)中,按道理应该是3FF0000000000000,但x64dbg显示的是3FFF800000000000,我想用windbg看看是不是x64dg显示错误

过程:

我用windbg看了st(0),却发现结果也是3FFF800000000000,看来并不是x64dbg有问题,那么就有可能是st浮点栈寄存器并没有按照IEEE标准编码,随后我将2、3、4都压入st(0),观察值变化终于找到了规律

结果:

st浮点栈寄存器的双精度浮点编码方式是最高位为符号位,指数范围用15位表示,剩下48位表示尾数,但是和IEEE标准不同的是,最高位虽然恒为1,但也要加到尾数部分。

eg: 1 转成 双精度浮点

  1. 将1转成二进制数

    1 = 1.0
    
  2. 因为1是正数,所以符号为0

    指数为零 ,指数位为 32,767+0 = 011111111111111

    尾数部分为100000000000000000000000000000000000000000000000

  3. 转化为十六进制为3FFF800000000000

你可能感兴趣的:(2021-10-24 st 浮点栈寄存器的存储方式)