2011-06-02 28 views
1

所以我对进位标记的工作原理有些困惑,特别是在68000处理器上(但可能没关系)。进位标记如何在68000上工作?

我的主要问题如下:

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

显然在A0字节被复制到D0,然后D0正在相比7.不过,有一个分支DATAErr3如果进标志已设置(“密件抄送”)。在这个操作中,D0的值是什么会导致进位标志被设置?什么值会导致它不被设置?

谢谢!

回答

2

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

0

看待bccbcs另一种方法是:

  • blo = bcs
  • bhs = bcc

bcc相当于无符号“高于或相同”条件,并且blo为无符号“低于”