汇编语言ccr麻烦学习汇编

时间:2011-02-17 04:43:19

标签: assembly ccr

他提出了这些问题 一个。 13显然是样本集中最大的数据。在将13存储在D0之后,当将另一个数字与其进行比较时,CCR的状态是什么(仅给出5位并指示触发了哪些位)。 湾在最后一条数据(0)移入D1寄存器后,CCR的状态是什么。

*    

ORG $400  
MOVEA.L #DATA,A0  
CLR.B   D0  
NEXT    MOVE.B (A0),D1  
BEQ EXIT  
CMP.B   D0,D1  
BLE EndTest  
MOVE.B  D1,D0  
EndTest ADDA.L  #1,A0  
BRA NEXT    
EXIT    STOP    #$2700  
*         
ORG $1000  
Data    DC.B    12,13,5,6,4,8,4,10,0      
END $400      

我编译了它,但我在easy68k中看不到5位。我知道ccr是由标志位组成的,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

此循环等效于以下C代码:

char *byte = data;
char cur, max = 0;

while ((cur = *byte++))
    if (cur > max) max = cur;

即。循环将始终遍历所有值,并在结束时找到零时终止。这意味着当您点击EXIT时,您已经完成了BEQ EXIT检查,该检查测试了之前加载的结果并发现它为零。 CCR将是0x ?? 04,即只有Z,零标志设置,就像BEQ检查的那样。

BLE测试而言,这是对标志的复杂检查;根据{{​​3}}表3.19,它测试Z || (N && !V) || (!N && V),即N / V的互斥性或零(即相等 part),因此标志的几种组合可能导致该分支被采用。对于您的特定数据,我认为,如果前一个值为12,您将最终得到N集,即大多数CPU上的0x??08CMP的CCR值减去丢弃,12-13是负数。

关于m68k汇编,Motorola's 68k reference manual是一个很好的介绍。它描述了条件分支/ CCR标志测试,但遗漏了上面的棘手问题......