assembly - 从 EQU 符号名表示浮点常数

标签 assembly syntax floating-point arm ds-5

我正在 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:错误的 float ):

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

; use:
myfloat  FP_CONSTANT  M

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

最佳答案

EQU 指令定义一个符号来获取特定值。符号值是地址,而地址又是整数。您不能为符号提供 float 作为值。

作为替代方案,请阅读汇编器的手册。大多数汇编器都能够定义宏,这应该允许您通过将浮点常量定义为宏来为浮点常量提供符号名称。

关于assembly - 从 EQU 符号名表示浮点常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460385/

相关文章:

汇编语言: Sorting with signed (negative) numbers and positive in ascending order.

objective-c - 在 switch 语句中使用 Obj-C 对象时出现奇怪的编译器错误

python - Django - 'for' 语句应该至少有四个字 : for choice question_set. all

c# - 为什么 (float)1.11111111 = 1.11111116 在 C# 中?

python - 将来自 stdin 的整数放入列表中

c - 除以零 - C 编程

c - 分析 "technique"用于交换 2 个变量而没有第三个临时变量

assembly - 我怎么知道这是做什么的?

assembly - NASM的resb以二进制输出格式做什么?

php - PHP 关键字是否区分大小写?