首页 > 解决方案 > RISC - 禁止指令序列

问题描述

计算机系统介绍书显示了CISC和RISC之间的区别如下。

CISC:隐藏在机器级程序中的实现工件。ISA 在程序及其执行方式之间提供了清晰的抽象。

RISC:暴露于机器级程序的实现工件。一些 RISC 机器禁止特定的指令序列,并且在执行以下指令之前不会生效的跳转。编译器的任务是在这些约束内优化性能。

我想知道禁止哪些“特定指令序列”,为什么?

标签: risc

解决方案


作者试图传达的是 CISC ISA 在向程序员隐藏微架构细节方面比 RISC 更好。CISC ISA 公开表示特定操作的指令,该特定操作不一定与微架构实现可能执行该操作的方式相关联。

假设我们想要将数据从内存位置 A 移动到另一个 B - CISC 架构会将该操作公开为类似于以下的指令:“mov B, A”(宏操作)。现在,在微架构级别实现这一点的一种方法是分两步完成,即执行两条指令(微操作)——将数据从 A 加载到寄存器,然后从该寄存器存储到内存位置 B . 另一种方法是将数据移动卸载到协处理器,这可能更有效地在内存中移动数据(DMA引擎)。无论哪种方式,程序员都将操作编码为一条指令(“mov”

另一方面,RISC ISA 倾向于(尽管并非总是)在处理器中实际执行时公开操作(即以微操作的形式),程序员的工作是将这些操作组合成更复杂的操作程序员希望程序做什么。上述作为示例的移动操作必须明确编码为两条指令或使用 DMA。

作者给出的 RISC ISA 公开实现细节(“工件”)的示例是关于分支延迟槽,其中分支之后的指令将始终独立执行,无论是否采用分支。这是由于指令流水线化,这是一种用于加速执行的微架构技术。在这种情况下,ISA 暴露了程序员需要注意的微架构细节,以保证程序的正确性。流水线指令还可以创建其他流水线危害,我认为作者的意思是“禁止的指令序列”。这些指令序列本身并没有被禁止,您可以执行它们,但它们会产生错误的结果。

希望这可以帮助。


推荐阅读