如何在手臂内联汇编中访问局部C变量?

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。

有什么想法吗?提前致谢。

Pro*_*OOB 5

根据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'如果它驻留在内存中。