进位标志如何在68000上运行?

时间:2011-06-02 02:47:53

标签: assembly 68000

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

我的主要问题如下:

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

查看bccbcs的另一种方式是:

  • blo = bcs
  • bhs = bcc

即。 bcc相当于无符号“高于或相同”条件,blo等同于无符号“低于”