如何使用 ARM 汇编语言访问局部变量?



我使用以下汇编代码进入 ARM Cortex-M4 中的关键部分。 问题是,如何访问局部变量 primeMask?

volatile uint8_t primaskValue;                                   
asm(                               
"MRS R0, PRIMASK       n"     
"CPSID i               n"     
"STRB R0,%[output]     n"
:[output] "=r" (primaskValue)
); 

asm 代码中的%[output]字符串被替换为用于保存约束[output] "=r" (primaskValue)指定的值的寄存器,该寄存器将成为之后用作 primaskValue 值的寄存器。 因此,在asm代码块中,该寄存器是primaskValue的位置。

如果您改用约束字符串"+r",那将是输入和输出(因此寄存器将使用 primaskValue 的先前值进行初始化,并用作输出值)

由于primaskValue已被声明为volatile因此这没有多大意义 - 根本不清楚volatile对局部变量意味着什么(如果有的话)。

最新更新