[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 6. 有符号比较分支 (BGE, BGT, BLE, BLT)
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect06Part06/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"诚信是美德的一部分也是社会中极为重要的一部分" ---- 托马斯 杰斐逊 (Thomas Jefferson, 1743-1826),美国第三任总统
简介
这些分支指令会在某个数值大于或是小于一个特定的值的时候去分支跳转。它们只和有符号数
打交道,也就是说如果使用的是字节
长度的话,80
是最小值,而7F
是最大值
所以如果我们比较FE
和02
的话,FE
会被认为比02
要小
BGE 指令
BGE (Branch on Greater than or Equal) - 大于等于 (≥) 时分支
如果下面的条件中任何一个满足的话,目的操作数
会被加到PC
里,然后 m68k 会在PC
里的新的地址处继续执行:
N
和V
状态标志内容都是0
N
和V
状态标志内容都是1
否则的话,这条指令会被忽略
例子
这条指令通过N
和V
两个状态标志一起来检测计算结果是不是大于等于 (≥):
cmpi.w #$0020, d0
bge.s Is20orHigher
move.w #$0000, d0
Is20orHigher:
我们假定d0
的内容是00009800
,CMP
指令使用的长度是字
,所以会在0020
与9800
之间比较
9800
并不大于等于0020
,所以指令会被忽略
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
大于0020
,所以 m68k 会跳转到Is20orHigher
处继续执行
BGT 指令
BGT (Branch on Greater Than) - 大于 (>) 时分支
如果下面的条件中任何一个满足的话,目的操作数
会被加到PC
里,然后 m68k 会在PC
里的新的地址处继续执行:
Z
,N
和V
的内容全都是0
Z
的内容是0
并且N
和V
的内容都是1
否则的话,这条指令会被忽略
例子
这条指令通过Z
,N
和V
三个状态标志一起来检测计算结果是不是大于 (>):
cmpi.w #$0020, d0
bgt.s IsHigher
move.w #$0000, d0
IsHigher:
我们假定d0
的内容是00000020
,CMP
指令使用的长度是字
,所以会在0020
与0020
之间比较
0020
等于0020
,所以指令会被忽略
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
大于0020
,所以 m68k 会跳转到IsHigher
处继续执行
BLE 指令
BLE (Branch on Less than or Equal) - 小于等于 (≤) 时分支
如果下面的条件中任何一个满足的话,目的操作数
会被加到PC
里,然后 m68k 会在PC
里的新的地址处继续执行:
Z
的内容是0
N
的内容是0
并且V
的内容是1
N
的内容是1
并且V
的内容是0
否则的话,这条指令会被忽略
例子
这条指令和BGE
恰恰相反:
cmpi.w #$0020, d0
ble.s Is20orLower
move.w #$0000, d0
Is20orLower:
我们假定d0
的内容是00009800
,CMP
指令使用的长度是字
,所以会在0020
与9800
之间比较
9800
小于0020
,所以 m68k 会跳转到Is20orLower
处继续执行
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
并不小于等于0020
,所以指令会被忽略
BLT 指令
BLT (Branch on Less Than) - 小于 (<) 时分支
如果下面的条件中任何一个满足的话,目的操作数
会被加到PC
里,然后 m68k 会在PC
里的新的地址处继续执行:
N
的内容是0
并且V
的内容是1
N
的内容是1
并且V
的内容是0
否则的话,这条指令会被忽略
例子
这条指令和BGT
恰恰相反:
cmpi.w #$0020, d0
blt.s IsLower
move.w #$0000, d0
IsLower:
我们假定d0
的内容是00000020
,CMP
指令使用的长度是字
,所以会在0020
与0020
之间比较
0020
等于0020
,所以指令会被忽略
如果我们假设d0
的内容是00008492
,CMP
指令使用的长度是字
,所以会在0020
与8492
之间比较
8492
小于0020
,所以 m68k 会跳转到IsLower
处继续执行
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 5. BVC & BVS (溢出条件分支) 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 7. 无符号比较分支 (BCC, BHI, BLS, BCS)