我如何知道单词中的字节是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:
• 0b11101 • 0b11110 • 0b11111. Otherwise, the halfword is a 16-bit instruction
这是否意味着处理器总是取半字,检查它们并决定是16位还是32位?
前半个字是什么意思?一个词是31-16还是15-0?
如果我有32位,那么我能知道它是32位指令还是16位指令?
谢谢。
发布于 2015-03-04 22:00:54
在经验中,“32位”指令仍然由两个独立的半字组成,因此“第一个半字”是编码的第一个半字,这与内存中的布局无关。拇指指令是半字对齐的,所以任何给定的内存字都可以容纳两个16位指令,一个16位指令和一个32位指令的一半,两个不同的32位指令的两半,或者整个32位指令的一半。
从概念上讲,处理器一次解码一个半字,因此,如果它看到上述比特模式之一,它知道它还需要解码下一个半字才能实际执行该指令。实际上,由于Cortex-M3/M4 只有真正从内存中取出整个32位的单词使这一点复杂化了,因此“指令获取”的数量与实际解码和执行的指令数量之间的相关性取决于代码本身。想象一下,这些获取将填充一个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 |
--------------------------------
https://stackoverflow.com/questions/28860250
复制相似问题