各位专家:
在调试过程中,会出现简单的赋值语句执行结果不正确现象,查看反汇编代码,发现如下情况:
正确编译结果为:
LDW B4; NOP; STD B4, B15[12];
错误编译结果为:
SWBP 0; NOP; STD B4,B15[12];
遇到错误结果重新编译后能得到正确的结果
请问专家产生以上现象的原因是什么?查了一下感觉不像是堆栈溢出,怎么避免???
非常感谢!!!
Allen35065:
设置了不同的调试选项?使用了不同的编译器版本?
li yanlong:
回复 Allen35065:
设置的是相同的调试选项,相同的编译器版本。把L2中的资源放到共享里就不出现了,但是从map看不存在L2溢出的问题。。。。
Na Li7:
把这两条代码的16进制贴上来看看?包括前后几个32bit代码,一条说明语句对应的7个32bit哈,SWBP按理说不是用户代码能用的
li yanlong:
回复 Na Li7:
您好:
正确的赋值语句: FDCD LDW.D2T2 *B15[15],B4
6C6E NOP
DD45 STW.D2T2 B4,*B15[10]
错误的赋值语句: FDCD SWBP 0
6C6E NOP
DD45 STW.D2T2 B4,*B15[9]
感觉还是堆栈问题,把大数组从L2放到共享就没出现了,但是我看map文件,L2的空间还有富余