[...]
Wziąłem
arm-none-eabi-gcc (Sourcery G++ Lite 2010.09-51) 4.5.1
i dla kodu:
49 char *ptr = result;
50 do
51 {
52 value /= 10;
53 *ptr++ = '0'+value%10;
54 }
55 while ((value/=10));
dostałem:
0x08000298 <+0>: movw r3, #26215 ; 0x6667
0x0800029a <+6>: movt r3, #26214 ; 0x6666
0x0800029e <+10>: mov r4, r1
0x080002a0 <+12>: smull r5, r12, r3, r0
0x080002a4 <+16>: asrs r2, r0, #31
0x080002a6 <+18>: rsb r2, r2, r12, asr #2
0x080002aa <+22>: smull r0, r5, r3, r2
0x080002ae <+26>: asrs r0, r2, #31
0x080002b0 <+28>: rsb r0, r0, r5, asr #2
0x080002b4 <+32>: add.w r5, r0, r0, lsl #2
0x080002b8 <+36>: sub.w r2, r2, r5, lsl #1
0x080002bc <+40>: adds r2, #48 ; 0x30
0x080002be <+42>: strb.w r2, [r4], #1
0x080002c2 <+46>: cmp r0, #0
0x080002c4 <+48>: bne.n 0x80002a0 <itoa+12>
Nie wiem, czy ręczne rzeźbienie coś jest tu jeszcze w stanie pomóc.
--
Pozdrawiam
Michoo