所以我对进位标志如何工作有点困惑,特别是在68000处理器上(但可能无关紧要)。
我的主要问题如下:
move.b (a0),d0
moveq #7,d1
cmp.b d1,d0
bcc.s DATAErr3
显然,A0处的字节被复制到D0,然后D0被比较为7.但是,如果进位标志被置位(“bcc”),则有一个分支到DATAErr3。在此操作中,D0的哪些值会导致进位标志被设置?什么值会导致它不被设置?
谢谢!
答案 0 :(得分:3)
BCC分支d0 >= d1
,无符号比较。在这种情况下,如果d0
大于或等于7,则BCC指令将分支,或者为负。
答案 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)
查看bcc
和bcs
的另一种方式是:
blo
= bcs
bhs
= bcc
即。 bcc
相当于无符号“高于或相同”条件,blo
等同于无符号“低于”