Цитата(baralgin @ Apr 25 2010, 23:55)

Не поленился
Сильно поленились - у Автора всего лишь AVR а не Atlon . А во вторых и для AVR8 это фатально, переврали мои примеры и вписали int вместо insigned char. В третьих, а почему свой вариант не протестировали

?
Вот как он выглядит на AVR8:
Код
15 BYTE InverseByte(BYTE b)
\ InverseByte:
16 {
\ 00000000 2F59 MOV R21, R25
\ 00000002 2F68 MOV R22, R24
\ 00000004 2F30 MOV R19, R16
17 BYTE ret = 0;
\ 00000006 E020 LDI R18, 0
18 for( int i = 0; i < 8; i++ )
\ 00000008 E080 LDI R24, 0
\ 0000000A E090 LDI R25, 0
19 {
20 ret |= ( ( b & ( 1 << i ) ) ? 1 : 0 ) << ( 7 - i );
\ ??InverseByte_0:
\ 0000000C 2F48 MOV R20, R24
\ 0000000E E001 LDI R16, 1
\ 00000010 E010 LDI R17, 0
\ 00000012 .... RCALL ?S_SHL_L02
\ 00000014 2F13 MOV R17, R19
\ 00000016 2310 AND R17, R16
\ 00000018 F011 BREQ ??InverseByte_1
\ 0000001A E001 LDI R16, 1
\ 0000001C C001 RJMP ??InverseByte_2
\ ??InverseByte_1:
\ 0000001E E000 LDI R16, 0
\ ??InverseByte_2:
\ 00000020 E010 LDI R17, 0
\ 00000022 E047 LDI R20, 7
\ 00000024 1B48 SUB R20, R24
\ 00000026 .... RCALL ?S_SHL_L02
\ 00000028 2B20 OR R18, R16
21 }
\ 0000002A 9601 ADIW R25:R24, 1
\ 0000002C 3088 CPI R24, 8
\ 0000002E E000 LDI R16, 0
\ 00000030 0790 CPC R25, R16
\ 00000032 F364 BRLT ??InverseByte_0
22 return ret;
\ 00000034 2F02 MOV R16, R18
\ 00000036 2F86 MOV R24, R22
\ 00000038 2F95 MOV R25, R21
\ 0000003A 9508 RET
23 }
А так нормально написанный цикл
Код
15 BYTE InverseByte(BYTE b)
\ InverseByte:
16 {
17 BYTE ret = 0;
\ 00000000 E020 LDI R18, 0
18 for( BYTE i = 0x80; i; i >>= 1 )
\ 00000002 E810 LDI R17, 128
19 {
20 if( b & 1 )
\ ??InverseByte_0:
\ 00000004 FB00 BST R16, 0
\ 00000006 F40E BRTC ??InverseByte_1
21 ret |= i;
\ 00000008 2B21 OR R18, R17
22 b >>= 1;
\ ??InverseByte_1:
\ 0000000A 9506 LSR R16
23 }
\ 0000000C 9516 LSR R17
\ 0000000E F7D1 BRNE ??InverseByte_0
24 return( ret );
\ 00000010 2F02 MOV R16, R18
\ 00000012 9508 RET
25 }
А в четвертых попробуйте этот Ваш сравнительный тест, например, на 0x01 и узнаете немного о везении.