gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:11:58 25 4
gpt4 key购买 nike

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

这是我的代码:我缺少什么?

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)
);
}

最佳答案

您实际上所做的是从输出指针加载值,然后使用移位结果作为存储它的地址。请注意,您还需要告诉编译器您使用的寄存器比它所知道的寄存器多,并且正在更改内存中的值,否则最终会出现微妙的错误。相当于我认为你正在尝试做的事情是这样的 -

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"
);
}

关于gcc - NDK中的arm内联汇编,如何处理指针和指向的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21053158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com