[轉譯][馬基 傑斯特(MarkeyJester) 摩托羅拉68000 入門教程] 陸 - 條件分支 | 6. 有符號比較分支 (BGE, BGT, BLE, BLT)


注意:本文經過原作者授權轉譯,轉載請標明出處

原文地址:http://mrjester.hapisan.com/04_MC68/Sect06Part06/Index.html

條件允許建議閱讀原文,網上非中文資料還是較多,當作鍛煉英文豈不美哉
翻譯若有不足之處歡迎批評指正

譯文:


"誠信是美德的一部分也是社會中極為重要的一部分" ---- 托馬斯 傑斐遜 (Thomas Jefferson, 1743-1826),美國第三任總統

簡介

這些分支指令會在某個數值大於或是小於一個特定的值的時候去分支跳轉。它們只和有符號數打交道,也就是說如果使用的是字節長度的話,80是最小值,而7F是最大值

所以如果我們比較FE02的話,FE會被認為比02要小

BGE 指令

BGE (Branch on Greater than or Equal) - 大於等於 (≥) 時分支

如果下面的條件中任何一個滿足的話,目的操作數會被加到PC里,然后 m68k 會在PC里的新的地址處繼續執行:

  1. NV狀態標志內容都是0
  2. NV狀態標志內容都是1

否則的話,這條指令會被忽略

例子

這條指令通過NV兩個狀態標志一起來檢測計算結果是不是大於等於 (≥):

    cmpi.w     #$0020, d0
    bge.s      Is20orHigher
    move.w     #$0000, d0

  Is20orHigher:

我們假定d0的內容是00009800CMP指令使用的長度是,所以會在00209800之間比較

  • 9800並不大於等於0020,所以指令會被忽略

如果我們假設d0的內容是00000492CMP指令使用的長度是,所以會在00200492之間比較

  • 0492大於0020,所以 m68k 會跳轉到Is20orHigher處繼續執行

BGT 指令

BGT (Branch on Greater Than) - 大於 (>) 時分支

如果下面的條件中任何一個滿足的話,目的操作數會被加到PC里,然后 m68k 會在PC里的新的地址處繼續執行:

  1. ZNV的內容全都是0
  2. Z的內容是0並且NV的內容都是1

否則的話,這條指令會被忽略

例子

這條指令通過ZNV三個狀態標志一起來檢測計算結果是不是大於 (>):

    cmpi.w     #$0020, d0
    bgt.s      IsHigher
    move.w     #$0000, d0

  IsHigher:

我們假定d0的內容是00000020CMP指令使用的長度是,所以會在00200020之間比較

  • 0020等於0020,所以指令會被忽略

如果我們假設d0的內容是00000492CMP指令使用的長度是,所以會在00200492之間比較

  • 0492大於0020,所以 m68k 會跳轉到IsHigher處繼續執行

BLE 指令

BLE (Branch on Less than or Equal) - 小於等於 (≤) 時分支

如果下面的條件中任何一個滿足的話,目的操作數會被加到PC里,然后 m68k 會在PC里的新的地址處繼續執行:

  1. Z的內容是0
  2. N的內容是0並且V的內容是1
  3. N的內容是1並且V的內容是0

否則的話,這條指令會被忽略

例子

這條指令和BGE恰恰相反:

    cmpi.w     #$0020, d0
    ble.s      Is20orLower
    move.w     #$0000, d0

  Is20orLower:

我們假定d0的內容是00009800CMP指令使用的長度是,所以會在00209800之間比較

  • 9800小於0020,所以 m68k 會跳轉到Is20orLower處繼續執行

如果我們假設d0的內容是00000492CMP指令使用的長度是,所以會在00200492之間比較

  • 0492並不小於等於0020,所以指令會被忽略

BLT 指令

BLT (Branch on Less Than) - 小於 (<) 時分支

如果下面的條件中任何一個滿足的話,目的操作數會被加到PC里,然后 m68k 會在PC里的新的地址處繼續執行:

  1. N的內容是0並且V的內容是1
  2. N的內容是1並且V的內容是0

否則的話,這條指令會被忽略

例子

這條指令和BGT恰恰相反:

    cmpi.w     #$0020, d0
    blt.s      IsLower
    move.w     #$0000, d0

  IsLower:

我們假定d0的內容是00000020CMP指令使用的長度是,所以會在00200020之間比較

  • 0020等於0020,所以指令會被忽略

如果我們假設d0的內容是00008492CMP指令使用的長度是,所以會在00208492之間比較

  • 8492小於0020,所以 m68k 會跳轉到IsLower處繼續執行

目錄
上一篇:[轉譯][馬基 傑斯特(MarkeyJester) 摩托羅拉68000 入門教程] 陸 - 條件分支 | 5. BVC & BVS (溢出條件分支) 指令
下一篇:[轉譯][馬基 傑斯特(MarkeyJester) 摩托羅拉68000 入門教程] 陸 - 條件分支 | 7. 無符號比較分支 (BCC, BHI, BLS, BCS)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM