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

为什么PC在ARM处理器上仍然是32位的Thumb模式?,arm,Arm,由于拇指模式可以引用16位的通用寄存器(r1-r14),为什么PC(r15)仍然是32位的?在此模式下,b Label会更新PC的所有32位,还是只更新较低的16位?thumbv1指令的大小为16位,但这与寄存器的大小有什么关系?(无)包括r15在内的寄存器始终为32位。具有立即值的分支只是偏移量,而不是绝对地址 ARM体系结构参考手册infocenter.ARM.comthumbv1指令的大小为16位,但这与寄存器的大小有什么关系?(无)包括r15在内的寄存器始终为32位。具有立即值的分支只是

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

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


ARM体系结构参考手册infocenter.ARM.com

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


这些都清楚地记录在ARM架构参考手册infocenter.ARM.com中

,尽管这个问题基于一个完全不正确的前提,对于标题问题,有一种厚颜无耻的回答,从字面上看——处于拇指模式意味着你使用的是v4T或更高版本的体系结构,这意味着你必须拥有完整的32位PC,而不是v3之前的体系结构,当时只有26位

我不确定你是从哪里得到Thumb操作寄存器16位的想法的-必须Thumb指令的限制是,由于编码空间有限,它们只能访问“低寄存器”r0-r7。ARM中有3种不同的“32位”在起作用——寄存器宽度、地址空间(并非如上文所述总是如此)和固定宽度指令编码的大小。拇指只会改变第三个。这种大小减少的一个结果是,大多数Thumb编码每个操作数只有3位用于编码寄存器编号-只有少数指令可以腾出额外的位来编码“高位寄存器”r8-r15


在操作中,Thumb指令与ARM指令的等效子集没有什么不同——毕竟,Thumb只是同一管道前端的一个可选获取/解码阶段。

尽管问题的前提完全不正确,对于标题问题,有一种厚颜无耻的回答,从字面上看——处于拇指模式意味着你使用的是v4T或更高版本的体系结构,这意味着你必须拥有完整的32位PC,而不是v3之前的体系结构,当时只有26位

我不确定你是从哪里得到Thumb操作寄存器16位的想法的-必须Thumb指令的限制是,由于编码空间有限,它们只能访问“低寄存器”r0-r7。ARM中有3种不同的“32位”在起作用——寄存器宽度、地址空间(并非如上文所述总是如此)和固定宽度指令编码的大小。拇指只会改变第三个。这种大小减少的一个结果是,大多数Thumb编码每个操作数只有3位用于编码寄存器编号-只有少数指令可以腾出额外的位来编码“高位寄存器”r8-r15


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

但在thumbv1中,指令只能在16位寄存器上操作,对吗?当然不是,对于armv4和可能的armv5,我不知道确切的位,很明显,它们只是转换为32位arm指令,并通过管道传输。然而,一件事与另一件事无关。就像8位x86指令不仅在64位寄存器的8位上运行一样,它取决于指令的操作方式。当arm文档谈到寄存器时,没有隔离一个位范围,那么整个32位寄存器就是正在使用的。如果您阅读具有统一语法的较新手册,则统一语法的概念意味着thumb、thumb2扩展或arm 32位指令执行相同的操作。64位arm是完全不同且不兼容的,顺便说一句,仅谈论32位armv4到V7,但在thumbv1中,指令只能在16位寄存器上操作,对吗?当然不能,对于armv4和可能的armv5,我不知道确切的位,很明显,它们只是转换为32位arm指令,并通过管道传输。然而,一件事与另一件事无关。就像8位x86指令不仅在64位寄存器的8位上运行一样,它取决于指令的操作方式。当arm文档谈到寄存器时,没有隔离一个位范围,那么整个32位寄存器就是正在使用的。如果您阅读具有统一语法的较新手册,则统一语法的概念意味着thumb、thumb2扩展或arm 32位指令执行相同的操作。64位arm是完全不同的,而且不兼容。顺便说一下,32位armv4到V7 thumb(版本1)的指令长度是16位。寻址功能不可用。它们是32位的。例如,一条字节指令(早期的CISC/x86)不支持256字节的内存,但支持几个64k内存组。您正在使机器/汇编程序指令大小等于寻址(指针)大小。他们根本没有关系。对于32位ARM,它们是相同的。顺便说一句,r1-r14的大小也是32位,即使在拇指模式下也是如此。在thumb 2中,指令大小是16位和32位的混合。thumb(版本1)的指令长度是16位。寻址功能不可用。它们是32位的。例如,一条字节指令(早期的CISC/x86)不支持256字节的内存,但支持几个64k内存组。您正在使机器/汇编程序指令大小等于寻址(指针)大小。他们根本没有关系。这是一种共发病,32bi的情况相同