Цитата(mse @ Nov 3 2007, 23:51)

itoa от =AVR= ;О) Кто быстрее?
CODE
;--------------------------------------------------------------------
; Converts an unsigned integer r5:r4 to a 5-character ASCII string [x]
; 58 program words, 73 clocks + ret
itoa:
.equ rev10k= 429497; ~= 2^32/10000
clr r2
ldi r16,low(rev10k)
ldi r17,high(rev10k)
ldi r18,byte3(rev10k)
mul r4,r16
mov r6,r1
mul r4,r17
add r6,r0
adc r1,r2
mov r7,r1
mul r4,r18
add r7,r0
adc r1,r2
mov r8,r1; r8r7r6 ~= Xlsb*429497/256, 06872B max
mul r5,r16
add r6,r0
adc r7,r1
adc r8,r2
mul r5,r17
add r7,r0
adc r8,r1
mul r5,r18
add r8,r0; r8r7 ~= int2fract(X%10000)
ldi r17,'0'
adc r1,r17; r1 = ASCII(X/10000)
st x+,r1; Tens of thousands
;--------------------------------------------------------------------
; Converts fractional 16-bit value in r5:r4 (0..9999) range
; to a 4-character ASCII string [x]
; by sequential multiplication by 10
fractoa:
ldi r16,10; Constant for multiplication by 10
sec ; Correct int2fract result to fit in 16-bit word
adc r7,r2; by incrementing it
adc r8,r2;
mul r7,r16; Multiply a 16-bit value by 10
movw r2,r0;
mul r8,r16;
add r3,r0; r3r2 ~= int2fract(X%1000)
adc r1,r17; r1 = ASCII(X/1000)
st x+,r1; Thousands
mul r2,r16; Same as above for hundreds
movw r4,r0
mul r3,r16
add r5,r0
adc r1,r17
st x+,r1
mul r4,r16; Same as above for tens
movw r2,r0
mul r5,r16
add r3,r0
adc r1,r17
st x+,r1
mul r2,r16; Same as above for units
movw r4,r0
mul r3,r16
add r5,r0
adc r1,r17
st x+,r1
ret
Ну я быстрее...

Чиста редактируем код многоуважаемого =AVR=

CODE
;--------------------------------------------------------------------
; Converts an unsigned integer r5:r4 to a 5-character ASCII string [x]
; 56 program words, 71 clocks + ret
itoa:
.equ rev10k= 429497; ~= 2^32/10000
clr r3
ldi r16,low(rev10k)
ldi r17,high(rev10k)
ldi r18,byte3(rev10k)
mul r4,r16
mov r6,r1
mul r4,r17
add r6,r0
adc r1,r3
mov r7,r1
mul r4,r18
add r7,r0
adc r1,r3
mov r8,r1; r8r7r6 ~= Xlsb*429497/256, 06872B max
mul r5,r16
add r6,r0
adc r7,r1
adc r8,r3
mul r5,r17
add r7,r0
adc r8,r1
mul r5,r18
add r8,r0; r8r7 ~= int2fract(X%10000)
ldi r17,'0'
adc r1,r17; r1 = ASCII(X/10000)
st x+,r1; Tens of thousands
ldi r16,10; Constant for multiplication by 10
mul r7,r16; Multiply a 16-bit value by 10
movw r2,r0
mul r8,r16
add r2,r16
adc r3,r0
adc r1,r17
st x+,r1
mul r2,r16
movw r4,r0
mul r3,r16
add r5,r0
adc r1,r17
st x+,r1
mul r4,r16
movw r2,r0
mul r5,r16
add r3,r0
adc r1,r17
st x+,r1
mul r2,r16
movw r4,r0
mul r3,r16
add r5,r0
adc r1,r17
st x+,r1
ret
Итого: - 2слова, -2такта
Кстати, думаю что еще пару-тройку слов/тактов можно еще скушать...
Но это в следующий раз, когда мозк потребует деятельности...
P.S. Просьба не флеймить и высказываться только по существу...