Hello, I would like to know if there's any way I can write C code that will use the assembly instructions RLC and ACC.x efficiently. I would like to some C code that will result in: MOV A,byBuffer MOV c,bInput RLC A MOV byBuffer,A The closest I could get was this: byBuffer=(byBuffer<<1)&bInput; Which results in: MOV A,byBuffer ADD A,ACC MOV R7,A MOV C,bInput CLR A RLC A ANL A,R7 MOV byBuffer,A The same thing happens when I want to use a specific bit from a byte. I have never seen the C-compiler use the ACC.x instruction. It uses solutions like this: MOV A,R6 MOV R0,AR5 INC R0 SJMP ?C0078 ?C0077: CLR C RLC A ?C0078: DJNZ R0,?C0077 Any ideas ????
"I would like to know if there's any way I can write C code that will use the assembly instructions RLC and ACC.x efficiently" No 'C' compiler will guarantee to generate any specific sequence of machine instructions from any specific source line. That's the point of a high-level language: it removes the need to worry about all that detail, thus improving programmer productivity. Of course, there's no such thing as a free lunch, and the price you pay is the loss of control of the generated machine code - and possibly some loss of efficiency (although modern optimising compilers are pretty good these days). If the precise sequence of machine instructions is really important to your application (eg, for timing), you need to write it in assembler.
First of all a thanks to Graham for the suggestions, they were very helpfull. "Of course, there's no such thing as a free lunch, and the price you pay is the loss of control of the generated machine code" Agree, but you never lose complete control. The generated code changes as you change your source-code. When I use nested ifs in stead of cases my source may be less (or more) efficient. Therefore I can influence the generated source. Maybe I'll better change my question to this: Are there any C-constructions (or macros) that are known to use RLC and Acc.x ??
"Are there any C-constructions (or macros) that are known to use RLC and Acc.x??" I think that goes back to my original comment: No 'C' compiler will guarantee to generate any specific sequence of machine instructions from any specific source line.