gpt4 book ai didi

c - 如何在 arm 内联汇编中访问本地 C 变量?

转载 作者:太空狗 更新时间:2023-10-29 15:25:36 26 4
gpt4 key购买 nike

我想在内联 arm 程序集中访问在 C 中声明的局部变量。我该怎么做?

全局变量可以这样访问,

int temp = 0;
Function(){
__asm(
".global temp\n\t"
"LDR R2, =temp\n\t"
"LDR R2, [R2, #0]\n\t"
);
}

但是我如何访问局部变量呢?我尝试将局部变量的“.global”更改为“.local”,但它产生了错误(对“temp”的 undefined reference )。我使用的IDE是KEIL。

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

最佳答案

根据 GCC 文档:6.45.2.3 Output Operands

您可以像这样传递值:

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

在您的 asm 代码之后,您放置 ':' 字符和您想要传递的值,如下所示:"(=|+)(r|m)"(变量)。覆盖值时使用 '=',读取或覆盖值时使用 '+',然后如果值使用 'r' 字母驻留在寄存器中,如果驻留在内存中,则为 'm'

关于c - 如何在 arm 内联汇编中访问本地 C 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47516089/

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