Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在程序集中以二进制显示浮点寄存器值_Assembly_Floating Point - Fatal编程技术网

Assembly 在程序集中以二进制显示浮点寄存器值

Assembly 在程序集中以二进制显示浮点寄存器值,assembly,floating-point,Assembly,Floating Point,所以我必须做一个汇编函数,它会改变处理器对数字进行四舍五入的方式。我有那个。现在我需要证明这一点。所以我需要将1个值写入屏幕,然后更改舍入方法,然后写入相同的值,并检查它在最低有效螳螂位上是否更改。那么,I f.e如何以IEEE 754格式写入3.14值,如下所示: union float_bits { float f; struct bits { unsigned int s:1; unsigned int m:23; unsigned i

所以我必须做一个汇编函数,它会改变处理器对数字进行四舍五入的方式。我有那个。现在我需要证明这一点。所以我需要将1个值写入屏幕,然后更改舍入方法,然后写入相同的值,并检查它在最低有效螳螂位上是否更改。那么,I f.e如何以IEEE 754格式写入3.14值,如下所示:

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


我的意思是该函数可以打印出来,也可以返回,所以我可以从C调用该函数。

您可以使用FST指令将FPU注册表的值复制到内存中,并使用MOV指令将其加载到CPU寄存器C局部变量(假设您在x86体系结构下)


请记住,FPU寄存器有80位

无法使用printf输出二进制文件。如果需要这样做,就必须编写自己的函数。这一点已在SO中涵盖,例如

如果要分解浮点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.读取符号/尾数/指数。

是否要在汇编中写入该函数?还是用C?您为什么体系结构和操作系统编程?在汇编中。我使用的是64位Manjaro,但我希望它是32位程序,因此我使用-m32编译