我正在爲Raspberry Pi編寫一些裸機代碼,並且在Windows上收到來自ARM交叉彙編程序的意外警告。導致警告的指示是:GNU ARM彙編程序出現意外警告
stmdb sp!,{r0-r14}^
和
ldmia sp!,{r0-r14}^
的警告是:
警告:基址寄存器寫回是不可預知的
我可排序的理解這一點,儘管'^'修飾符告訴處理器存儲th e用戶模式寄存器的副本,它不知道當指令執行時處理器將處於什麼模式,並且似乎沒有辦法告訴它。我有點更關注以獲取同樣的警告:
stmdb sp!,{r0-r9,sl,fp,ip,lr}^
和:
ldmia sp!,{r0-r9,sl,fp,ip,lr}^
儘管我沒有明確存儲任何 SP寄存器。
我的問題是,雖然我大約15年前曾經做過很多彙編代碼,但ARM代碼對我來說是新的,我可能會誤解某些東西!另外,如果我可以安全地忽略這些警告,是否有辦法壓制它們?
啊,我錯過了架構參考手冊中的那一點,但我必須承認,我一直在使用ARM1176JZF-S技術參考手冊來獲取大部分信息,但似乎並沒有詳細討論這個問題!我發現使用Google的警告(不是很多!)的所有解釋都表示,警告是由於您正在對正在加載/存儲的寄存器進行回寫造成的。我知道回寫是指更新基址寄存器。 – williamssimonp 2013-03-13 09:04:21