注意:本文经过原作者授权转译,转载请标明出处
原文地址: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
指令会去比较0020
和d0
中的一个字
:
- 如果它们相同的话,于是
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
指令会去比较0020
和d0
中的一个字
:
- 如果它们不相同的话,于是
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 (正负条件分支) 指令