0

他给出了这些问题。13 显然是样本集中最大的一条数据。在 D0 中存储了 13 之后,当另一个数字与之比较时,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 是由标志位组成的,但我不知道该怎么做。

4

1 回答 1

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测试而言,这是对标志的复杂检查;根据摩托罗拉的 68k 参考手册表 3.19,它测试,即/或零Z || (N && !V) || (!N && V)的互斥性(这将是相等的部分),因此标志的几种组合可能会导致该分支被采用。对于您的具体数据,我会假设,鉴于之前的值为 12,您最终会得到set,即 CCR 值为(在大多数 CPU 上进行减法丢弃,而 12-13 为负数)。NVN0x??08CMP

关于 m68k 汇编,这本 wikibook是一个很好的介绍。它描述了条件分支/ CCR 标志测试,但忽略了上面的棘手位......

于 2011-02-17T09:47:55.497 回答