[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 3. 有符号比较设置 (SGE, SGT, SLE, SLT)
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect07Part03/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"和平不代表着没有冲突。因为对立,分化和冲突是自然的规律" (对立统一规律 (雾) ---- 布莱恩特 麦吉尔 (Bryant McGill)
简介
这四个S**
指令会根据有符号的运算结果设置或是擦除目标操作数
,有点类似BGE, BGT, BLE 和 BLT
指令
SGE 指令
SGE (Set on Greater than or Equal) - 大于等于 (≥) 时设置为1
这条指令会去检查N
(负结果) 和 V
(溢出) 两个状态标志,如果它们同时是1
或者同时是0
,那么目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000)
例子
这条指令通过N
和V
两个状态标志一起来检测计算结果是不是大于等于 (≥):
cmpi.w #$0020, d0
sge.b d1
我们假定d0
的内容是00009800
,CMP
指令使用的长度是字
,所以会在0020
与9800
之间比较
9800
并不大于等于0020
,V
会被擦除成0
,而N
会被设置为1
,所以SGE
指令会把d1
的内容修改为 00000000
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
大于0020
,所以V
和N
都会被擦除成0
,SGE
指令会把d1
的内容修改为 000000FF
SGT 指令
SGT (Set on Greater Than) - 大于 (>) 时设置为1
如果下面的条件中任何一个满足的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000):
Z
,N
和V
的内容全都是0
Z
的内容是0
并且N
和V
的内容都是1
例子
这条指令通过Z
,N
和V
三个状态标志一起来检测计算结果是不是大于 (>):
cmpi.w #$0020, d0
sgt.b d1
我们假定d0
的内容是00000020
,CMP
指令使用的长度是字
,所以会在0020
与0020
之间比较
0020
等于0020
,所以Z
会被设置为1
,SGT
指令会把d1
的内容修改为 00000000
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
大于0020
,Z
,V
和N
都会被擦除为0
,SGT
指令会把d1
的内容修改为 000000FF
SLE 指令
SLE (Set on Less than or Equal) - 小于等于 (≤) 时设置为1
如果下面的条件中任何一个满足的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000):
Z
的内容是0
N
的内容是0
并且V
的内容是1
N
的内容是1
并且V
的内容是0
例子
这条指令和SGE
恰恰相反:
cmpi.w #$0020, d0
sle.b d1
我们假定d0
的内容是00009800
,CMP
指令使用的长度是字
,所以会在0020
与9800
之间比较
9800
小于0020
,V
会被擦除成0
而N
会被设置为1
,SLE
指令会把d1
的内容修改为 000000FF
如果我们假设d0
的内容是00000492
,CMP
指令使用的长度是字
,所以会在0020
与0492
之间比较
0492
并不小于等于0020
,V
和N
都会被擦除为0
,SLE
指令会把d1
的内容修改为 00000000
SLT 指令
SLT (Set on Less Than) - 小于 (<) 时设置为1
如果下面的条件中任何一个满足的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000):
N
的内容是0
并且V
的内容是1
N
的内容是1
并且V
的内容是0
例子
这条指令和SGT
恰恰相反:
cmpi.w #$0020, d0
slt.b d1
我们假定d0
的内容是00000020
,CMP
指令使用的长度是字
,所以会在0020
与0020
之间比较
0020
等于0020
,V
和N
都会被擦除为0
,SLT
指令会把d1
的内容修改为 00000000
如果我们假设d0
的内容是00008492
,CMP
指令使用的长度是字
,所以会在0020
与8492
之间比较
8492
小于0020
,8492
-0020
=8472
,V
会被设置为0
,N
会被设置为1
,SLT
指令会把d1
的内容修改为 000000FF
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 2. SVC, SVS, ST & SF 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 4. 无符号比较设置 (SCC, SHI, SLS, SCS)