计算机组织中的分支指令17 Mar 2025 | 6 分钟阅读 分支是计算机程序中的一条指令,它可以使计算机开始执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。分支也可能指由于执行分支指令而切换到不同指令序列的动作。分支指令用于实现程序循环和条件判断中的控制流(即,仅当满足某些条件时才执行特定的指令序列)。 分支指令可以是无条件分支,它总是导致分支;也可以是条件分支,它根据某些条件可能会也可能不会导致分支。此外,它还取决于如何指定新指令序列的地址(目标地址)。 分支指令通常被分类为直接、间接或相对。这意味着指令包含目标地址,指定目标地址在哪里找到(例如,寄存器或内存位置),或指定当前地址和目标地址之间的差值。分支指令通过以下四种方式之一计算目标地址:
使用前两种方法,可以在分支之前足够远地计算目标地址,以便预取目标路径上的指令。 使用第三种和第四种方法,只要链接寄存器或计数寄存器在分支指令之前足够远地加载,就可以预取分支路径上的指令。 分支指令的类型计算机组织中有三种类型的分支指令: ![]() 1. 跳转指令 跳转指令根据指定的标志将程序序列转移到操作数中给出的内存地址。跳转指令进一步分为两类:无条件跳转指令和条件跳转指令。
2. 调用指令 调用指令将程序序列转移到操作数中给出的内存地址。在转移之前,CALL之后的下一条指令的地址被推入堆栈。调用指令也有两种类型:无条件调用指令和条件调用指令。
3. 返回指令 返回指令将程序序列从子程序转移到调用程序。返回指令有两种类型:无条件跳转指令和条件跳转指令。
分支指令的实现从机制上讲,分支指令可以改变 CPU 的程序计数器。程序计数器存储要执行的下一条指令的内存地址。因此,分支指令会导致 CPU 从不同的内存单元序列开始获取指令。机器级分支指令有时被称为跳转指令。
分支指令的处理分支指令可以通过多种方式进行处理,以减少其对指令执行速率的负面影响。 ![]() 1. 分支延迟槽 处理器在确定当前指令是否为分支指令之前就会获取下一条指令。当当前指令执行完成并且需要进行分支时,处理器必须丢弃剩余指令并从分支目标处获取新的分支指令。分支指令后面的位置称为分支延迟槽。根据执行分支指令所需的时间,可能有一个或多个分支延迟槽。 一种称为延迟分支的技术可以最小化由条件分支指令引起的惩罚。延迟槽中的指令总是被获取。因此,我们希望安排它们无论分支是采取还是不采取都能完全执行。目标是将有用的指令放置在这些槽中。如果无法将有用的指令放置在延迟槽中,则必须用 NOP 指令填充这些槽。 2. 分支预测 分支预测利用统计数据并使用结果来优化代码。程序员会编译程序的测试版本并使用测试数据运行它。
软件分支预测的问题在于它需要复杂的软件开发过程。 3. 无分支代码 一些逻辑可以在没有分支或分支较少的情况下编写。通常可以使用按位运算、条件移动或其他谓词而不是分支。无分支代码对于加密至关重要,因为可以防止时序攻击。 4. 硬件分支预测器 为了运行任何软件,硬件分支预测器将统计数据转移到了电子元件中。分支预测器是处理器的一部分,用于猜测条件分支的结果。然后,处理器的逻辑通过开始执行预期的指令流来“赌博”这个猜测。 一个简单的硬件分支预测方案是假设所有向后分支(到较小的程序计数器)都被采取(因为它们是循环的一部分),而所有向前分支(到较大的程序计数器)都不被采取(因为它们离开了循环)。 通过在模拟中针对各种测试程序运行,可以开发和统计验证更好的分支预测器。好的预测器通常会计算分支先前执行的结果。 下一个主题计算机组织中的数据表示 |
我们请求您订阅我们的新闻通讯以获取最新更新。