【发布时间】:2016-11-03 22:50:54
【问题描述】:
ARM Cortex-M4F 处理器有一条指令可以将立即数加载到浮点寄存器中,如下所示:
VMOV S0,+6.75
但是,常量的值是有限制的,必须等于可以表示为 +/-m x 2-n 的值,其中 m 是 16-31 范围内的整数n 是 0-7 范围内的整数。例如,上述指令有效,因为您可以在 m=27 和 n=2 时得到 6.75。
我真的很想找到一种算法来确定一个特定的实数是否可以用这种方式表示,如果可以,给出 m 和 n 的对应值。
【问题讨论】:
-
FWIW,我不知道答案,但我可以推断必须存在一种直接的方法,因为这正是汇编器在编码这样一个指令放在首位。为了省点麻烦,here's an assembler - 任何巫术似乎都涉及将数字作为常规 IEEE754 浮点数开始,这意味着您可能必须首先弄清楚它是否可以表示为其中之一.
-
如果你有可用的 C 数学库 frexp 可能是一种开始
标签: assembly floating-point arm cortex-m immediate-operand