TI中文支持网
TI专业的中文技术问题搜集分享网站

IAR 2530 C代码的反汇编代码疑问?

各位好:

   我使用的开发环境是 IAR for 8051 8.30.3 , 在调试 CC2530F256 如下代码的时候,观察到的反汇编指令如图:

  // DI 定义为 P1_1

右边汇编代码显示,一个左移位指令,和赋值语句, 用了这么多条指令,而且调试结果显示 DI = CY 这个赋值不成功(CY=1,但是赋值之后DI=0)

但是我使用 IAR for 8.10 重新测试这段代码发现,如下图, 明显效果比较好。 测试的时候 优化等级都为None。

请问,这是什么问题,有解决的办法吗?

gaoyang9992006:

楼主,你咋不试试这样写呢?

cmd<<=1;

你再试试,你仔细对比两句采用不同运算符的效果,如果我没猜错,肯定就对应的汇编不一样了,机器都是按照语法来的。

就像说话一样,说两句意思一样的话,结果用了不同的语法,那字数肯定就不同。

还有前后不同的版本,估计默认的优化级别不同,上面那个看着就冗余度太高了。不知道系统咋处理的。

Jiancan Chen:

回复 gaoyang9992006:

你好,谢谢回复。

1. C语言处理 cmd<<=1 与 cmd = cmd<<1是一样的,重新编译结果显示汇编代码一样。

2. 两个版本的优化等级一样

gaoyang9992006:

回复 Jiancan Chen:

楼主,我用最新版生成的代码是

EW8051-9103-Autorun版本。最新的,今天刚刚去IAR下载的。

—————————————————————————————————代码如下———————————————————-

      cmd<<=1;                //先发高          \   000012   EE           MOV     A,R6   \   000013   C3           CLR     C   \   000014   33           RLC     A   \   000015   FE           MOV     R6,A    112                  DI=CY;                               //取最高位                  \   000016   A2D7         MOV     C,0xd0.7   \   000018   E4           CLR     A   \   000019   33           RLC     A   \   00001A   F8           MOV     R0,A   \   00001B   A2D7         MOV     C,0xd0.7   \   00001D   9291         MOV     0x90.1,C    113                  asm("NOP");   \   00001F   00           NOP    114                  DCKI=1;                                 //时钟下降沿,数据被传输   \   000020   D290         SETB    0x90.0    115                  cmd=cmd<<1;                         //先发高位           \   000022   EE           MOV     A,R6   \   000023   C3           CLR     C   \   000024   33           RLC     A   \   000025   FE           MOV     R6,A    116                  DI=CY;                               //取最高位    

———————————————————————————————————

对比内容,没有问题,估计是你那个版本的故障,或者bug,你去下载最新版试试看。9.103

gaoyang9992006:

回复 gaoyang9992006:

补充一下,我把那个优化等级调整后,发现生成的代码不同。好神奇啊

Jiancan Chen:

回复 gaoyang9992006:

我用了 9.10.2 效果还是那样,你用的是9.10.3 是正版呢还是 评估版?

Jiancan Chen:

回复 gaoyang9992006:

hi, 你开了优化吗?

gaoyang9992006:

回复 Jiancan Chen:

我在官网下载的,然后注册了个序列号,是限制代码大小的序列号,你也可以注册个30天限制的。

gaoyang9992006:

回复 Jiancan Chen:

没有开优化。

Jiancan Chen:

回复 gaoyang9992006:

我用的是 9.10.2 版本,用到时30天试用,我待会安装最新版试试看

Jiancan Chen:

回复 gaoyang9992006:

hi, 我最后使用和你一样的最新版本的size 限制版本,但是结果还是和之前一模一样,请问你有配置什么吗? 而且你的那句 DI=CY; 的反汇编代码也是冗余。

赞(0)
未经允许不得转载:TI中文支持网 » IAR 2530 C代码的反汇编代码疑问?
分享到: 更多 (0)