| ??? 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 );
}
|



