如何在 ARM 汇编代码中使用外部定义,例如 LONG_MIN 和 LONG_MAX?
假设 my_arm.h 看起来像这样:
int my_arm(int foo);
假设我有一个 my_main.c 如下:
...
#include <limits.h>
#include "my_arm.h"
...
int main (int argc, char *argv[])
{
int foo=0;
...
printf("My arm assembler function returns (%d)\n", my_arm(foo));
...
}
my_arm.s 看起来像这样:
.text
.align 2
.global my_arm
.type my_arm, %function
my_arm:
...
ADDS r1, r1, r2
BVS overflow
...
overflow:
LDR r0, LONG_MAX @ this is probably wrong, how to do it correctly?
BX lr @ return with max value
倒数第二行,我不确定如何正确加载,我隐约记得在某处读过,我必须在 .global 中定义 LONG_MAX,但再也找不到工作示例的链接。
我正在使用 arm-linux-gnueabi-gcc 4.3.2 版进行编译
===================
更新:欣赏建议!不幸的是,我仍然遇到语法问题。
首先,我制作了一个小头文件 mylimits.h(现在与 .S 在同一目录中)
#define MY_LONG_MIN 0x80000000
在 my_arm.S 我添加了以下内容:
...
.include "mylimits.h"
...
ldr r7, =MY_LONG_MIN @ when it was working it was ldr r7, =0x80000000
...
这种方法有两个问题。
首先最大的问题:符号 MY_LONG_MIN 无法识别......所以还是有问题
第二:.include 的语法不允许我包含<limits.h>
,我必须在 mylimits.h 中添加它,看起来有点笨拙,但我想,没关系 :)
任何指针?
我可以访问 ARM System Developer's Guide Designing and Optimizing System Software[2004] 和 ARM Architecture Reference Manual[2000],但我的目标是 XScale-IXP42x Family rev 2 (v5l)。