【问题标题】:Express floating point constant from EQU symbolic name用 EQU 符号名表示浮点常数
【发布时间】:2018-01-26 11:23:32
【问题描述】:

我在 DS-5 5.28 中使用 ARM 程序集编程,目标是使用浮点和 Neon 的 cortex-a8。

当用 EQU 表示常量时,比如

M EQU 5

然后我可以在程序的其余部分使用该常量,特别是在数据内存中分配常量时,例如:

mydata  DCD  M

现在,如果我想将浮点常量分配为 32 位二进制,我可以这样做:

myfloat  DCFS  5

或无所谓:

myfloat  DCFS  5.0

但以下给出语法错误:

myfloat  DCFS  M

我尝试了各种技巧,例如 DCFS (M+0.0)M EQU 5.0,但汇编程序不接受任何东西,而且我找不到强制转换常量的指令,甚至找不到看起来合适的 Arm 论坛。我也不想在代码中多次硬编码常量(可能会改变)。

编辑 1

我尝试过使用宏,同样的错误(A1194E:错误的浮点数):

    MACRO
$label  FP_CONSTANT  $value
$label  DCFS    $value
    MEND

; use:
myfloat  FP_CONSTANT  M

我想通过反汇编结果来检查我写的是否正确,但是编译失败所以没有要反汇编的对象。

【问题讨论】:

  • 是的,我明白了。这不是我所说的“使用宏”的意思,但似乎汇编器不支持我正在考虑的那种宏。
  • 如果你的意思是类似 C 的宏,那是我真正想要的,但我没有找到任何东西 see here for example
  • 对于 GNU GAS,我建议对宏使用 C 预处理器,因为 GAS 预处理太弱了。相关:stackoverflow.com/questions/6514537/….equ asdf, #1.5 拒绝使用该语法和我在 AS 2.31 上尝试过的任何变体。

标签: assembly syntax floating-point arm ds-5


【解决方案1】:

EQU 指令定义了一个符号来获取一个特定的值。符号值是地址,它们又是整数。你不能给符号一个浮点数作为值。

作为替代方法,请阅读您的汇编器手册。大多数汇编程序都有定义的能力,这应该允许您通过将浮点常量定义为宏来为其赋予符号名称。

【讨论】:

  • 我已经深入阅读了手册,我认为我不应该得到“RTFM”的回复。我没有想到宏,我会检查但我有点怀疑,因为问题似乎你不能从整数定义浮点常量。需要像 C 的 #define 这样的东西,更像是低级文本替换。
  • @m.alessandrini 宏本质上是低级文本替换。我向您推荐了手册,因为我不熟悉您的汇编程序,所以如果您自己查找如何使用宏然后让我猜一下语法可能会更容易。
  • 好的,谢谢,误会了。不幸的是,我尝试过使用宏(无论如何都是有用的知识),但在宏扩展后会引发同样的错误:错误的浮点数
  • @m.alessandrini 您能否将带有宏的代码添加到您的问题中,以便我可以理解您到底写了什么?
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 2013-12-14
  • 2011-04-26
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多