НУ ТЫ, БЛИН, ДАЁШЬ - смотреть стыдно! Вот оба варианта со сравнением длины и скорости:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено просто так 02 декабря 2002 г. 19:32
В ответ на: Конструкцию с двумя указателями на C вы все равно не получите :) отправлено Elektronik 02 декабря 2002 г. 17:19


;Если это подпрограмма, то дополним ее сохранением/восстановлением контекста:


push xl ;2 байта, 2 такта
push xh ;2 байта, 2 такта
push zl ;2 байта, 2 такта
push zh ;2 байта, 2 такта
push r16 ;2 байта, 2 такта


.equ ramdata =$60 ;61,62,63


ldi xl,low(ramdata) ;2 байта, 1 такт
ldi xh,high(ramdata) ;2 байта, 1 такт
ldi zl,low(flashdata) ;2 байта, 1 такт
ldi zh,high(flashdata) ;2 байта, 1 такт


ld r8,x+ ;2 байта, 2 такта
lpm r16,z+ ;2 байта, 3 такта
add r8,r16 ;2 байта, 1 такт


ld r9,x+ ;2 байта, 2 такта
lpm r16,z+ ;2 байта, 3 такта
adc r9,r16 ;2 байта, 1 такт


ld r10,x+ ;2 байта, 2 такта
lpm r16,z+ ;2 байта, 3 такта
adc r10,r16 ;2 байта, 1 такт


ld r11,x+ ;2 байта, 2 такта
lpm r16,z+ ;2 байта, 3 такта
adc r11,r16 ;2 байта, 1 такт


pop r16 ;2 байта, 2 такта
pop zh ;2 байта, 2 такта
pop zl ;2 байта, 2 такта
pop xh ;2 байта, 2 такта
pop xl ;2 байта, 2 такта


ret ;2 байта, 4 такта


flashdata:
.db 1,2,3,4


;Стек: 5 байт
;Функция: 30 байт, 28 тактов, 1.75 мкс @ 16 МГц
;Контекст: 22 байта, 24 такта, 1.5 мкс @ 16 МГц
;Итого: 52 байта, 52 такта, 3.25 мкс @ 16 МГц
;------------------------------------------------------------------------------------------------------------------



;А теперь для х51:


push acc ;2 байта, 2 такта


mov a,#low(flashdata-$+2) ;2 байта, 2 такта
movc a,@a+pc ;1 байт, 3 такта
add a,ramdata+0 ;2 байта, 2 такта
mov r3,a ;1 байт, 1 такт


mov a,#low(flashdata-$+3) ;2 байта, 2 такта
movc a,@a+pc ;1 байт, 3 такта
addc a,ramdata+1 ;2 байта, 2 такта
mov r4,a ;1 байт, 1 такт


mov a,#low(flashdata-$+4) ;2 байта, 2 такта
movc a,@a+pc ;1 байт, 3 такта
addc a,ramdata+2 ;2 байта, 2 такта
mov r5,a ;1 байт, 1 такт


mov a,#low(flashdata-$+5) ;2 байта, 2 такта
movc a,@a+pc ;1 байт, 3 такта
addc a,ramdata+3 ;2 байта, 2 такта
mov r6,a ;1 байт, 1 такт


pop acc ;2 байта, 2 такта


ret ;2 байта, 2 такта


flashdata:
.db 1,2,3,4


;Стек: 1 байт
;Функция: 24 байт, 32 такта, 2.0 мкс @ 16 МГц/0.64 мкс @ 50 МГц
;Контекст: 6 байт, 6 тактов, 0.375 мкс @ 16 МГц/0.12 мкс @ 50 МГц
;Итого: 30 байт, 38 тактов, 2.375 мкс @ 16 МГц/0.76 мкс @ 50 МГц
;
;Вывод: не дождётесь! ;))

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru