gpt4 book ai didi

assembly - PUSH/POP 指令被视为 RISC 还是 CISC?

转载 作者:行者123 更新时间:2023-12-03 01:09:41 26 4
gpt4 key购买 nike

我在一次采访中被问到PUSHPOP是RISC还是CISC指令。我说它们是RISC,但他们告诉我它们实际上是CISC指令。我建议 ARM(一种常见的 RISC 实现)有这些指令,但他们指出 ARM 是混合的,不再是纯粹的 RISC。

我无法在网上找到任何明确的证据。 PUSHPOP 指令真的被视为 CISC 架构的标志吗?还是会在 RISC 系统上找到它们?为什么?

最佳答案

RISC 的意思是“精简指令集”(通常是 LOAD 寄存器、STORE 寄存器、ADD 寄存器、CMP 寄存器、分支条件 + 一些其他寄存器)。

概念和经验是,复杂的指令通常无法实现更简单的指令序列无法实现的有用效果,特别是如果用于实现此类复杂指令的额外逻辑被投入到制作简单的指令中。 RISC 指令运行速度更快。

PUSH 和 POP 基本上是 STORE/LOAD 间接存储和向寄存器添加常量的简单组合。因此,如果将寄存器专用于堆栈指针,则可以轻松模拟 PUSH 和 POP,并且快速流水线机器可能可以与相应的 RISC 指令一样快地执行 PUSH 和 POP。所以大多数人认为PUSH和POP是CISC指令;他们并没有真正给你买很多东西。

如果您考虑 CALL (== PUSH PC + JMP) 和 RET (POP PC),生活会变得更加有趣。这些也很容易在正确的 RISC 架构上进行模拟。然而,POP PC 会产生管道泡沫,因为处理器很难预测新 PC 将在哪里,因此无法进行预取。由于内存“在时间上很遥远”,这可能是具有大量子例程调用的代码中的主要性能抑制因素。

这里,有一种想去 CISC。你真正想要的是某种方法来预测返回的 PC。许多现代 CPU 通过在硬件中保留“影子调用堆栈”来实现这一点。每次CALL都会将PC压入内存堆栈,同时也会压入影子堆栈;每个 RET 都会从内存堆栈中弹出一个 PC 值,但会使用影子堆栈的顶部条目来预测指令流流,该条目基本上是零时间访问的(当然,还会弹出影子堆栈)。这样指令流就不会被中断,CISC 机器因此在性能上获胜。

(有人想知道,如果一台具有大量寄存器的 RISC 机器,编译叶函数调用以始终使用寄存器来存储返回 PC,可能不如影子堆栈有效。Sun Sparc 有点用它的寄存器来做到这一点窗口)。

这告诉我们,RISC 与 CISC 过度简化了设计权衡。你想要的很简单,除非更多的复杂性确实能给你带来一些东西。例如,硬件中的 IEEE 浮点比任何使用 RISC 指令的模拟要快很多。

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

关于assembly - PUSH/POP 指令被视为 RISC 还是 CISC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com