arm - GNU ARM 汇编器上的意外警告

标签 arm raspberry-pi gnu-arm

我正在为 Raspberry Pi 编写一些裸机代码,并且从 Windows 上的 ARM 交叉汇编器收到意外警告。引起警告的指令是:

stmdb sp!,{r0-r14}^

ldmia sp!,{r0-r14}^

警告是:

Warning: writeback of base register is UNPREDICTABLE

我可以理解这一点,因为虽然'^'修饰符告诉处理器存储寄存器的用户模式副本,但它不知道执行指令时处理器将处于什么模式,并且没有'这似乎是一种讲述它的方式。我更担心收到同样的警告:

stmdb sp!,{r0-r9,sl,fp,ip,lr}^

和:

ldmia sp!,{r0-r9,sl,fp,ip,lr}^

尽管事实上我明确不存储任何 sp 寄存器。

我担心的是,虽然大约 15 年前我曾经做过很多汇编程序编码,但 ARM 代码对我来说是新的,我可能会误解一些东西!另外,如果我可以安全地忽略这些警告,有什么方法可以抑制它们吗?

最佳答案

ARM架构引用手册说用户寄存器的LDM/SMT不允许写回。在异常返回的情况下是允许的,其中pc在寄存器列表中。

LDM(异常返回)

LDM{<amode>}<c> <Rn>{!},<registers_with_pc>^

LDM(用户寄存器)

LDM{<amode>}<c> <Rn>,<registers_without_pc>^

关于arm - GNU ARM 汇编器上的意外警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373952/

相关文章:

使用指针将数据从一个地址复制到另一个地址

android - 使用ARMCC编译Android原生库

linux - ALT_SMP 和 ALT_UP 有什么作用?

windows - 在 Windows 中查找 USB 以太网链路本地 IP 地址

c - 了解程序中变量的多重声明和 GCC 编译器行为

eclipse - 是否可以有多个到 gdbserver 的连接?

linux - 使用 GCC 编译 C 失败

c++ - Qt OpenCV 应用程序无法在 Raspberry Pi 显示屏上运行

raspberry-pi - Electron - Linux - 黑屏

c++ - 声明抽象类(纯虚方法)大幅增加二进制大小