Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 将IEEE浮点十六进制转换为十进制?_Assembly_Floating Point_Ieee 754 - Fatal编程技术网

Assembly 将IEEE浮点十六进制转换为十进制?

Assembly 将IEEE浮点十六进制转换为十进制?,assembly,floating-point,ieee-754,Assembly,Floating Point,Ieee 754,如果我有一个IEEE浮点十六进制42F6E979,如何将其转换为十进制?我相信十进制表示法是=123.456001请查看或调用您的环境中可能已经存在的库例程。这是一个经常被重新发明的轮子当你测试自己的代码时,你可以用它来检查你的答案。仅供参考,你是正确的,小数点是123.45 Wikipedia也有一个。大多数汇编语言并没有很强地强制执行类型,所以您可以使用该值初始化一个位置,然后将其作为浮点处理/使用。最简单的转换方法通常是: .data myfloat dd 042F6E979H myde

如果我有一个IEEE浮点十六进制42F6E979,如何将其转换为十进制?我相信十进制表示法是=123.456001

请查看或调用您的环境中可能已经存在的库例程。这是一个经常被重新发明的轮子

当你测试自己的代码时,你可以用它来检查你的答案。仅供参考,你是正确的,小数点是123.45

Wikipedia也有一个。大多数汇编语言并没有很强地强制执行类型,所以您可以使用该值初始化一个位置,然后将其作为浮点处理/使用。最简单的转换方法通常是:

.data

myfloat dd 042F6E979H
mydec   db 10 dup(?)

.code

mov ebx, offset mydec    
fld myfloat
fbstp [ebx]

这实际上会产生二进制编码的十进制数,所以您必须将每个字节分成两位数进行显示。当然,这是针对x86的——大多数其他体系结构使这项工作变得有点困难。例如,在PowerPC上,您有
fctiw
,它只转换为整数(与x86
first
的一般顺序相同)。要使用它,您通常需要乘以10的某个倍数以获得所需的小数位数,然后转换为整数,并将小数点放在结果的正确位置。当/如果1)您接近浮点数的范围限制,或者2)您需要比单个整数更高的精度时,它可能会变得有点难看。

我将用C语言来完成这项工作,因为您没有提供语言

char hex[];
int *ptr;
for(int i = 0; i < 8; ++i)
{
   &ptr += toNumber(hex[i]) << (i * 4);
}

float *value = (float*)ptr;
char十六进制[];
int*ptr;
对于(int i=0;i<8;++i)
{

&ptr+=toNumber(hex[i])什么汇编语言和体系结构?你指的是ascii吗?如何将二进制浮点转换为人类可读的ascii?究竟
&ptr+=…
应该做什么?运算符的地址不给你一个左值。你指的是
*(ptr++)之类的东西吗=某物
?如何初始化ptr