问题
我想在Linux Android设备上使用内联汇编执行ARM中的exit系统调用,并且希望从内存中的位置读取退出值。
示例
如果不提供这个额外的参数,调用的宏看起来像:
#define ASM_EXIT() __asm__("mov %r0, #1\n\t" \
"mov %r7, #1\n\t" \
"swi #0")
这个很好用。 要接受参数,我会进行调整:
#define ASM_EXIT(var) __asm__("mov %r0, %0\n\t" \
"mov %r7, #1\n\t" \
"swi #0" \
: \
: "r"(var))
我称之为,并通过以下方式调用:
#define GET_STATUS() (*(int*)(some_address)) //gets an integer from an address
ASM_EXIT(GET_STATUS());
错误
无效的“asm”:操作数超出范围
我无法解释为什么会出现这个错误,因为在上面的片段中我只使用了一个输入变量(%0/var)。而且,我已经尝试使用常规变量,但仍然出现了相同的错误。
GET_STATUS
确实有//
吗?还是你添加了它来澄清问题?如果将其删除会发生什么?另外,尝试使用ASM_EXIT(1)
怎么样?最后,使用-E
编译可能会很有用。 - David Wohlferd