没人能回答吗?
好吧,说下自己的调试进展然后结贴吧。
貌似这回是遇到极品代码了,有部分C代码编译之后的汇编代码比较可疑,屏蔽之后就再也没有跑飞过了。C代码的原型是这样的:
if(workptr->specialwork_enable == true
&& specialworkfunction(workptr,intinput,doubleinput,doubleinput2,&doubleval1,&doubleval2) == true) {
//do something....
}
编译器优化之后的编译结果汇编代码是:
LDB *+A0[123],B0
[!B0] B PC+1306
LDDW *+SP[8],A7:A6
LDDW *+SP[0x10],A9:A8
[ B0] B PC+36508 ;specialworkfunction的入口地址
|| LDW *+SP[4],B5
; .... some more assembler codes....
似乎第一个条件跳转后跟着两个读取64位浮点数的指令不太正常,将“workptr->specialwork_enable == true”的条件判断移动至specialworkfunction中之后,编译出的结果不再出现上面的汇编结果,程序也不再跑飞了。
|