Terry Harris escreveu: > On Fri, 03 Jul 2009 20:14:13 -0300, you wrote: > > = >> OK, explain this under this theory: >> >> Look how they do 'Var =3D 0;' : >> >> bcf STATUS,C >> *movlw* 0 >> btfsc STATUS,C >> *movlw* 1 >> movwf Var >> = > > Evaluate the right hand expression and put the result in something just b= ig > enough (in this case the carry flag). Copy the result to the lvalue. > = Makes absolutely no sense. It is testing something itself set hard coded. And there are two movlw, the expression doesn't have any conditionals. >> 'Var =3D 1;' >> >> clrf Var >> bsf STATUS,C >> rlf Var,f >> = > > Same again although I don't know why it chose a different method to copy. Just to grow the code, perhaps? >> 'Var =3D 2;' >> >> clrw >> iorlw 2 >> movwf Temp >> movf Temp,w >> movwf Var >> = > > Same again but the expression needs a file to hold the result. = > > It seems the compiler is being smart recognising constant expressions of 0 > and 1 will fit in a bit and treating them differently. The generated code > looks dumb but I presume provides more scope of optimisation by the bit of > the compiler you didn't buy. = > = The temporary location seems reasonable in unoptimized code, but why load w in a such awkward way? __________________________________________________ Fa=E7a liga=E7=F5es para outros computadores com o novo Yahoo! Messenger = http://br.beta.messenger.yahoo.com/ = -- = http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist