我在一次面试中被问到PUSH
和POP
指令是RISC还是CISC指令。我回答说它们是RISC指令,但他们告诉我这些指令实际上是CISC指令。我提出ARM(一个常见的RISC实现)有这些指令,但他们指出ARM已经不再是纯粹的RISC,而是混合结构。
我在网上找不到任何明确的证据支持其中一种观点。 PUSH
和 POP
指令是否真的被认为是CISC架构的标志,或者它们会出现在RISC系统上?为什么?
我在一次面试中被问到PUSH
和POP
指令是RISC还是CISC指令。我回答说它们是RISC指令,但他们告诉我这些指令实际上是CISC指令。我提出ARM(一个常见的RISC实现)有这些指令,但他们指出ARM已经不再是纯粹的RISC,而是混合结构。
我在网上找不到任何明确的证据支持其中一种观点。 PUSH
和 POP
指令是否真的被认为是CISC架构的标志,或者它们会出现在RISC系统上?为什么?
这告诉我们的是,RISC与CISC之争过于简化了设计权衡。你需要的是简单,除非更多的复杂性实际上给你带来了好处。例如,使用硬件中的IEEE浮点运算比使用RISC指令模拟要快得多。
因此,大多数现代计算机不是明显的RISC或CISC。性能分析会做出选择。
减少指令数量
固定大小的指令(可能有很多)
一个Load/Store体系结构(可能有很多可变大小的指令)
不将指令转化为微操作并且没有“微码”的CPU(例如8086、8088、80186等,但不包括80486、Pentium等)
以上任意2个或以上的组合
为了降低开发成本而牺牲性能的任何东西
是否认为PUSH/POP指令属于RISC或CISC?
是的(取决于应用RISC或CISC定义时的具体情况,PUSH/POP指令可以被认为是RISC、CISC、两者都是,或两者都不是)。
大多数情况下,问题本身是一种虚假的二元分法;就像问“灰色是黑色还是白色?”一样。
rep movsb
或 ARM 的 push {r0,r1,r4,lr}
这样的东西(带有要推送的寄存器的位图,使其几乎不可能在恒定时间内运行。ARM 不太像 RISC,这是它违反标准 RISC 纯度的例外之一;相关信息请参见 链接)。 - Peter Cordesadc
会增加额外的uops成本:他说我加入P6时是RISC的支持者,我的态度是“让软件(微码)来做”,这是关于后悔这个选择的评论线程的一部分(引用在此)。 - Peter Cordes