Muz*_*ain 4 c arm inline-assembly keil
我想访问在内联手臂汇编中用C声明的局部变量。我怎么做?
可以这样访问全局变量,
int temp = 0;
Function(){
__asm(
".global temp\n\t"
"LDR R2, =temp\n\t"
"LDR R2, [R2, #0]\n\t"
);
}
Run Code Online (Sandbox Code Playgroud)
但是,如何访问局部变量?我尝试将局部变量的“ .global”更改为“ .local”,但是会产生错误(未定义对“ temp”的引用)。我正在使用的IDE是KEIL。
有什么想法吗?提前致谢。
根据GCC文档:6.45.2.3输出操作数
您可以像这样传递值:
#include <stdio.h>
int main(int argc, char *argv[]) {
int src = 1;
int dst;
asm ("mov %1, %0\n\t add $1, %0" : "=r" (dst) : "r" (src));
printf("0x%X\n", dst);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在您的asm代码之后,您':'可以像这样放置要传递的字符和值:"(=|+)(r|m)" (variable)。使用'='重写值,当'+'读取或重写值时,再使用'r',如果值位于信在寄存器或'm'如果它驻留在内存中。