Javatpoint标志
Javatpoint标志

计算机组织分科教学

一个分支是计算机程序中的一条指令,它可以使计算机开始执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。分支也可以指作为执行分支指令的结果而将执行切换到不同指令序列的行为。分支指令用于实现程序循环和条件中的控制流(即,仅在满足某些条件时执行特定的指令序列)。

分支指令可以是无条件转移,这总是导致分支或条件分支,这可能会导致分支,也可能不会,这取决于某些条件。另外,这取决于它如何指定新指令序列的地址(目标地址)。

分支指令一般分为直接、间接相对。这意味着指令包含目标地址,指定在哪里可以找到目标地址(例如,寄存器或存储器位置),或指定当前地址和目标地址之间的差异。分支指令以四种方式之一计算目标地址:

  • 目标地址是一个常量和分支指令本身的地址之和。
  • 目标地址是作为指令的操作数给出的绝对地址。
  • 目标地址是在链接寄存器中找到的地址。
  • 目标地址是在计数寄存器中找到的地址。

可以在分支之前充分计算目标地址,以便使用前两种方法沿目标路径预取指令。

使用第三和第四种方法,如果在分支指令之前充分加载了链接寄存器或计数寄存器,那么沿着分支路径预获取指令也是可能的。

分支指令的类型

在计算机组织中有三种类型的分支指令:

计算机组织分科教学

1.跳转指令

跳转指令根据指定的标志将程序序列传输到操作数中给定的内存地址。跳转指令又分为无条件跳转指令和条件跳转指令两部分。

  • 无条件跳转说明:将程序序列传输到所描述的内存地址。
  • 条件跳转指令:仅当条件满足时,才将程序序列传输到所描述的内存地址。

2.调用指令

调用指令将程序序列传输到操作数中给定的内存地址。在传输之前,在CALL之后的下一条指令的地址被压入堆栈。呼叫指令也分为无条件呼叫指令和条件呼叫指令两种。

  • 无条件呼叫指示:它将程序序列传输到操作数中给定的内存地址。
  • 条件呼叫说明:只有当条件满足时,指令才会执行。

3.返回指令

返回指令将程序序列从子程序传输到调用程序。返回指令有两种类型:无条件跳转指令和条件跳转指令。

  • 无条件退货说明:程序序列无条件地从子程序转移到调用程序。
  • 条件返回指令:只有当条件满足时,程序序列才会无条件地从子程序转移到调用程序。

分支指令的实现

从机械上讲,分支指令可以改变CPU的程序计数器。程序计数器存储下一条要执行的指令的内存地址。因此,分支会导致CPU开始从不同的内存单元序列中获取指令。有时称为机器级分支指令跳转指令

  1. 机器级跳转指令通常有无条件和条件形式,后者可能是采取不采取视情况而定。通常,单向跳跃有不同的形式,称为子程序调用称为a调用,它自动将原始地址保存为堆栈上的返回地址,从而允许从代码中的多个位置调用单个子例程。
    • 当分支是采取, CPU的程序计数器被设置为跳转指令的参数。所以,下一条指令就变成了内存中那个地址上的指令。因此,控制流程发生了变化。
    • 当分支是不采取时,CPU的程序计数器不变。因此,下一条执行的指令是在分支指令之后的指令。因此,控制流程是不变的。
  2. 这个词分支可以参考用高级语言编写的程序和用机器代码或汇编语言编写的程序。
    • 在高级编程语言中,分支通常采用各种形式的条件语句,这些条件语句封装了条件满足时将执行的指令序列。
    • 无条件分支指令(如gotoi)用于无条件地“跳转”到(开始执行)不同的指令序列。
  3. 在带有标志寄存器的cpu中,较早的指令在标志寄存器中设置条件。较早的指令可以是算术指令或逻辑指令,它通常靠近分支,但不一定是指令立即在树枝前。
    • 然后在分支中使用存储的条件,例如如果设置溢出标志,则跳转
    • 这些临时信息通常存储在标志寄存器中,但也可能位于其他地方。
    • 在较慢的、简单的计算机中,标志寄存器的设计很简单。在高速计算机中,标志寄存器会对速度造成瓶颈,因为可以并行操作的指令需要按照特定的顺序设置标志位。
  4. 也有一些机器或特定指令,其条件可以由跳转指令本身检查,例如分支。在简单的计算机设计中,比较分支比标志寄存器分支执行更多的运算并使用更多的功率。
    • 计算机设计比较分支可以比标志寄存器分支运行得更快,因为比较分支可以使用与计算相同的CPU机制,以更高的并行性访问寄存器。
  5. 一些早期和简单的CPU架构,仍然可以在微控制器中找到,可能不实现条件跳转,而是有条件的“跳过下一条指令”操作。因此,条件跳转或调用被实现为无条件跳转或调用指令的条件跳转。

分支指令的处理

分支指令可以用几种方式处理,以减少它们对指令执行速度的负面影响。

计算机组织分科教学

1.分支延迟槽

处理器在确定当前指令是否为分支指令之前获取下一条指令。当当前指令执行完毕,要进行分支时,处理器必须丢弃剩余的指令,并在分支目标处获取新的分支指令。分支指令后面的位置称为a分支延迟槽。根据执行分支指令的时间,可能有多个分支延迟槽。

一种称为延迟分支的技术可以最大限度地减少由条件分支指令引起的损失。延迟槽中的指令总是被获取。因此,我们想安排他们完全执行,无论分支是否采取不采取。我们的目标是能够在这些插槽中放置有用的指令。如果延迟插槽中不能放置有用的指令,则必须用NOP指令填充这些插槽。

2.分支预测

分支预测获取统计数据并使用结果来优化代码。程序员会编译一个程序的测试版本,并使用测试数据运行它。

  • 测试代码计算如何获取分支。
  • 然后编译器使用来自测试代码的统计信息来优化发布代码的分支。优化将安排最快的分支方向(不管是否被采用)总是最常被采用的控制流路径。
  • 为了实现这一点,cpu必须设计成可预测的分支计时。有些CPU的指令集设计有“分支提示”,这样编译器就可以告诉CPU如何执行每个分支。

软件分支预测的问题在于它需要一个复杂的软件开发过程。

3.Branch-free代码

有些逻辑可以不使用分支或使用更少的分支编写。通常可以使用位操作、条件移动或其他预测来代替分支。由于定时攻击,无分支代码对于密码学是必须的。

4.硬件分支预测器

为了运行任何软件,硬件分支预测者将统计数据转移到电子设备中。分支预测器是处理器的一部分,用于猜测条件分支的结果。然后处理器的逻辑在猜测上下注,开始执行预期的指令流。

一个简单的硬件分支预测方案的例子是假设所有向后分支(到较小的程序计数器)都被取走了(因为它们是循环的一部分),而所有向前分支(到较大的程序计数器)都没有被取走(因为它们离开了循环)。

通过在各种测试程序中模拟运行,开发了更好的分支预测器并进行了统计验证。好的预测者通常会计算分支之前执行的结果。







Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map