我想知道,在今天的大多数CISC架构中,CISC指令的最大可能长度是多少?
我还没有找到明确的答案,但理论上是it is suggested that it's 16 bytes long。
在15分钟左右的视频@中,为什么说话者会在“理论上”提出建议,为什么只有16个字节呢?
答案 0 :(得分:5)
在实践中也是如此。对于x86-64,AMD将允许的指令长度限制为15个字节。之后,指令解码器将放弃并发出错误信号。
否则,对于多个指令前缀和覆盖字节,我们不确切知道指令可以获得多长时间。如果我们允许冗余重复一些前缀,那就没有限制。
Agner Fog描述了这个问题:
同时执行三条,四条或五条指令并不罕见。限制不是执行单元,我们有很多,但指令解码器。指令的长度可以是1到15个字节。如果我们想同时解码几条指令,那么我们就会遇到严重的问题。在知道第二条指令的开始位置之前,我们必须知道第一条指令的长度。因此,在解码第一条指令之前,我们无法解码第二条指令。解码本质上是一个串行过程,每个时钟周期能够解码多个指令需要很多硬件。换句话说,指令的解码可能是严重的瓶颈,并且指令代码越复杂就越糟糕。
请参阅其余帖子here。
答案 1 :(得分:4)
CISC是设计理念,而不是架构,因此没有“CISC指令长度”,只有特定CISC架构的指令长度(如x86)或摩托罗拉68k)
具体谈论x86然后限制是15个字节。从理论上讲,指令长度可以是无穷大,因为前缀可以重复。然而,这使得解码器很难在80286中开始将Intel限制为10个字节,然后在后来的ISA版本中将其限制为15个字节。有关它的更多信息,请阅读
另请注意,RISC并不意味着固定长度的指令。现代MIPS,ARM,RISC-V ...... all have a variable length instruction mode增加代码密度