реклама на сайте
подробности

 
 
> itoa на asm, из темы "51 vs AVR"...
singlskv
сообщение Nov 13 2007, 23:19
Сообщение #1


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(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


Ну я быстрее... smile.gif
Чиста редактируем код многоуважаемого =AVR= smile.gif
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. Просьба не флеймить и высказываться только по существу...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- singlskv   itoa на asm   Nov 13 2007, 23:19
- - =AVR=   ЦитатаКстати, думаю что еще пару-тройку слов/такто...   Nov 13 2007, 23:50
|- - singlskv   Цитата(=AVR= @ Nov 14 2007, 02:50) А вот ...   Nov 14 2007, 00:05
|- - Прохожий   Цитата(singlskv @ Nov 14 2007, 03:05) Дык...   Nov 14 2007, 00:18
- - =AVR=   А пожалуйста: Код;-------------------------------...   Nov 14 2007, 00:20
|- - singlskv   Цитата(=AVR= @ Nov 14 2007, 03:20) А пожа...   Nov 14 2007, 00:35
- - =GM=   Цитата(singlskv @ Nov 13 2007, 23:19) Ну ...   Nov 14 2007, 17:52
|- - singlskv   Цитата(=GM= @ Nov 14 2007, 20:52) Если за...   Nov 15 2007, 01:41
|- - =GM=   Цитата(singlskv @ Nov 15 2007, 01:41) Нав...   Nov 15 2007, 11:22
|- - singlskv   Цитата(=GM= @ Nov 15 2007, 14:22) GM vers...   Nov 15 2007, 16:50
|- - =GM=   Чёта =mse= примолк, мы тут трудимся, как пчёлки......   Nov 15 2007, 23:39
|- - mse   Цитата(=GM= @ Nov 16 2007, 02:39) Чёта =m...   Nov 16 2007, 07:30
||- - =GM=   Цитата(mse @ Nov 16 2007, 07:30) И то, вс...   Nov 16 2007, 11:13
|||- - mse   Цитата(=GM= @ Nov 16 2007, 14:13) To mse ...   Nov 16 2007, 12:20
|||- - =GM=   Цитата(mse @ Nov 16 2007, 12:20) Не, щас ...   Nov 16 2007, 17:20
||- - singlskv   Цитата(mse @ Nov 16 2007, 10:30) И то, вс...   Nov 16 2007, 22:04
|- - singlskv   Цитата(=GM= @ Nov 16 2007, 02:39) mse, вр...   Nov 16 2007, 18:09
- - SasaVitebsk   А если пофлеймить, то это выглядит так. Данная про...   Nov 14 2007, 20:20
- - =AVR=   Данная процедура в моих изделиях (и в тысячах и ты...   Nov 14 2007, 20:49
- - SasaVitebsk   Тогда извиняюсь. Но "в сотни раз" это уж...   Nov 14 2007, 21:57
- - =AVR=   Кажется, такой вариант приводил ник AD(?) на Телес...   Nov 15 2007, 08:52
|- - singlskv   Цитата(=AVR= @ Nov 15 2007, 11:52) Кажетс...   Nov 15 2007, 09:08
- - =AVR=   Внесу ясность. Как я уже отметил выше, мой код был...   Nov 16 2007, 05:56
- - ae_   Цитата(singlskv @ Nov 17 2007, 03:09) ......   Nov 17 2007, 01:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016