??? 04/01/05 15:56 Read: times |
#90817 - Byte Bit Reversal Responding to: ???'s previous message |
Here are two methods, the latter is the most compact that I have come across.
// // Fast Char Bit Reverse // // Author: Graham Cole // // Input: c - 8-bit word R7. // // Output: R7 is c with the bit values reversed. // // Function: // // Notes: Two methods are presented, the shorter of which // is based on an idea by Peter Dannegger. // #pragma ASM $REGUSE _fast_char_bit_reverse( A, PSW, R7 ) #pragma ENDASM unsigned char fast_char_bit_reverse( char c ) { #pragma ASM ; fast_char_bit_reverse: ; ; #if 0 ; MOV A,R7 ;C 76543210 ; hgfedcba ANL A,#0x55 ; -g-e-c-a RL A ; g-e-c-a- XCH A,R7 ; hgfedcba ANL A,#0xAA ; h-f-d-b- RR A ; -h-f-d-b ORL A,R7 ; ghefcdab MOV R7,A ; ; ANL A,#0x33 ; --ef--ab RL A ; -ef--ab- RL A ; ef--ab-- XCH A,R7 ; ghefcdab ANL A,#0xCC ; gh--cd-- RR A ; -gh--cd- RR A ; --gh--cd ORL A,R7 ; efghabcd ; SWAP A ; abcdefgh ; MOV R7,A ; ; #else ; MOV A,R7 ;C 76543210 ; MOV C,Acc.1 ;b hgfedcba RLC A ;h gfedcbab MOV Acc.2,C ;h gfedchab MOV C,Acc.3 ;c gfedchab RLC A ;g fedchabc MOV Acc.4,C ;g fedghabc MOV C,Acc.5 ;d fedghabc RLC A ;f edghabcd MOV Acc.6,C ;f efghabcd SWAP A ;f abcdefgh ; MOV R7,A ; ; #endif #pragma ENDASM return( c ); } |