[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 4. 无符号比较设置 (SCC, SHI, SLS, SCS)
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect07Part04/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"真正的艺术家总是紧紧盯着神明,然后悄悄地偷走她的智慧结晶" ---- 托马斯 伊肯斯 (Thomas Eakins, 1844-1916),美国学院派现实主义画家、美术教育家
简介
这四个S**
指令会根据无符号的运算结果设置或是擦除目标操作数
,有点类似BCC, BHI, BLS 和 BCS
指令
SCC 指令
SCC (Set on Carry Clear) - 大于等于 (≥) 时置1
如果C
的内容是0
的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000)
例子
这条指令通过C
状态标志是否是0
来检测计算结果是不是大于等于 (≥),有趣的是当C
的内容是0
的时候,计算结果总是"大于等于":
cmpi.b #$20, d0
scc.b d1
我们假定d0
的内容是00000098
,CMP
指令使用的长度是字节
,所以会在20
与98
之间比较
98
大于20
,C
会被擦除为0
,所以d1
的内容会被修改为 000000FF
如果我们假设d0
的内容是0000001F
,CMP
指令使用的长度是字节
,所以会在20
与1F
之间比较
1F
并不大于等于20
,C
会被设置为1
,所以d1
的内容会被修改为 00000000
你也可以使用助记符
SHS
(Set on Higher than or Same, 大于或相同时置1
) 来代替SCC
,它们的效果是一样的,SHS
比SCC
更容易根据它的具体意思来让人记住,汇编程序会自动的把SHS
转换成SCC
SHI 指令
SHI (Set on HIghter than) - 大于 (>) 时置1
如果C
和Z
的内容都是0
的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000)
例子
这条指令通过C
和Z
两个状态标志一起来检测计算结果是不是大于 (>):
cmpi.w #$0020, d0
shi.b d1
我们假定d0
的内容是00000020
,CMP
指令使用的长度是字
,所以会在0020
与0020
之间比较
0020
等于0020
,所以d1
的内容会被修改为 00000000
如果我们假设d0
的内容是0000F492
,CMP
指令使用的长度是字
,所以会在0020
与F492
之间比较
F492
大于0020
,所以d1
的内容会被修改为 000000FF
SLS 指令
SLS (Set on Less than or Same) - 小于等于 (≤) 时置1
如果C
和Z
的内容都是1
的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000)
例子
这条指令和SCC
(SHS
) 恰恰相反:
cmpi.w #$0020, d0
sls.b d1
我们假定d0
的内容是00009800
,CMP
指令使用的长度是字
,所以会在0020
与9800
之间比较
9800
并不小于等于0020
,所以d1
的内容会被修改为 00000000
如果我们假设d0
的内容是00000001
,CMP
指令使用的长度是字
,所以会在0020
与0001
之间比较
0001
小于0020
,所以d1
的内容会被修改为 000000FF
SCS 指令
SCS (Set on Carry Set) - 小于 (<) 时置1
如果C
状态标志是1
的话,目的操作数
会被置为1
(%11111111),否则,目的操作数
会被置0
(%00000000)
例子
这条指令和SCC
恰恰相反:
cmpi.b #$20, d0
scs.b d1
我们假定d0
的内容是00000098
,CMP
指令使用的长度是字节
,所以会在20
与98
之间比较
98
大于20
,所以d1
的内容会被修改为 00000000
如果我们假设d0
的内容是0000001F
,CMP
指令使用的长度是字节
,所以会在1F
与04
之间比较
1F
小于20
,所以d1
的内容会被修改为 000000FF
你也可以使用助记符
SLO
(Set on LOwer, 大于或相同时置1
) 来代替SCS
,它们的效果是一样的,SLO
比SCS
更容易根据它的具体意思来让人记住,汇编程序会自动的把SLO
转换成SCS
SHS 和 SLO
SHS
和SLO
是分别对应于SCC
和SCS
的一对助记符,值得注意的是,SHS
和SCC
是同一个指令,SLO
和SCS
也是同一个指令,只是名字不同而已
别的例子
你可能看到了这些指令都是用在数据寄存器
上的,事实上目的操作数
可以有其他一些形式:
st.b (a0)
st.b (a0)+
st.b -(a0)
st.b $00200000
由于这些指令只能使用
字节
长度,所以它们不能直接用到地址寄存器
上:
st.b a0 ✖
完结撒花???!!!(滑稽
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 3. 有符号比较设置 (SGE, SGT, SLE, SLT)
下一篇