Допустим нам надо перебросить данные (несколько кб) из одной области памяти(их несколько) в другую(а вот назначение постоянно или,если уж совсем идеально, пара-тройка адресов) и сделать это побыстрее, а памяти потратить на процедуру поменьше(килов до 4х отсилы).
Какие у нас пути?..
1) Если хранить данные внутри блоков ld rr,NN : push rr, получим наибыстрейшую загрузку(так ли это?) в 10.5 тактов на байт и эпический жор памяти. Врядли применимо в реальных проектах.
2) портянка из
даст 12.5 тактов на байт, но сожрёт много памяти, а источник выбрать не получится. =\Код:ld sp,#src pop af pop bc pop de pop hl exx pop bc pop de pop hl ld sp,#dest push hl push de push bc exx push hl push de push bc push af
3) портянка из pop hl:ld hl,(NN). Удовлетворяет и скоростью и выбором источника, но память жрёт тоже неприемлемо.
4) красивая макра - хорошая замена LDIR'у, стек не трогает - почти 16t/b и немного памяти, но я хочу быстрее =(
На основе варианта №2 накодил самомодифицирующийся цикл с ~15t/b размером даже меньше варианта №4, можно ли ЕЩЁ быстрее? (Да, пока есть память, можно часть переслать по №3, часть ещё как-то, но вопрос не в этом =))Код:macro ldirf xor a sub c and 128-1 add a,a ld ($+4),a jp 1f align 256 1 dup 128 ldi edup jp pe,1b endm




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
