所以我对进位标记的工作原理有些困惑,特别是在68000处理器上(但可能没关系)。进位标记如何在68000上工作?
我的主要问题如下:
move.b (a0),d0
moveq #7,d1
cmp.b d1,d0
bcc.s DATAErr3
显然在A0字节被复制到D0,然后D0正在相比7.不过,有一个分支DATAErr3如果进标志已设置(“密件抄送”)。在这个操作中,D0的值是什么会导致进位标志被设置?什么值会导致它不被设置?
谢谢!
所以我对进位标记的工作原理有些困惑,特别是在68000处理器上(但可能没关系)。进位标记如何在68000上工作?
我的主要问题如下:
move.b (a0),d0
moveq #7,d1
cmp.b d1,d0
bcc.s DATAErr3
显然在A0字节被复制到D0,然后D0正在相比7.不过,有一个分支DATAErr3如果进标志已设置(“密件抄送”)。在这个操作中,D0的值是什么会导致进位标志被设置?什么值会导致它不被设置?
谢谢!
BCC分支如果d0 >= d1
,在无符号比较。在这种情况下,如果d0
大于或等于7,或者为负,则BCC指令将分支。
正如你可能知道,cmp
实际上是一种减法,但没有更新的目标。对于68000汇编语法,目标始终位于右侧。因此,cmp.b d1,d0
命令从存储在d0中的字节中减去存储在d1中的字节,然后丢弃结果,但根据该操作更新标志。
进位标志是根据寄存器中的无符号值设置的。
因此,如果d0.b
包含从0到6的任何值,则从0..6减去7将产生借位并设置进位标志。 bcc.s
将不是分支。 当d0.b
是从7到255的任何值时,进位将被清零并且bcc.s
将分支。
看待bcc
和bcs
另一种方法是:
blo
= bcs
bhs
= bcc
即bcc
相当于无符号“高于或相同”条件,并且blo
为无符号“低于”
非常感谢,我非常感谢。 – AriX 2011-06-02 03:47:02