这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 十分不解的问题

共8条 1/1 1 跳转至

十分不解的问题

助工
2008-08-04 14:03:16     打赏

// reg_temp = tm0_temp - reg_temp;
此句被翻译为如下3三句:
                MOV.W     040CH,R0
                SUB.W     041EH,R0
                MOV.W     R0,041EH
其中,040CH为tm0_temp的地址,041EH为reg_temp的地址

干脆翻译为一句,为什么要3句呢???
SUB.W   040CH,041EH

用R0中转一下是什么意思啊? 

 




关键词: 十分     不解     问题    

菜鸟
2008-08-04 14:22:51     打赏
2楼

因为你理解反了:
SUB.W 04CH, 041EH  等价于 reg_temp -= tm0_temp。而不是reg_temp = tm0_temp - reg_temp!
 


助工
2008-08-04 15:56:17     打赏
3楼

汗,是啊
翻译为如下2句也不行,不等价,因为tm0_temp的值被更改了,看来真要三句了
sub.w    reg_temp,tm0_temp    ;tm0_temp -= reg_temp
mov.w    tm0_temp,reg_temp   ;reg_temp = tm0_temp

谢谢你!


菜鸟
2008-08-05 10:45:03     打赏
4楼

如果你一定要在2句内搞定,可以如下翻译:
sub.w tm0_temp, reg_temp  ;reg_temp -= tm0_temp;
neg.w reg_temp                       ;reg_temp = -reg_temp;


助工
2008-08-06 14:40:39     打赏
5楼
好办法
为什么编译器不使用这种简便的方法呢

菜鸟
2008-08-06 14:44:28     打赏
6楼
任何编译器也没法做到人那么智能呵呵

菜鸟
2008-08-06 14:55:31     打赏
7楼

这个问题就需要具体分析了:
再说你怎么知道编译器就不是使用的最佳方案呢?
对于单单这一句来说,可能我们的方案是好的。但是如果结合怎个程序就不一定了。比如下面的句子:
reg_temp = tm0_temp - reg_temp;
reg_temp ++;
xxx = reg_temp + 3;

这个时候,把reg_temp放在R0里面就比直接放在RAM中的效率高了,因为后面还要使用。


助工
2008-08-06 16:55:32     打赏
8楼
有道理
见到高手了

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]