【发布时间】:2017-04-23 04:41:07
【问题描述】:
我在一次采访中被问到 PUSH 和 POP 是 RISC 还是 CISC 指令。我说它们是 RISC,但他们告诉我它们实际上是 CISC 指令。我建议 ARM(一种常见的 RISC 实现)有这些指令,但他们指出 ARM 是混合的,不再是纯粹的 RISC。
我在网上找不到任何明确的证据。 PUSH 和 POP 指令真的被认为是 CISC 架构的标志,还是会在 RISC 系统上找到它们?为什么?
【问题讨论】:
-
我做过,他们说 Arm 是混合的,它不再是纯粹的 RISC
-
ARM 一直支持使用单个指令执行 push 或 pop,但不支持专门的 PUSH/POP 指令。它是通过自动后递增和预递减寻址模式完成的。
-
在 x86/x86-64 上,push 和 pop 进行了高度优化。如此优化以至于他们对连续推送的堆栈指针的依赖性进行了特殊处理 - 第二次推送不会等到第一次推送更新堆栈指针。推送只是存储到(通常)预先递减的堆栈指针寄存器。具有某种寻址模式的商店具体是 CISC 还是 RISC?这是有争议的。
-
@doug65536:对“堆栈引擎”的更清晰解释,它通过跟踪与无序核心中存在的 RSP 值的偏移量来提高推送/弹出效率:stackoverflow.com/questions/36631576/… .幸运的是,由于专利共享协议,AMD 和英特尔都有非常相似的堆栈引擎。
-
@Jonas 这个问题与特定架构无关,risc 标签实际上确实适用。 (您可能会争辩说它与堆栈溢出无关,因为它是关于 CPU 架构分类法(即关于命名的哲学辩论),而不是编程......)也就是说,不要从它确实适用的问题中删除它,直到/ 除非它的销毁已在 meta 上达成一致。
标签: assembly cpu-architecture instruction-set risc