首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >汇编语言ccr学习汇编语言问题

汇编语言ccr学习汇编语言问题
EN

Stack Overflow用户
提问于 2011-02-17 12:43:19
回答 1查看 440关注 0票数 0

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

代码语言:javascript
运行
复制
*    

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是由标志位组成的,但我不确定该怎么做。

EN

回答 1

Stack Overflow用户

发布于 2011-02-17 17:47:55

这个循环相当于下面的C代码:

代码语言:javascript
运行
复制
char *byte = data;
char cur, max = 0;

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

也就是说,循环将始终迭代所有值,并在找到末尾的零时终止。这意味着当您点击EXIT时,您已经通过了BEQ EXIT检查,该检查测试了上一次加载的结果,并发现它为零。CCR将为0x??04,即仅设置Z,零标志,因为这是BEQ检查的内容。

BLE测试而言,这是对标志的复杂检查;根据Motorola's 68k reference manual的表3.19,它测试Z || (N && !V) || (!N && V),即N / V或0(这将是相等的部分)的互斥,因此标志的几个组合可能导致采用该分支。对于您的特定数据,我假设,如果前面的值是12,那么您最终将得到N集,即0x??08的CCR值(在大多数CPU上,CMP执行减法和丢弃,12-13是负数)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5025129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档