跳转到内容

360 汇编/360 指令/BCT

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

BCT — 按计数分支 — 操作码 46 / 十进制 70 — 4 字节 RX 指令。 


BCT  目标寄存器,偏移量 (索引寄存器,基址寄存器)
  BCT 2,LABEL
  BCT 15,106(10)
  BCT 0,256(7,6)
RX 指令 (4 字节)
字节 1 字节 2 字节 3 和 4
目标寄存器 分支地址
(十六进制) (8 位)
操作码
46
(4 位)

0..F
(4 位)
索引
寄存器

0..F
(4 位)
基址
寄存器

0..F
(12 位)
偏移量
0..FFF
  • 第一个参数是 目标寄存器,其值受指令影响。
  • 第二个参数是要分支到的地址。它包含基址寄存器、索引寄存器和偏移地址。偏移量 用作基址寄存器中值的无符号偏移,范围为 0 到 4095,该偏移量将添加到基址寄存器中包含的值。如果索引寄存器为 0,则忽略它;否则,将它的内容添加到前面的结果中以获得最终地址。
  • 基址寄存器索引寄存器 的值为 0 到 15。偏移地址为 0 到 4095。

如果使用了 USING 伪指令,并且目标地址标签(偏移量)在某个基址寄存器值所在的 4096 字节范围内,则汇编程序会自动确定目标和基址寄存器值。

可用性

[编辑源代码]

BCT 指令在所有型号上都可用,包括 360、370 和 z/System。


指令目的

[编辑 | 编辑源代码]

BCT 指令从第一个参数中指定的目标寄存器内容的值中减去 1。如果减法后目标寄存器中的值为零,则不会发生分支。否则,程序将分支到指定的地址。请注意,如果减法前目标寄存器中的结果为 0,则结果为负 1,并且会发生分支。如果减法前目标寄存器中的值为最小可能值,则结果为最大可能值,溢出会被忽略,并且会发生分支。

典型用法

[编辑 | 编辑源代码]

要执行一个循环语句,其中从目标寄存器中包含的值中减去 1,如果结果不为 0,则应该发生分支。

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

条件码

[编辑 | 编辑源代码]

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

异常和故障

[编辑 | 编辑源代码]
  • 如果要分支到的地址不在相同的 PSW 存储密钥中(除非此进程的存储密钥为 0),则会发生保护违规异常。
  • 如果要分支到的地址为奇数,则会发生地址异常。
  • 如果地址不在可用内存范围内,则会发生规范异常。

备用分支指令

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


华夏公益教科书