复杂指令和流水线

vrume21

我正在阅读P&H的《计算机组织与设计》,发现以下几行:“在x86之类的指令集中,指令从1字节到17字节不等,流水线处理更具挑战性”,其中将x86与MIPS。

较长的指令是否必须编码大量的操作?如果是这样,有人可以解释为什么吗?看来这是在这里建立的连接,但似乎可以开发一条具有大立即数或偏移量的指令,该指令占用大量字节,但只包含一个操作。如果不是这种情况,有人可以解释这一说法吗?

Iwillnotexist Idonotexist

该说法有些不准确(如果设计合理,我看不出先天原因为什么变长指令集应该更难流水线化),但可能是指在MIPS中,指令是定长4字节的事实。而在x86中,指令的长度最多可以在1到15个字节之间变化(17个错误),这使流水线内解码步骤变得更短。

由于指令长度各不相同,因此在x86中发现指令边界要困难得多,因为当前指令必须在CPU知道下一条开始的位置,下一条以及下一条的位置之前进行解码。另一方面,保证+4增量,这是您需要执行下一条指令的所有步骤(除非管道中有分支),而且这些指令还按4字节边界对齐。

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

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

较长的指令不一定会编码更多的“操作”。您对某些包含大量常量的x86指令的直觉是正确的!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章