[英]How to access r11 register of ARM Cortex M3 with inline assembler of C
我嘗試了下面的代碼,但未能在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 ++代碼一樣受到優化,因為這種編譯器在任何情況下都可能生成與您編寫的代碼不同的代碼。 如果要完全按照編寫的方式生成匯編代碼,則必須使用嵌入式匯編程序而不是內聯匯編程序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.