Если ты не знаком с асмом x86 и не умеешь написать hello world в debug.exe то о чём вообще говорить? А проблема как всегда в ассемблерах. Микрочиповский компилятор (ещё то говно) тоже выкидывает strlen нафиг. Я не поленился и AVR-GCC проверил. Выкидывает! Более того, у него strlen вовсе инлайнится. КАКИМ ГОВНОМ ТЫ КОМПИЛИРУЕШЬ, А?
f:
/* prologue: function */
/* frame size = 0 */
mov r22,r24
mov r23,r25
mov r26,r24
mov r27,r23
mov r30,r26
mov r31,r27
ld __tmp_reg__,Z+
tst __tmp_reg__
brne .-6
sbiw r30,1
mov r24,r30
mov r25,r31
sub r24,r26
sbc r25,r27
mov r26,r24
mov r27,r25
ldi r18,lo8(0)
ldi r19,hi8(0)
ldi r20,lo8(0)
ldi r21,hi8(0)
rjmp .L2
.L4:
mov r30,r22
mov r31,r23
add r30,r18
adc r31,r19
ld r24,Z
sbrs r24,0
rjmp .L3
subi r20,lo8(-(1))
sbci r21,hi8(-(1))
.L3:
subi r18,lo8(-(1))
sbci r19,hi8(-(1))
.L2:
cp r18,r26
cpc r19,r27
brlo .L4
mov r24,r20
mov r25,r21
/* epilogue start */
ret