如何在ARM汇编代码中使用LONG_MIN和LONG_MAX等外部定义?
假设我的_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>,我必须在mymylimits.h中添加它,这似乎有点笨拙,但我想,那还好 :)
有什么建议吗?
我可以使用ARM系统开发人员指南设计和优化系统软件[2004]和ARM架构参考手册[2000],我的目标是XScale-IXP42x Family rev 2 (v5l)。