我正在为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