首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定一个单词(4个字节)是16位指令还是32位指令?

如何确定一个单词(4个字节)是16位指令还是32位指令?
EN

Stack Overflow用户
提问于 2015-03-04 16:53:41
回答 1查看 3.3K关注 0票数 3

我如何知道单词中的字节是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位指令?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-04 22:00:54

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

从概念上讲,处理器一次解码一个半字,因此,如果它看到上述比特模式之一,它知道它还需要解码下一个半字才能实际执行该指令。实际上,由于Cortex-M3/M4 只有真正从内存中取出整个32位的单词使这一点复杂化了,因此“指令获取”的数量与实际解码和执行的指令数量之间的相关性取决于代码本身。想象一下,这些获取将填充一个4字节的缓冲区,由管道将单个的半字从其中删除(据我所知,这可能离事实并不那么远)。

所以,如果你有一个半字包含其中一个值在它的顶部位,那么你知道它是32位编码的前半部分,你需要结合下一个半字来解释它。相反,如果你有一个半字,它的顶部有任何其他值,那么它要么是16位编码,要么是32位编码的下半部分,这取决于前半字是什么。

注意,指令总是小端点,因此32位编码的实际内存中布局如下所示,其中地址A是偶数:

代码语言:javascript
运行
复制
          --------------------------------
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 |
          --------------------------------
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28860250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档