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

ale*_*exm 3 gcc arm inline-assembly android-ndk

我试图用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)
    );
}
Run Code Online (Sandbox Code Playgroud)

Not*_*hat 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"
    );
}
Run Code Online (Sandbox Code Playgroud)