为什么ARM处理器上的Thumb模式下PC仍为32位?

时间:2014-09-06 01:26:30

标签: arm

由于Thumb模式可以引用16位通用寄存器(r1-r14),为什么PC(r15)仍然是32位?在此模式下b Label将更新所有32位PC,还是只更低16位?

2 个答案:

答案 0 :(得分:3)

尽管问题是基于一个完全不正确的前提,但 对字面上的标题问题做出了一个厚颜无耻的回答 - 处于Thumb模式意味着你在v4T上或更高版本的架构,这意味着你必须拥有一个完整的32位PC,而不是只有26位的pre-v3架构。

我不确定你认为Thumb在16位寄存器上运行的想法 - 必须使用Thumb指令的限制是它们只能访问"低位寄存器" r0-r7,由于编码空间有限。 ARM中有3种不同的32位正在运行 - 寄存器宽度,地址空间(上面提到的情况总是如此),以及固定宽度的大小指令编码。 Thumb仅更改第三个。这种尺寸减小的一个结果是,大多数Thumb编码每个操作数只有3位来编码寄存器编号 - 只有少数指令可以节省额外的位来编码"高位寄存器" R8-R15。

在操作中,Thumb指令与ARM指令的等效子集没有什么区别 - 毕竟,Thumb只是同一管道前端的替代提取/解码阶段。

答案 1 :(得分:2)

thumbv1指令的大小为16位,但这与寄存器的大小有什么关系? (无)包括r15在内的寄存器一直是32位。具有立即值的分支只是偏移而不是绝对地址。

这些都在ARM体系结构参考手册infocenter.arm.com

中有详细记载