1

所以我对进位标志的工作原理有点困惑,特别是在 68000 处理器上(但这可能无关紧要)。

我的主要问题如下:

move.b (a0),d0
moveq #7,d1
cmp.b d1,d0
bcc.s DATAErr3

显然,A0 处的字节被复制到 D0,然后 D0 与 7 进行比较。但是,如果设置了进位标志(“bcc”),则有一个到 DATAErr3 的分支。在这个操作中,D0 的什么值会导致进位标志被设置?什么值会导致它不被设置?

谢谢!

4

3 回答 3

3

d0 >= d1如果,在无符号比较中, BCC 会分支。d0在这种情况下,如果大于等于 7,或者为负数,BCC 指令就会跳转。

http://www.easy68k.com/paulrsm/doc/trick68k.htm

于 2011-06-02T03:22:00.690 回答
2

您可能知道,cmp实际上是减法,但没有更新目标。对于 68000 汇编语法,destination 总是在右边。因此cmp.b d1,d0命令从 d0 中存储的字节中减去 d1 中存储的字节,然后丢弃结果,但根据该操作更新标志。
进位标志是根据寄存器中的无符号值设置的。
因此,如果d0.b包含从 0 到 6 的任何值,则从 0..6 中减去 7 将生成借位并设置进位标志。bcc.s不会分支。当d0.b从 7 到 255 时,进位将被清除并bcc.s分支。

于 2014-11-10T17:22:20.603 回答
0

另一种看待bccand的方式bcs是:

  • blo=bcs
  • bhs=bcc

bcc相当于无符号“高于或相同”条件和blo无符号“低于”

于 2018-01-14T01:00:55.363 回答