由于Thumb模式可以引用16位通用寄存器(r1-r14),为什么PC(r15)仍然是32位?在此模式下b Label
将更新所有32位PC,还是只更低16位?
答案 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
中有详细记载