Assembly 汇编语言故障学习汇编

Assembly 汇编语言故障学习汇编,assembly,ccr,Assembly,Ccr,他提出了这些问题 A.13显然是样本集中最大的数据块。在D0中存储13之后,当将另一个数字与之进行比较时,CCR的状态是什么(只需给出5位并指示触发了哪些位)。 B将最后一段数据(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 EndTes

他提出了这些问题 A.13显然是样本集中最大的数据块。在D0中存储13之后,当将另一个数字与之进行比较时,CCR的状态是什么(只需给出5位并指示触发了哪些位)。 B将最后一段数据(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是由标志位组成的,但我不确定该怎么做。

此循环相当于以下C代码:

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

while ((cur = *byte++))
    if (cur > max) max = cur;
也就是说,循环将始终迭代所有值,并在最后找到零时终止。这意味着,当您点击
退出
时,您已经通过了
BEQ退出
检查,该检查测试了上一次加载的结果,发现结果为零。CCR将为0x×04,即仅设置了
Z
、零标志,因为这是
BEQ
检查的内容

BLE
测试而言,这是对标志的复杂检查;根据表3.19,它测试了
Z|(N&&!V)|(!N&&V)
,即
N
/
V
的互斥性或零(这将是相等的部分),因此标志的几种组合可能导致该分支被采用。对于您的特定数据,我会假设,鉴于前面的值是12,您将得到
N
集,即CCR值
0x×08
CMP
在大多数CPU上进行带丢弃的减法运算,12-13为负)

关于m68k组装,是一个很好的介绍。它描述了条件分支/CCR标志测试,但省略了上面的棘手部分