复杂指令和流水线

时间:2013-11-10 16:39:45

标签: architecture x86 mips instructions instruction-set

我正在阅读P& H的计算机组织和设计,并遇到以下几行:"在像x86这样的指令集中,指令从1字节到17字节不等,流水线操作更具挑战性。 ,进行比较的是x86和MIPS之间。

更长的指令是否必然会编码更多的操作?如果是这种情况,有人可以解释原因吗?看来这是在这里建立的连接,但似乎可以开发一个具有大的立即值或偏移量的指令,占用大量字节,但只包含一个操作。如果不是这样,有人可以解释这个陈述吗?

1 个答案:

答案 0 :(得分:2)

该陈述有些不准确(我认为,如果设计得当,变长指令集应该更难以管道,我认为没有先验原因),但可能是指在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操作数非破坏性存储指令,其中目标寄存器不一定是源之一reigsters),锁定系统总线以使操作成为原子,或指定比例,索引和基本位移作为内存操作数。

这些前缀和后缀使得生命变得艰难,因为指令集中存在的更多,并且它们修改指令的含义越多,解码步骤确定要执行的确切内容所需的时间越长,从哪里拉出所有操作数,以及下一条指令从何处开始。

更长的指令不一定编码更多的“操作”。您对包含大量常量但仍只进行一次“操作”的某些x86指令的预感正好在点上!