Architecture 复杂指令和流水线

Architecture 复杂指令和流水线,architecture,x86,mips,instructions,instruction-set,Architecture,X86,Mips,Instructions,Instruction Set,我在阅读p&H的《计算机组织与设计》一书时,遇到了这样一句话:“在像x86这样的指令集中,指令从1个字节到17个字节不等,流水线的难度要大得多”,其中比较的是x86和MIPS 较长的指令是否必须编码更多的操作?如果是这样,有人能解释一下原因吗?这似乎是这里正在建立的连接,但似乎可以开发一个具有大立即值或偏移量的指令,该指令占用大量字节,但只包含一个操作。如果不是这样,有人能解释一下这句话吗?这句话有点不准确(如果设计得当,我看不出为什么变长指令集更难管道化的先验原因),但可能是指在MIPS中,指

我在阅读p&H的《计算机组织与设计》一书时,遇到了这样一句话:“在像x86这样的指令集中,指令从1个字节到17个字节不等,流水线的难度要大得多”,其中比较的是x86和MIPS


较长的指令是否必须编码更多的操作?如果是这样,有人能解释一下原因吗?这似乎是这里正在建立的连接,但似乎可以开发一个具有大立即值或偏移量的指令,该指令占用大量字节,但只包含一个操作。如果不是这样,有人能解释一下这句话吗?

这句话有点不准确(如果设计得当,我看不出为什么变长指令集更难管道化的先验原因),但可能是指在MIPS中,指令是固定长度的,4字节;而在x86中,指令的长度最多可以从1到15字节不等(17不正确),这使得流水线中的解码步骤更加复杂

由于指令长度不同,在x86中发现指令边界要困难得多,因为在CPU知道下一条指令从何处开始、下一条指令从何处开始、下一条指令从何处开始等之前,必须对当前指令进行解码。另一方面,在MIPS中,保证只需增加+4增量即可进入下一条指令(除非管道中有分支),而且这些指令也在4字节边界上对齐

该语句可能涉及的另一个问题是,在x86中,可以在指令中添加特殊前缀(如REX、VEX和LOCK)和后缀(SIB),以修改它们的行为,例如授予对更多(r8-r15)和更宽(eax->rax、XMM->YMM)寄存器、更多操作数的访问权限(VEX 3操作数和4操作数非破坏性存储指令,其中目标寄存器不一定是源寄存器之一),锁定系统总线以使操作原子化,或指定刻度、索引和基位移作为内存操作数

这些前缀和后缀使生活变得艰难,因为指令集中的前缀和后缀越多,它们对指令含义的修改越大,解码步骤确定要执行的内容、从何处提取所有操作数以及下一条指令从何处开始所需的时间就越长

较长的指令不一定编码更多的“操作”。您对某些x86指令包含大量常量但仍然只执行一个“操作”的直觉是正确的