Код без оптимизации (для Atmega8)
Код
282: 8d 85 ldd r24, Y+13; 0x0d
284: 99 27 eor r25, r25
286: 80 74 andi r24, 0x40; 64
288: 90 70 andi r25, 0x00; 0
28a: 00 97 sbiw r24, 0x00; 0
28c: 41 f0 breq .+16 ; 0x29e
28e: a2 e3 ldi r26, 0x32; 50
290: b0 e0 ldi r27, 0x00; 0
292: e2 e3 ldi r30, 0x32; 50
294: f0 e0 ldi r31, 0x00; 0
296: 80 81 ld r24, Z
298: 80 68 ori r24, 0x80; 128
29a: 8c 93 st X, r24
29c: 08 c0 rjmp .+16 ; 0x2ae
29e: a2 e3 ldi r26, 0x32; 50
2a0: b0 e0 ldi r27, 0x00; 0
2a2: e2 e3 ldi r30, 0x32; 50
2a4: f0 e0 ldi r31, 0x00; 0
2a6: 90 81 ld r25, Z
2a8: 8f e7 ldi r24, 0x7F; 127
2aa: 89 23 and r24, r25
2ac: 8c 93 st X, r24
284: 99 27 eor r25, r25
286: 80 74 andi r24, 0x40; 64
288: 90 70 andi r25, 0x00; 0
28a: 00 97 sbiw r24, 0x00; 0
28c: 41 f0 breq .+16 ; 0x29e
28e: a2 e3 ldi r26, 0x32; 50
290: b0 e0 ldi r27, 0x00; 0
292: e2 e3 ldi r30, 0x32; 50
294: f0 e0 ldi r31, 0x00; 0
296: 80 81 ld r24, Z
298: 80 68 ori r24, 0x80; 128
29a: 8c 93 st X, r24
29c: 08 c0 rjmp .+16 ; 0x2ae
29e: a2 e3 ldi r26, 0x32; 50
2a0: b0 e0 ldi r27, 0x00; 0
2a2: e2 e3 ldi r30, 0x32; 50
2a4: f0 e0 ldi r31, 0x00; 0
2a6: 90 81 ld r25, Z
2a8: 8f e7 ldi r24, 0x7F; 127
2aa: 89 23 and r24, r25
2ac: 8c 93 st X, r24
после оптимизации "висячая" команда (eor r25, r25) мне не нравится...
Код
d0: 99 27 eor r25, r25
d2: 86 ff sbrs r24, 6
d4: 02 c0 rjmp .+4 ; 0xda
d6: 5f 9a sbi 0x0b, 7; 11
d8: 01 c0 rjmp .+2 ; 0xdc
da: 5f 98 cbi 0x0b, 7; 11
d2: 86 ff sbrs r24, 6
d4: 02 c0 rjmp .+4 ; 0xda
d6: 5f 9a sbi 0x0b, 7; 11
d8: 01 c0 rjmp .+2 ; 0xdc
da: 5f 98 cbi 0x0b, 7; 11
Сишний код
Код
if ((Data & 0x40) == 0x40) PORTD |= 0x80;
else PORTD &= ~0x80;
else PORTD &= ~0x80;