- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一次采访中被问到PUSH
和POP
是RISC还是CISC指令。我说它们是RISC,但他们告诉我它们实际上是CISC指令。我建议 ARM(一种常见的 RISC 实现)有这些指令,但他们指出 ARM 是混合的,不再是纯粹的 RISC。
我无法在网上找到任何明确的证据。 PUSH
和 POP
指令真的被视为 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/
如果您正在写一本教科书,并且需要决定 CPU 设计来讨论某些问题,您会选择 RISC 还是 CISC? RISC 的优点,你知道的:更干净、更简单等等。 RISC 的缺点:我必须使用模拟器,与 x86
这是《汇编语言简介》一书中关于RISC(与CISC)的引述 In MIPS, we could write procedures without using the stack. For most n
我正在准备计算机科学考试,这个问题在以前的考试中不断出现,我找不到答案。 考虑在只有一种寻址模式(Reg + Offset)的典型 RISC 架构上执行以下两条指令。 804836e: 40
我从不同来源阅读了很多有关 CISC 和 RISC 架构之间差异的信息。似乎达成共识的一件事是,CISC 始终与冯诺依曼一起使用,而 RISC 与哈佛架构一起使用。但我不太明白这种分类背后的原因。 最
也许我对架构有误解——但如果一台机器有一个乘法指令——那条指令是不是没有被转换成更小的指令,或者是非常复杂,以至于它最终与等效的 RISC 指令具有相同的速度? 乘法是一个不好的例子——它在两种架构中
我正在学习 CPU 架构,它有点令人困惑。 旧的微程序 CISC CPU 会将 ISA 指令翻译成一系列简单的(1 个周期)微指令是否正确?(根据 RISC 哲学,ISA 指令基本上与微指令相同,需要
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
似乎两者都出于各种原因使用,ARM 用于功耗,x86 用于其扩展功能。 我仍然很好奇,因为我的计算机科学文化有点空洞,像 x86(或其前身)这样的 CISC 芯片的真正目的是什么。 如果他们有 RIS
我在一次采访中被问到PUSH和POP是RISC还是CISC指令。我说它们是RISC,但他们告诉我它们实际上是CISC指令。我建议 ARM(一种常见的 RISC 实现)有这些指令,但他们指出 ARM 是
根据 Miles Murdoca 和 Vincent Heuring 的“计算机体系结构和组织”, CISC instructions do not fit pipelined architectur
我想弄清楚现代 GPU 的指令集是精简的还是复杂的。 维基百科说它不是指令集的大小,而是完成一条指令需要多少个周期。 在 RISC 处理器中,每条指令可以在一个周期内完成。 在 CISC 处理器中,完
我是一名优秀的程序员,十分优秀!