[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 3. BEQ & BNE (相等条件分支) 指令

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

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

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

译文:


子曰:"君子耻其言而过其行"

简介

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

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

BEQ 指令

BEQ (Branch on EQual) - 相等时分支

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

例子

你已经见到这个例子很多次了,很简单:

    cmpi.w     #$0020, d0
    beq.s      FlagZIsSet
    move.b     #$0000, d0

  FlagZIsSet:

第一条CMP指令会去比较0020d0中的一个

  • 如果它们相同的话,于是Z状态标志就会被设置为1,然后 m68k 会分支到FlagZIsSet处继续执行
  • 如果它们不相同的话,Z状态标志会被擦除成0,然后 m68k 会忽视这条分支指令,然后直接执行下一条指令 "move.w #$0000, d0"

BEQ只会在Z状态标志内容是1的时候分支,如果它是擦除状态0,它会忽视分支操作而继续执行

BNE 指令

BNE (Branch on Not Equal) - 不相等时分支

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

例子

这和BEQ刚好是反过来的:

    cmpi.w     #$0020, d0
    bne.s      FlagZIsClear
    move.b     #$0000, d0

  FlagZIsClear:

第一条CMP指令会去比较0020d0中的一个

  • 如果它们不相同的话,于是Z状态标志就会被擦除为0,然后 m68k 会分支到FlagZIsClear处继续执行
  • 如果它们相同的话,Z状态标志会被设置成1,然后 m68k 会忽视这条分支指令,然后直接执行下一条指令 "move.w #$0000, d0"

BNE只会在Z状态标志内容是0的时候分支,如果它是设置状态1,它会忽视分支操作而继续执行

目录
上一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 2. CMP, TST & BTST (测试) 指令
下一篇:[转译][马基 杰斯特(MarkeyJester) 摩托罗拉68000 入门教程] 陆 - 条件分支 | 4. BPL & BMI (正负条件分支) 指令

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