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