我尝试了下面的代码,但未能按照下面的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!!!
}
您发布的链接仅指向lr(R13),sp(R14),pc(R5),以获得旧版本代码对ARM ADS的旧版本的代码支持,不适用于通用寄存器。
在ARM的编译器(也用于Keil的MDK-ARM)中:
内联汇编器不提供对ARM处理器的物理寄存器的直接访问。如果将ARM寄存器名称用作嵌入式汇编程序指令中的操作数,则它将成为对同名变量的引用,而不是对物理ARM寄存器的引用。
(参考:内联汇编器和寄存器访问)
ARM编译器中的内联汇编器会像其内联的C或C ++代码一样受到优化,因为这种编译器生成的代码在任何情况下都可能与您编写的代码不同。如果要完全按照编写的方式生成汇编代码,则必须使用嵌入式汇编程序而不是内联汇编程序
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句