编译器生成了这样的代码: 134: if(prOut-rev_buff>=REV_BUFF_SIZE) C:0x0677 AF0A MOV R7,prOut(0x0A) C:0x0679 7E00 MOV R6,#0x00 C:0x067B 7B00 MOV R3,#0x00 C:0x067D 7A00 MOV R2,#0x00 C:0x067F 7971 MOV R1,#rev_buff(0x71) C:0x0681 AC02 MOV R4,0x02 C:0x0683 AD01 MOV R5,0x01 C:0x0685 C3 CLR C C:0x0686 EF MOV A,R7 C:0x0687 9D SUBB A,R5 C:0x0688 FF MOV R7,A C:0x0689 EE MOV A,R6 C:0x068A 9C SUBB A,R4 C:0x068B FE MOV R6,A C:0x068C C3 CLR C C:0x068D EF MOV A,R7 C:0x068E 940C SUBB A,#datatemp(0x0C) C:0x0690 EE MOV A,R6 C:0x0691 6480 XRL A,#P0(0x80) C:0x0693 9480 SUBB A,#P0(0x80) C:0x0695 4004 JC C:069B 135: prOut=rev_buff; C:0x0697 7F71 MOV R7,#rev_buff(0x71) C:0x0699 8F0A MOV prOut(0x0A),R7 136: }
一段时间以前,有个朋友跟我说这种写法不好,没有弄懂为什么 if(psIn-send_buff>=SEND_BUFF_SIZE) psIn=send_buff; 现在出现了上面的问题,才知道确实不好,因为从汇编代码来看,好像没有对指针进行预期的操作,出现了乱出数据的现象
现在请教大家上面的错误是怎么产生的,应该怎样解决这个问题,谢谢
|