• [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒


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

    原文地址: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的内容是00000098CMP指令使用的长度是字节,所以会在2098之间比较

    • 98大于20C会被擦除为0,所以d1的内容会被修改为 000000FF

    如果我们假设d0的内容是0000001FCMP指令使用的长度是字节,所以会在201F之间比较

    • 1F并不大于等于20C会被设置为1,所以d1的内容会被修改为 00000000

    你也可以使用助记符SHS (Set on Higher than or Same, 大于或相同时置1) 来代替SCC,它们的效果是一样的,SHSSCC更容易根据它的具体意思来让人记住,汇编程序会自动的把SHS转换成SCC

    SHI 指令

    SHI (Set on HIghter than) - 大于 (>) 时置1

    如果CZ的内容都是0的话,目的操作数会被置为1 (%11111111),否则,目的操作数会被置0 (%00000000)

    例子

    这条指令通过CZ两个状态标志一起来检测计算结果是不是大于 (>):

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

    我们假定d0的内容是00000020CMP指令使用的长度是,所以会在00200020之间比较

    • 0020等于0020,所以d1的内容会被修改为 00000000

    如果我们假设d0的内容是0000F492CMP指令使用的长度是,所以会在0020F492之间比较

    • F492大于0020,所以d1的内容会被修改为 000000FF

    SLS 指令

    SLS (Set on Less than or Same) - 小于等于 (≤) 时置1

    如果CZ的内容都是1的话,目的操作数会被置为1 (%11111111),否则,目的操作数会被置0 (%00000000)

    例子

    这条指令和SCC (SHS) 恰恰相反:

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

    我们假定d0的内容是00009800CMP指令使用的长度是,所以会在00209800之间比较

    • 9800并不小于等于0020,所以d1的内容会被修改为 00000000

    如果我们假设d0的内容是00000001CMP指令使用的长度是,所以会在00200001之间比较

    • 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的内容是00000098CMP指令使用的长度是字节,所以会在2098之间比较

    • 98大于20,所以d1的内容会被修改为 00000000

    如果我们假设d0的内容是0000001FCMP指令使用的长度是字节,所以会在1F04之间比较

    • 1F小于20,所以d1的内容会被修改为 000000FF

    你也可以使用助记符SLO (Set on LOwer, 大于或相同时置1) 来代替SCS,它们的效果是一样的,SLOSCS更容易根据它的具体意思来让人记住,汇编程序会自动的把SLO转换成SCS

    SHS 和 SLO

    SHSSLO是分别对应于SCCSCS的一对助记符,值得注意的是,SHSSCC是同一个指令,SLOSCS也是同一个指令,只是名字不同而已

    别的例子

    你可能看到了这些指令都是用在数据寄存器上的,事实上目的操作数可以有其他一些形式:

        st.b       (a0)
        st.b       (a0)+
        st.b       -(a0)
        st.b       $00200000

    由于这些指令只能使用字节长度,所以它们不能直接用到地址寄存器上:

        st.b       a0    

    完结撒花???!!!(滑稽

    目录
    上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 柒 - 条件指令及其他 | 3. 有符号比较设置 (SGE, SGT, SLE, SLT)
    下一篇

  • 相关阅读:
    springboot2 整合雪花算法,并兼容分布式部署
    docker 在 linux 搭建私有仓库
    jdbc 几种关系型数据库的连接 和 driver_class,以及简单的使用
    springboot2 整合发送邮件的功能
    oracle 唯一新约束 和 逻辑删除的 冲突处理办法
    oracle 一些常见操作方法
    spring-cloud-stream 整合 rabbitmq
    springboot2 整合 rabbitmq
    docker 安装 rabbitmq 消息队列
    网络统计学目录
  • 原文地址:https://www.cnblogs.com/strawhatboy/p/12552857.html
Copyright © 2020-2023  润新知