[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 1. SEQ, SNE, SPL & SMI 指令

注意:本文经过原作者授权转译,转载请标明出处

原文地址:http://mrjester.hapisan.com/04_MC68/Sect07Part01/Index.html

条件允许建议阅读原文,网上非中文资料还是较多,当作锻炼英文岂不美哉
翻译若有不足之处欢迎批评指正

译文:


"自尊是人类最大的弱点,因为它是有条件的" ---- 阿尔伯特 艾利斯 (Albert Ellis, 1913-2007),美国临床心理学家

简介

这些S**指令和那些有条件分支指令差不多,它们都根据类似的条件来执行动作。不同之处在于,它们不会去分支跳转,而是会把目的操作数中的都设置成1或是擦除成0

SEQ 指令

SEQ (Set on EQual) - 相等时置1

Z (零结果) 状态标志会被检测,如果是1的话,目的操作数会被置为1 (%11111111),如果Z0的话,目的操作数会被置0 (%00000000)

例子

这是个简单的例子:

    tst.l      d0
    seq.b      d1

TST指令会去检查d0的内容是不是0,检查的长度是长字

  • 如果d0的内容是00000000,那么Z会被设置为1,于是SEQ指令就会把d1的内容设置为000000FF
  • 如果d0的内容不是00000000,那么Z会被设置为0,于是SEQ指令就会把d1的内容设置为00000000

真是再简单不过了

SNE 指令

SNE (Set on Not Equal) - 不相等时置1

Z (零结果) 状态标志会被检测,如果是1的话,目的操作数会被置为0 (%00000000),如果Z0的话,目的操作数会被置1 (%11111111)

例子

    tst.l      d0
    sne.b      d1

TST指令会去检查d0的内容是不是0,检查的长度是长字

  • 如果d0的内容是00000000,那么Z会被设置为1,于是SNE指令就会把d1的内容设置为00000000
  • 如果d0的内容不是00000000,那么Z会被设置为0,于是SNE指令就会把d1的内容设置为000000FF

SEQ差不多是反过来的

SPL 指令

SPL (Set on PLus) - 非负结果时置1

N (负结果) 状态标志会被检测,如果是1的话,目的操作数会被置为0 (%00000000),如果N0的话,目的操作数会被置1 (%11111111)

例子

    tst.b      d0
    spl.b      d1

TST指令会去检查d0的内容是正还是负,检查的长度是字节

  • 如果d0的内容是在007F (正数) 之间,那么N会被设置为0,于是SPL指令就会把d1的内容设置为000000FF
  • 如果d0的内容是在80FF (负数) 之间,那么N会被设置为1,于是SPL指令就会把d1的内容设置为00000000

SMI 指令

SMI (Set on MInus) - 负结果时置1

N (负结果) 状态标志会被检测,如果是1的话,目的操作数会被置为1 (%11111111),如果N0的话,目的操作数会被置0 (%00000000)

例子

    tst.b      d0
    smi.b      d1

TST指令会去检查d0的内容是正还是负,检查的长度是字节

  • 如果d0的内容是在007F (正数) 之间,那么N会被设置为0,于是SMI指令就会把d1的内容设置为00000000
  • 如果d0的内容是在80FF (负数) 之间,那么N会被设置为1,于是SMI指令就会把d1的内容设置为000000FF

它和SPL也是反过来的

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 8. 家庭作业答案 - 5
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 2. SVC, SVS, ST & SF 指令

posted @ 2020-03-20 09:37  草帽过客  阅读(515)  评论(0编辑  收藏  举报