0

我在 c 文件(const int data_input[1024];)中定义了一些简单的静态数组,我需要从我的汇编代码中访问它。正确的方法是什么?

到目前为止,我一直在这样做:

.global data_input

data_input_ptr:
    .word 数据输入

我的功能:
    adr r1,data_input_ptr
    bx lr

AFAIK,adr 是 ldr r1、=data_input_ptr 或类似的伪操作。

对我来说,我这样做的方式似乎不是很正确:首先,如果在链接时检测到可能的情况,adr r1, data_input 可能会直接使用 pc 相对寻址。另一个问题是关于 PIC:如果代码必须与位置无关怎么办。如果 data_input_ptr 的值必须由加载器初始化,它是如何工作的(我对此是否正确?)

4

1 回答 1

0

你这样做的方式应该可行,但另一种处理方式是使用数组的地址作为汇编函数的第二个参数。像这样的东西:

Call from c-file:
my_function(original_argument, data_input);

my_function.h:
void my_function(void *original_argument, int *array_address);

my_function.S:
my_function:
    /* r1 already contains data_input_ptr since second argument ends up in r1 */
    bx lr
于 2011-12-07T10:04:52.547 回答