|
;Если это подпрограмма, то дополним ее сохранением/восстановлением контекста:
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