bc (分支条件) 指令

用途

有条件地分支到指定的目标地址。

语法

位数
0 - 5 16
6 - 10 BO
11 - 15 BI
16 - 29 BD
30 AA
31 LK
描述
bc BOBItarget_address
bca BOBItarget_address
bcl BOBItarget_address
bcla BOBItarget_address

描述

bc 指令将分支到由分支目标地址指定的指令。 通过以下两种方法之一计算分支目标地址:

  • 如果 "绝对地址" 位 (AA) 为 0 ,那么将通过将 14 位 "分支移位" (BD) 和 b "00" 并置,将其符号扩展为 32 位并将结果添加到此分支指令的地址来计算分支目标地址。
  • 如果 AA 是 1 ,那么分支目标地址是与 b '00' 符号并置的 BD-扩展至 32 位。

bc 指令有四种语法形式。 每种语法形式对 "条件寄存器" 字段 0 和 "定点异常寄存器" 都有不同的影响。

描述
语法表单 绝对地址位 (AA) 定点异常寄存器 链路位 (LK) 条件寄存器字段 0
bc 0 0
bca 1 0
bcl 0 1
bcla 1 1

bc 指令的四种语法形式从不影响定点异常寄存器或条件寄存器字段 0。 语法形式设置 AA 位和链接位 (LK) ,并确定使用哪种方法计算分支目标地址。 如果将 "链接位" (LK) 设置为 1 ,那么指令的有效地址将放在 "链接寄存器" 中。

"分支选项" 字段 (BO) 用于将不同类型的分支组合到单个指令中。 提供了扩展助记符以自动设置 "分支选项" 字段。

BO 字段的编码是在 PowerPC® 体系结构中定义的。 以下列表简要描述了使用 pre-V2.00 编码的此字段的可能值:

表 1. 使用 pre-V2.00 编码的 BO 字段值
BO 描述
0000y 减量 CTR; 然后分支 (如果减量 CTR 不是 0 且条件为 False)。
0001y 减少 CTR; 然后分支 (如果已减少的 CTR 为 0 且条件为 False)。
001zy 分支 (如果条件为 False)。
0100y 减小 CTR; 然后分支 (如果已减小的 CTR 的位不是 0 且条件为 True)。
0101y 递减 CTR; 然后分支 (如果递减 CTR 为 0 且条件为 True)。
011zy 条件为 True 时进行分支。
1z00y 减小 CTR; 然后分支 (如果已减小的 CTR 不是 0)。
1z01y 减小 CTR; 然后分支 (如果已减小的 CTR 为 0)。
1z1zz 总是分支。
在 PowerPC® 体系结构中,位如下所示:
  • z 位表示必须为 0 的位。 如果位不是 0 ,那么指令格式无效。
  • y 位提供有关是否可能采用条件分支的提示。 此位的值可以是 0 或 1。 缺省值为 0。

在 POWER ® 系列架构中, z 和 y 位可以是 0 或 1。

下面简要描述了使用 V2.00 编码的 BO 字段的编码:

表 2。 使用 V2.00 编码的 BO 字段值
BO 描述
0000z 减量 CTR; 然后分支 (如果减量 CTR 不是 0 且条件为 False)。
0001z 减少 CTR; 然后分支 (如果已减少的 CTR 为 0 且条件为 False)。
001at 分支 (如果条件为 False)。
0100z 减小 CTR; 然后分支 (如果已减小的 CTR 的位不是 0 且条件为 True)。
0101z 递减 CTR; 然后分支 (如果递减 CTR 为 0 且条件为 True)。
011at 条件为 True 时进行分支。
1a00t 减小 CTR; 然后分支 (如果已减小的 CTR 不是 0)。
1a01t 减小 CTR; 然后分支 (如果已减小的 CTR 为 0)。
1z1zz 总是分支。

BO 字段的 at 位可由软件用于提供关于是否可能采用分支的提示,如下所示:

描述
at Hint
00 未提供任何提示。
01 已预留
10 支部很可能不拿。
11 支很可能。

参数

描述
目标地址 指定目标地址。 对于绝对分支 (例如 bcabcla) ,目标地址可以是可包含在 16 位中的即时数据。
BI 指定条件比较的条件寄存器中的位。
BO 指定指令中使用的 "分支选项" 字段。

示例

以下代码将分支到依赖于 "盘点寄存器" 中的值的目标地址:


addi 8,0,3
# Loads GPR 8 with 0x3.
mtctr 8
# The Count Register (CTR) equals 0x3.
addic. 9,8,0x1
# Adds one to GPR 8 and places the result in GPR 9.
# The Condition Register records a comparison against zero
# with the result.
bc 0xC,0,there
# Branch is taken if condition is true. 0 indicates that
# the 0 bit in the Condition Register is checked to
# determine if it is set (the LT bit is on). If it is set,
# the branch is taken.
bcl 0x8,2,there
# CTR is decremented by one, becomming 2.
# The branch is taken if CTR is not equal to 0 and CTR bit 2
# is set (the EQ bit is on).
# The Link Register contains address of next instruction.