[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 4. BPL & BMI (正负条件分支) 指令

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

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

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

译文:


"记忆就像一块磁铁,它只会吸引和保留那些它能吸引的东西" ---- 杰赛明 威斯特 (Jessamyn West, 1902-1984),美国短篇小说作家

简介

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

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

BPL 指令

BPL (Branch on PLus) - 正结果时分支

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

例子

这是一个基于结果是不是正数的例子:

    cmpi.w     #$0020, d0
    bpl.s      FlagNIsClear
    move.w     #$0000, d0

  FlagNIsClear:

我们假设d0在指令执行前的内容是2400001ECMP指令使用的长度是,所以只有001E会被用来计算。001E - 0020 = FFFE,你可能注意到了结果是个负数,所以N状态标志会被擦除为0,然后 m68k 会跳转到 "FlagNIsClear"

BMI 指令

BMI (Branch on MInus) - 负结果时分支

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

例子

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

    cmpi.w     #$0020, d0
    bmi.s      FlagNIsSet
    move.w     #$0000, d0

  FlagNIsSet:

我们假设d0在指令执行前的内容是2400001ECMP指令使用的长度是,所以只有001E会被用来计算。001E - 0020 = FFFE,结果是个负数,所以N状态标志会被擦除为0,然后 m68k 会忽略这条分支指令然后继续执行下一条指令

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 3. BEQ & BNE (相等条件分支) 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 5. BVC & BVS (溢出条件分支) 指令

posted @ 2020-03-15 10:02  草帽过客  阅读(944)  评论(0编辑  收藏  举报