zoukankan      html  css  js  c++  java
  • [转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆

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

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

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

    译文:


    "物极必反" ---- 莎士比亚

    简介

    这两个条件分支指令会根据V状态标志的内容来做分支。

    注意:这些分支指令只有两种长度可以使用,.s表示短整型.w表示,具体可回看第五章第三节(BRA指令)的内容

    BVC 指令

    BVC (Branch on oVerflow Clear) - 无溢出时分支

    如果CCR里的V状态标志是0的话,目的操作数会被加到PC里,然后 m68k 会从PC里的新的地址处继续执行,如果V状态标志是1的话,这条指令就会被忽略

    例子

    这是一个基于结果是不是溢出的例子:

        cmpi.w     #$0020, d0
        bvc.s      FlagVIsClear
        move.w     #$0000, d0

      FlagVIsClear:

    我们假设d0在指令执行前的内容是2400801ECMP指令使用的长度是,所以只有801E会被用来计算。801E - 0020 = 7FFE,因为我们是在用一个负数去减去一个正数,所以结果应当是个负数,但是由于有符号数的表示范围问题,结果却是个正数 (溢出了表示范围),所以V状态标志会被设置为1,然后 m68k 不会跳转到 "FlagNIsClear"

    • 假如V状态标志被设置为1,那么分支跳转就会被忽略
    • 假如V状态标志被清除为0,那么 m68k 就会去分支跳转到对应的标记

    BVS 指令

    BVS (Branch on oVerflow Set) - 溢出时分支

    如果CCR里的V状态标志是1的话,目的操作数会被加到PC里,然后 m68k 会从PC里的新的地址处继续执行,如果V状态标志是0的话,这条指令就会被忽略

    例子

    这是与BVC恰恰相反的例子:

        cmpi.w     #$0020, d0
        bvs.s      FlagVIsSet
        move.w     #$0000, d0

      FlagVIsSet:

    我们假设d0在指令执行前的内容是2400801ECMP指令使用的长度是,所以只有801E会被用来计算。801E - 0020 = 7FFE,因为我们是在用一个负数去减去一个正数,所以结果应当是个负数,但是由于有符号数的表示范围问题,结果却是个正数 (溢出了表示范围),所以V状态标志会被设置为1,然后 m68k 跳转到 "FlagNIsClear"继续执行

    • 假如V状态标志被设置为1,那么 m68k 就会去分支跳转到对应的标记
    • 假如V状态标志被清除为0,那么分支跳转就会被忽略

    目录
    上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 4. BPL & BMI (正负条件分支) 指令
    下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 6. 有符号比较分支 (BGE, BGT, BLE, BLT)

  • 相关阅读:
    leetcode211
    leetcode209
    leetcode201
    leetcode1396
    leetcode1395
    leetcode1394
    leetcode1386
    leetcode1387
    leetcode1382
    leetcode1376
  • 原文地址:https://www.cnblogs.com/strawhatboy/p/12501993.html
Copyright © 2011-2022 走看看