nul*_*ent 2 instruction-set cpu-architecture
我想知道,在当今大多数CISC体系结构上,CISC指令的最大可能长度是多少?
我还没有找到确切的答案,但理论上建议长度为16字节。
在15:00分钟左右的视频中,演讲者为何建议“理论上”,为什么恰好是16个字节?
在实践中也是如此。对于x86-64,AMD将允许的指令长度限制为15个字节。之后,指令解码器将放弃并发出错误信号。
否则,具有多个指令前缀和覆盖字节,我们不知道该指令可以得到多长时间。如果我们允许某些前缀的重复重复,则没有任何限制。
Agner Fog描述了该问题:
同时执行三个,四个或五个指令并不罕见。限制不是我们拥有很多的执行单元,而是指令解码器。一条指令的长度可以是1到15个字节。如果我们想同时解码多条指令,那么我们将面临一个严重的问题。我们必须先知道第一条指令的长度,然后才能知道第二条指令的开始位置。因此,我们在解码第一条指令之前就无法解码第二条指令。解码本质上是一个串行过程,并且需要大量硬件才能在每个时钟周期解码多个指令。换句话说,指令的解码可能是一个严重的瓶颈,并且指令代码越复杂,情况就越糟。
在此处查看他的博客文章的其余部分。
CISC是一种设计理念,而不是一种体系结构,因此不存在“CISC指令长度”这样的东西,只有特定CISC体系结构(例如x86或Motorola 68k)的指令长度
具体来说 x86 的限制是 15 个字节。理论上,指令长度可以是无限的,因为前缀可以重复。然而,这给解码器带来了困难,因此在 80286 中,Intel 开始将其限制为 10 字节,在后来的 ISA 版本中限制为 15 字节。有关它的更多信息,请阅读
另请注意,RISC 并不意味着固定长度指令。现代MIPS、ARM、RISC-V...都具有变长指令模式以增加代码密度