[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 2. SVC, SVS, ST & SF 指令
注意:本文经过原作者授权转译,转载请标明出处
原文地址:http://mrjester.hapisan.com/04_MC68/Sect07Part02/Index.html
条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正
译文:
"一个人如果想要被别人溢出的爱浇灌的话,他要学会像海绵一样" ---- 弗里德里希 威廉 尼采 (Friedrich Wilhelm Nietzsche, 1844-1900),德国哲学家、语言学家、文化评论家、诗人、作曲家、思想家
SVC 指令
SVC (Set on oVerflow Clear) - 非溢出时置1
V
(溢出) 状态标志会被检测,如果是0
的话,目的操作数
会被置为1
(%11111111),如果V
是1
的话,目的操作数
会被置0
(%00000000)
例子
这基于计算结果是不是发生了溢出
cmpi.w #$0020, d0
svc.b d1
我们假定d0
的内容是2400801E
,CMP
指令使用的长度是字
,所以只有801E
会被拿来比较。801E
- 0020
= 7FFE
,因为我们是在用一个负数减去一个正数,结果应当是负数,但是这里结果却是个正数,与数学规则不符,所以是溢出,V
状态标志会被设置为1
- 如果
V
的内容是1
,那么SVC
指令就会把d1
的内容设置为00000000 - 如果
V
的内容是0
,那么SVC
指令就会把d1
的内容设置为000000FF
SVS 指令
SVS (Set on oVerflow Set) - 溢出时置1
V
(溢出) 状态标志会被检测,如果是1
的话,目的操作数
会被置为1
(%11111111),如果V
是0
的话,目的操作数
会被置0
(%00000000)
例子
这和SVC
指令恰恰相反
cmpi.w #$0020, d0
svs.b d1
我们假定d0
的内容是2400801E
,CMP
指令使用的长度是字
,所以只有801E
会被拿来比较。801E
- 0020
= 7FFE
,因为我们是在用一个负数减去一个正数,结果应当是负数,但是这里结果却是个正数,与数学规则不符,所以是溢出,V
状态标志会被设置为1
- 如果
V
的内容是1
,那么SVS
指令就会把d1
的内容设置为000000FF - 如果
V
的内容是0
,那么SVS
指令就会把d1
的内容设置为00000000
ST 和 SF 指令
这两条指令不会根据CCR
的状态自动的设置 (%11111111) 和清除 (%00000000) 目的操作数
,它们不是条件指令,但是它们仍旧属于S**
功能系列的指令
ST 指令
ST (Set True) - 置1
把目的操作数
置1
,这条指令不会修改CCR
的内容
例子
st.b d1
如果d1
的内容是01234567
,那么指令执行后d1
的内容会变成012345FF
SF 指令
SF (Set False) - 置0
把目的操作数
置0
,这条指令不会修改CCR
的内容
例子
sf.b d1
如果d1
的内容是01234567
,那么指令执行后d1
的内容会变成01234500
目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 1. SEQ, SNE, SPL & SMI 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 3. 有符号比较设置 (SGE, SGT, SLE, SLT)