gpt4 book ai didi

arm - 如何判断一个字(4字节)是16位指令还是32位指令?

转载 作者:行者123 更新时间:2023-12-01 10:42:38 24 4
gpt4 key购买 nike

我如何知道字中的字节代表的是 16 位指令还是 32 位指令?
我引用了 ARM ARMv7M,我不清楚如何区分它是 16 位指令还是 32 位指令。
它说
If bits [15:11] of the halfword being decoded take any of the following values, the halfword is the first halfword of a 32-bit instruction:<br/>
• 0b11101
• 0b11110
• 0b11111.
Otherwise, the halfword is a 16-bit instruction

这是否意味着处理器总是获取半字,检查它们并决定它是 16 位还是 32 位?
第一个半字是什么意思? Bit[31-16] or Bit[15-0] in a word ?

如果我有 32 位,那么我能知道它是 32 位指令还是 16 位指令吗?

谢谢。

最佳答案

在 Thumb 中,“32 位”指令仍然由两个独立的半字组成,因此“第一个半字”是编码的第一个半字,它与内存中的布局无关。 Thumb 指令是半字对齐的,因此任何给定的内存字都可以容纳两条 16 位指令、一条 16 位指令和一条 32 位指令的一半、两条不同的 32 位指令的两半,或者一个完整的 32位指令。

从概念上讲,处理器一次解码一个半字,因此如果它看到上述位模式之一,它就知道在实际执行该指令之前还需要解码下一个半字。自从 Cortex-M3/M4 only ever actually fetch whole 32-bit words from memory 以来,现实使这变得有些复杂,因此“指令获取”的数量与实际解码和执行的指令数量之间的相关性取决于代码本身。想象一下,这些提取是为了重新填充一个 4 字节的缓冲区,管道从中吸取单个半字(据我所知,这可能与事实相差无几)。

因此,如果您有一个半字的高位包含这些值之一,那么您就知道它是 32 位编码的前半部分,您需要结合下一个半字来解释它。相反,如果您有一个半字,其最高位有任何其他值,那么它要么是 16 位编码,要么是 32 位编码的后半部分,具体取决于前一个半字是什么。

请注意,指令始终是小尾数法,因此 32 位编码的实际内存布局如下所示,其中地址 A 为偶数:

          --------------------------------
address A | bits 7:0 of first halfword |
--------------------------------
A+1 | bits 15:8 of first halfword |
--------------------------------
A+2 | bits 7:0 of second halfword |
--------------------------------
A+3 | bits 15:8 of second halfword |
--------------------------------

关于arm - 如何判断一个字(4字节)是16位指令还是32位指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com