跳转到内容

360 汇编/360 指令/BCTR

来自维基教科书,开放书籍,开放世界

BC - 按计数分支 - RX 类型指令 - 操作码 46

 BCTR 2,4
 BCTR 15,3
 BCTR 7,8
 BCTR 1,0 - Value in register 1 is decremented, but no branch will occur

操作码

[编辑 | 编辑源代码]
RR 指令(2 字节)
字节 1
位 (0-7)
字节 2
目标寄存器
(8-11)
分支寄存器
(12-15)
(以十六进制) 操作码
06
(4 位)
0..F / (十进制 0..15)
(4 位)
0..F / (十进制 0..15)
  • 第一个参数是目标寄存器,其值受指令影响。
  • 第二个参数是分支寄存器,其内容将用作要转移到的位置(如果参数不为零)。
  • 目标寄存器分支寄存器的值为 0 到 15。


示例用法

[编辑 | 编辑源代码]
BCTR 1,9

可用性

[编辑 | 编辑源代码]

BCTR 指令在所有型号上都可用。

指令目的

[编辑 | 编辑源代码]

BCTR 指令从第一个参数中指定的 target 寄存器的值中减去 1。如果减法后 target 寄存器中的值为零(或 branch 寄存器为 0),则不发生分支。否则,程序将分支到第二个参数中指定的 branch 寄存器中包含的地址。请注意,如果减法之前 target 寄存器中的结果为 0,则结果为负 1,并且会发生分支(除非 branch 寄存器为 0)。如果 target 寄存器中的值为最小可能值,则发生的溢出将被忽略,target 寄存器中的结果为最大可能值,并且会发生分支(除非 branch 寄存器为 0)。BCTR 0,0 指令等效于将寄存器 0 减 1。

典型用法

[编辑 | 编辑源代码]

要执行循环语句,其中从 target 寄存器中包含的值中减去 1,如果结果不为 0,则应分支到 branch 寄存器中包含的地址。

作为第一个参数指定的寄存器中包含的值减少 1。如果 branch 寄存器为 0,或者减去 target 寄存器中值的后的值为 0,则执行将继续执行此指令后的指令。否则,执行将转移到作为第二个参数指定的寄存器中包含的地址。

条件码

[编辑 | 编辑源代码]

条件码不会改变。如果值为最小可能值并且溢出到最大值,则会忽略它。

异常和故障

[编辑 | 编辑源代码]
  • branch 寄存器中包含的目标地址不能为奇数,否则会发生操作异常
  • branch 寄存器中包含的目标地址必须在有效内存范围内,否则会发生操作异常。
  • 目标地址的存储密钥必须与当前进程相同(或者此进程的密钥必须为 0),否则会发生内存保护违反异常。


替代分支指令

[编辑 | 编辑源代码]
  • BCT指令提供相同的功能,但分支地址以索引基址-位移格式指定。
上一个指令
BCR
360 汇编指令   下一个指令
BCTG
上一个操作码
45
下一个操作码
47
360 汇编语言
360 系列 介绍 · 基本常见问题解答 · 360 系列 · 360 架构
360 指令集 360 指令 · 分支指令 · 数据传输指令 · 控制流指令 · 算术指令 · 逻辑指令 · 移位和旋转指令 · 特权指令 · 其他指令
语法和汇编器 360 汇编器· 伪指令
指令扩展 浮点数 · 高级语言


华夏公益教科书