【发布时间】:2014-06-12 12:21:37
【问题描述】:
我正在研究 ARM 指令架构,并且我读过指令是按字对齐存储的,因此指令地址的最低有效两位在 ARM 状态下始终为零。
Thumb 和 Thumb-2 指令的长度为 16 位或 32 位。指令以半字对齐的方式存储,因此在 Thumb 状态下指令地址的最低有效位始终为零。
在我对 AVR 等不同微控制器的一些研究中,在访问程序存储器时,我使用最低有效位来区分要访问的高字节或低字节。但那是关于数据内存访问的。
在 ARM 中,指令无论如何都是 32 位的,因此应该一次获取所有字节。
那么,最后两位用于获取指令的特定字节(Thumb 模式下为 1 位)并使用存储区。
PS:如果我要获取 4 字节长指令的单个字节,则需要 4 个周期,这是非常低效的,那么具有字节寻址能力的目的是什么,是因为新的 THUMB 类型指令是16 位宽但仍占用 32 位空间?
【问题讨论】:
-
不清楚您要澄清什么;您的前两段是您问题的答案!
-
为什么他们会在 ARM 或 THUMB 模式下使用银行来访问 32/16 位指令的单个字节。一条指令应该作为一个完整的单词来获取对吗?
-
如果我要获取 4 字节长指令的单个字节,则需要 4 个周期,这是非常低效的,那么具有字节寻址能力的目的是什么,是因为新的 THUMB输入 16 位宽但仍占用 32 位空间的指令?
-
Thumb 指令不占用 32 位空间 - 这就是使用它们的全部意义所在。一般而言,代码空间是字节可寻址的,而不是半字可寻址的,以与数据空间保持一致——一些嵌入式或配备缓存的 ARM 设计可以使用半哈佛架构构建以提高效率,但不需要特殊的数据指令访问代码存储器。请注意,通常都禁止未对齐的单词访问。
-
具有字节可寻址性的目的是因为除了获取指令之外还有对内存的访问,而字节级可寻址性对于这些场景通常很有用。请注意,有些体系结构对于 8 位字节以外的事物是字可寻址的,但它们不像 8 位可寻址机器那样常见(一方面,如果我没记错的话,POSIX 需要 8 位可寻址性)。此外,还有一些 ARM 架构(例如 Cortex M3)具有有限的位级寻址能力。
标签: arm embedded memory-alignment instructions