我尝试了下面的代码,但未能在http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0472f/Cihfhjhg.html
的以下引用后从r11读取正确的值volatile int top_fp;
__asm
{
mov top_fp, r11
}
r11的值是0x20009DCC top_fp的值是0x00000004
[更新]解决方案,我们必须使用嵌入式汇编程序:
__asm int getRegisterR11()
{
mov r0,r11
BX LR //return, must not omitted!!!
}
答案 0 :(得分:1)
您发布的链接仅指lr(R13),sp(R14),pc(R5),用于旧版本ARM ADS的代码的遗留代码支持,不适用于通用寄存器。
在ARM的编译器中(也用于Keil的MDK-ARM):
内联汇编程序不提供对物理寄存器的直接访问 一个ARM处理器。如果ARM寄存器名称用作操作数 内联汇编程序指令它成为变量的引用 同名,而不是物理ARM寄存器。
(参考:Inline assembler and register access)
ARM编译器中的内联汇编程序需要进行优化,例如它内置的C或C ++代码,因此编译器可能会生成与您在任何情况下编写的代码不同的代码。如果您希望完全按照编写的方式生成汇编代码,则必须使用embedded assembler而不是内联汇编程序