在汇编中以二进制形式显示浮点寄存器值

时间:2017-05-20 21:21:19

标签: assembly floating-point

所以我必须制作一个汇编函数来改变处理器对数字进行舍入的方式。我有那个。现在我需要证明一下。所以我需要将1个值写入屏幕,然后更改舍入方法,然后写入相同的值并检查它是否在最不重要的螳螂位上发生了变化。那我怎么能用IEEE 754格式写一个3.14值,如下所示:

0 10000000 10010001111010111000011

我的意思是函数可以printf它或它可以返回它,所以我可以从C调用该函数。

2 个答案:

答案 0 :(得分:1)

没有办法用printf输出二进制文件。如果你需要这样做,你必须编写自己的功能。这已经在SO上涵盖,例如here

如果你想分解浮点数的组件(IEEE 754单精度),那么你可以使用这样的联合:

union float_bits
{
   float f;
   struct bits
   {
      unsigned int s:1;
      unsigned int m:23;
      unsigned int e:8;
   } b;
};

然后你将你的浮点数装入f并从b.s / b.m / b.e读取符号/尾数/指数。

答案 1 :(得分:0)

您可以使用FST指令将FPU注册表的值复制到内存中,使用MOV指令将其加载到CPU寄存器(C本地变量)中(假设您使用的是x86架构)

请记住,FPU寄存器有80位