跳轉到內容

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 彙編器· 偽指令
指令擴充套件 浮點數 · 高階語言


華夏公益教科書