【发布时间】:2018-11-01 11:30:58
【问题描述】:
计算机系统入门书显示CISC和RISC之间的区别如下。
CISC:从机器级别隐藏的实现工件 程式。 ISA 提供了一个干净的抽象 程序之间以及它们是如何执行的。
RISC:暴露于机器级的实现工件 程式。一些 RISC 机器禁止特定的 指令序列和跳转 直到下面的指令执行后才生效。 编译器的任务是优化 在这些限制内的表现。
我想知道禁止哪些“特定指令序列”,为什么?
【问题讨论】:
标签: risc
计算机系统入门书显示CISC和RISC之间的区别如下。
CISC:从机器级别隐藏的实现工件 程式。 ISA 提供了一个干净的抽象 程序之间以及它们是如何执行的。
RISC:暴露于机器级的实现工件 程式。一些 RISC 机器禁止特定的 指令序列和跳转 直到下面的指令执行后才生效。 编译器的任务是优化 在这些限制内的表现。
我想知道禁止哪些“特定指令序列”,为什么?
【问题讨论】:
标签: risc
作者试图传达的是 CISC ISA 在向程序员隐藏微架构细节方面比 RISC 更好。 CISC ISA 公开表示特定操作的指令,该操作不一定与微架构实现可能执行该操作的方式相关。
假设我们想要将数据从内存位置 A 移动到另一个 B - CISC 架构会将该操作公开为类似于此的指令:“mov B, A”(macro-op)。现在,在微架构级别实现这一点的一种方法是分两步完成,即执行两条指令 (micro-ops) -- 将数据从 A 加载到寄存器,然后从该寄存器存储到内存位置 B . 另一种方法是将数据移动卸载到协处理器,这可能更有效地在内存中移动数据(DMA 引擎)。无论哪种方式,程序员都将操作编码为单个指令(“mov”指令),而无需了解操作将如何在微架构级别实际执行
另一方面,RISC ISA 倾向于(尽管not always)在处理器中实际执行时公开操作(即以微操作的形式),程序员的工作是将这些操作组合成更多执行程序员希望程序执行的操作的复杂程序。上述作为示例的移动操作必须明确编码为两条指令或使用 DMA。
作者作为 RISC ISA 公开实现细节(“工件”)的示例大约是 branch delay slots,其中无论是否采用分支,分支之后的指令将始终独立执行。这是由于pipelining of instructions 是一种用于加速执行的微架构技术。在这种情况下,ISA 暴露了程序员需要注意的微架构细节,以保证程序的正确性。流水线指令还可以创建其他pipeline hazzards,我认为作者的意思是“禁止的指令序列”。这些指令序列本身并没有被禁止,您可以执行它们,但它们会产生错误的结果。
希望这会有所帮助。
【讨论】: