加载中…
个人资料
elecs
elecs
  • 博客等级:
  • 博客积分:0
  • 博客访问:52,536
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

ST0~ST7寄存器的含义

(2017-04-14 11:34:56)
标签:

st0st7寄存器

od

分类: 信息安全
在逆向分析二进制程序时,经常看到ST0~ST7寄存器,它们表示的是什么呢?在相关书籍里很少提到。下面我们对它们做一简单介绍。

在包含浮点运算(FPU)的处理器有8个寄存器,分别为ST0~ST7,它们有80bit宽。这些寄存器用来存储32位或64位的浮点数。下面以一个例子来说明
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
       float num = 123.88;
       __asm {
              fld [num]
              fsqrt
              fst [num]
       };
       printf("Number: %f\n", num);
       getchar();
       return 0;
}

上述程序将123.88赋值给变量num__asm块计算num的平方根。fld指令将num变量存至寄存器ST0fsqrt指令计算ST0的平方根并将结果存回ST0寄存器。fst指令将ST0寄存器的值存到变量num__asm块后,打印存储在num中的浮点数,即123.88的平方根。编译运行后如下图所示:

ST0~ST7寄存器的含义


下面用OD来观察程序的运行过程。在4113CE处下断点,执行完fld指令后,ST0寄存器的值设置为123.88,如下图所示。

ST0~ST7寄存器的含义

执行完fsqrt指令后,ST0寄存器的内容变成了123.88的平方根11.130139138996330670,如下图所示。
ST0~ST7寄存器的含义

总的来说, ST0~ST7寄存器是用来存放浮点数的。


0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有