2

我想知道,当今大多数 CISC 架构上 CISC 指令的最大可能长度是多少?

我还没有找到明确的答案,但理论上建议它是 16 字节长

在大约 15:00 分钟的视频中,为什么演讲者建议“理论上”,为什么正好是 16 个字节?

4

2 回答 2

5

在实践中也是如此。对于 x86-64,AMD 已将允许的指令长度限制为 15 个字节。之后,指令解码器将放弃并发出错误信号。

否则,由于有多个指令前缀和覆盖字节,我们不知道该指令究竟能得到多长时间。如果我们允许某些前缀的冗余重复,则完全没有限制。

Agner Fog 描述了这个问题:

同时执行三个、四个或五个指令并不罕见。限制不是我们有很多的执行单元,而是指令解码器。一条指令的长度可以是 1 到 15 个字节。如果我们想同时解码多条指令,那么我们就有一个严重的问题。在我们知道第二条指令从哪里开始之前,我们必须知道第一条指令的长度。所以我们不能在解码第一条指令之前解码第二条指令。解码本质上是一个串行过程,需要大量硬件才能在每个时钟周期解码多条指令。换句话说,指令的解码可能是一个严重的瓶颈,指令代码越复杂,情况就越糟糕。

在此处查看他的博客文章的其余部分。

于 2012-06-26T14:32:31.003 回答
4

CISC 是一种设计理念,而不是架构,因此没有“CISC 指令长度”之类的东西,只有特定 CISC 架构(如 x86 或摩托罗拉 68k)的指令长度

专门谈论 x86 那么限制是 15 个字节。理论上,指令长度可以是无限的,因为前缀可以重复。然而,这使得解码器变得困难,因此英特尔在 80286 中开始将其限制为 10 个字节,然后在以后的 ISA 版本中限制为 15 个字节。有关它的更多信息,请阅读

另请注意,RISC 并不意味着固定长度的指令。现代 MIPS、ARM、RISC-V……都有变长指令模式来增加代码密度

于 2013-08-14T08:57:17.843 回答