我在使用某些内联汇编代码时遇到了问题。我试图从本地静态数组中将项目加载到ARM平台上的寄存器中。不幸的是,我不知道如何告诉GCC它应该传递数组上的指针来注册。该寄存器将用于间接访问数组。在gcc内联汇编程序(ARM)中使用数组
// should return argv[1]
int test() {
int argv[4] = {4, 3, 2, 1};
int out;
__asm__ volatile (
"ldr r0, %[ARGV]" "\n\t"
"mov r1, #4" "\n\t"
"ldr r2, [r0, r1]" "\n\t"
"mov %[OUT], r2"
: [OUT] "=r" (out)
: [ARGV] "m" (argv) // <==== i don't know which constraint put here :/
: "r0", "r1", "r2"
);
return out;
}
现在GCC抛出错误,我不知道如何解决它:
Assembler messages:
Error: invalid offset, value too big (0xFFFFFFFC)
THX
编辑:我已经与Android NDK(ARM-Linux的androideabi-编译它G ++)
这个组装,链接和运行良好使用铿锵。不知道发生了什么事。你确定它在这个代码中,它是错误的? – mattjgalloway 2012-03-16 10:21:06
我忘了告诉我用Android NDK编译它(arm-linux-androideabi-g ++) – zdenek 2012-03-16 10:28:34
如果你将'argv'的约束设置为'“rm”',它是否适合你? – mattjgalloway 2012-03-16 10:35:00