被认为是RISC或CISC的推/流行说明



我在面试中被问到PUSHPOP是RISC或CISC指令。我说他们是RISC,但他们告诉我他们实际上是CISC的指示。我建议ARM(一个常见的RISC实施)有这些说明,但他们指出,ARM是混合的,不再是RISC。

我在网上找不到任何确定的证明。PUSHPOP指令是否真的被视为CISC架构的标志,还是在RISC系统上找到?为什么?

risc表示"减少的指令集"(通常加载REG,存储寄存器,添加寄存器,CMP寄存器,CMP寄存器,有条件 其他一些)。

概念和经验是,复杂的指令通常无法实现一个有用的效果,而简单的说明序列无法实现,尤其是如果将用于实施此类复杂说明的额外逻辑而不是投资于使简单的逻辑进行投资RISC指令运行速度。

PUSH和POP基本上是存储/负载间接的简单组合,并为寄存器添加常数。因此,如果将寄存器专用于堆栈指针,PUSH和POP可以轻松模拟,并且快速管道的计算机可能会执行PUSH和POP的速度与相应的RISC指令一样快。因此,大多数人认为推动和流行作为CISC指示;他们真的没有给你很多。

如果您考虑呼叫(== PUSH PC JMP)和RET(POP PC),那么生活就会变得更加有趣。这些也很容易在正确的RISC架构上进行模拟。但是,POP PC会产生管道气泡,因为处理器很难预测新PC的位置,因此无法进行预取。随着内存"及时距离",这可能是带有许多子例程呼叫的代码中的主要性能抑制剂。

在这里,一种想去CISC。您真正想要的是预测该返回PC的某种方法。许多现代CPU通过在硬件中保留"阴影呼叫堆栈"来做到这一点。每个调用将PC推入内存堆栈,也将PC推入阴影堆栈;每个RET从内存堆栈中弹出PC值,但是使用Shadow堆栈的顶部入口预测指令流流,该堆栈基本上对其进行了零时间访问(当然,并且弹出阴影堆栈)。这样,指令流就不会被中断,因此CISC机器在性能上获胜。

(一个人想知道,如果有很多寄存器的RISC机器,则编译了叶子功能呼叫以始终使用寄存器存储返回PC,可能不如Shadow stack。窗口)。

这告诉我们,Risc vs. Cisc过于简化设计权衡。您想要的很简单,除非更多的复杂性实际上给您一些东西。例如,硬件中的IEEE浮点数比使用RISC指令的任何仿真快。

因此,大多数现代机器都不是整齐的RISC或CISC。性能分析选择。

'risc;对不同的人意味着不同的事情。我看过的定义包括:

  • 减少了指令数量

  • 固定尺寸指令(可能是很多)

  • 负载/商店体系结构(可能带有许多可变大小的说明)

  • 不将指令转化为微型OPS且没有" Micro Code"的CPU。(例如8086,8088,80186,...,但不是80486,五角形,...)

  • 上面的2个或更多内容的任何组合

  • 为了降低发展成本而牺牲绩效的任何事物

推送/流行说明是否被视为RISC或CISC?

是的(推送/pop指令被视为RISC,CISC,或两者兼而有之;取决于当时应用RISC或CISC的定义。

)。

大部分问题本身是错误的二分法。就像问"灰色黑或白色?

"

相关内容

  • 没有找到相关文章

最新更新