C51代码优化问题

背景:发现写的一段代码被优化了,担心程序遭到了影响。于是开始研究代码优化问题

现象:被优化的代码,在debug状态下无法加入断点,如下图所示,
C51代码优化问题_第1张图片

分析:
1.有的优化可以理解,如
If(A)
{
//do something
A;B;C;
//call function
Func();
}
Else
{
//do something
D;E;F
//call function
Func();
}
那么第一个Func(),就会被优化掉,执行完A;B;C;后,调用Func();时,汇编会跳转到else语句中的Func();
2.有的优化比较隐蔽
如上图中的优化,其优化掉了对寄存器A或0X10,或0X20的语句。这两个语句之后会调用一个子函数,通过汇编发现,并没有直接通过LJMP调用子函数,而是LJMP到了子函数之前的两个语句,而这个两个语句,对同一个地址的寄存器进行了相同的操作(但是工程中没有这两个语句的操作)
在这里插入图片描述

所以这两句代码是可以共用的。
所以,目前没有发现优化对程序有实质的影响

你可能感兴趣的:(c语言,单片机,安全架构)