[转译][马基 杰斯特(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),如果V1的话,目的操作数会被置0 (%00000000)

例子

这基于计算结果是不是发生了溢出

    cmpi.w     #$0020, d0
    svc.b      d1

我们假定d0的内容是2400801ECMP指令使用的长度是,所以只有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),如果V0的话,目的操作数会被置0 (%00000000)

例子

这和SVC指令恰恰相反

    cmpi.w     #$0020, d0
    svs.b      d1

我们假定d0的内容是2400801ECMP指令使用的长度是,所以只有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)

上一篇:代码思路标准流程


下一篇:learning uboot sf command