NDK中的arm内联汇编,如何处理指针和指向数据?

时间:2014-01-10 19:47:26

标签: gcc android-ndk arm inline-assembly

我试图在ac指针所指向的地址上进行汇编操作,现在我遇到的问题是我找不到将指针传递给寄存器然后在数据中执行操作的方法将值存储到另一个输出指针。

这是我的代码: 我错过了什么?

void asmfunc(short *pOut, short *pIn) {
    asm volatile(
            "ldr r0, [in];"
            "ldr r1, [out];"
            "mov r2, r0;"
            "lsr r2, [r2], #1;"
            "str r1, [r2];"
            :[out] "=m" (pOut)
            :[in] "m" (pIn)
    );
}

1 个答案:

答案 0 :(得分:6)

您实际在做的是从输出指针加载值,然后使用shift的结果作为存储它的地址。请注意,您还需要告诉编译器您使用的寄存器多于它所知道的寄存器并更改内存中的值,否则最终会出现细微的错误。相当于我想要做的就像这样 -

void asmfunc(short *pOut, short *pIn) {
    asm volatile(
            "ldr r3, %[in]\n"
            "lsr r3, r3, #1\n"
            "str r3, %[out]\n"
            :[out] "=m" (*pOut)
            :[in] "m" (*pIn)
            :"r3", "memory"
    );
}