|
Energy
#04
03 мая 1997 |
|
Оптимизация - Оптимизация процедур.

╔════════════════════════════════════════╗ ║▒▒▒▒▒▒▒▒▒▒▒▒▒ ОПТИМИЗАЦИЯ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒║ ╚════════════════════════════════════════╝ (C) Demon/LGN ОПТИМИЗАЦИЯ!!! Жадность фраера погубит. Народная мудрость. > D: (D - это DEMON) С недавних пор я по- нял, что за словом "ОПТИМИЗАЦИЯ" может скрываться не только польза... Эта статья является откликом на письмо, опубликован- ное в ZX-Ревю 97/1-2(стр.47), написанное неким AmiS. Передаю ему слово. > A: (A - это AmiS) Многие уже писали о том, что пора бы покончить с сырыми и неп- родуманными процедурами. > D: Да ну! В отличие от тебя люди дума- ют! > A: Но сами делают в своих работах недо- пустимые, с моей точки зрения, просчеты. Далее приведу несколько примеров. Перед нами задача : написать самую ко- роткую процедуру очистки экрана. > D: А кто ее ставил? > A: Многие начинающие сделают нечто по- хожее на: LD HL,#4000 LD DE,#4001 LD BC,#1AFF LD (HL),L LDIR Посидев некоторое время можно сокра- тить процедуру: LD HL,#5B00 DEC HL XOR A LD (HL),A OR H JR NZ,$-6 > D: Извиняюсь, что прервал сей бред, но мне хочется постоять за этих самых "НАЧИ- НАЮЩИХ". Если бы AmiS еще ко всему и счи- тать умел, то цены бы ему не было. Первая программа занимает 12 байт и работает 145184 такта. Процедура же гения - 9 байт (Ур-р-р-а!!! Он выиграл 3 байта), но время исполнения... 944686 тактов... Кругленькая циферка... Правда работать этот гениальный бред будет со скоростью MORTAL KOMBAT на ЕС1841 (а именно в 6.5 раз медленнее...). Стоит призадуматься о смысле такой ОПТИМИ- ЗАЦИИ. Но AmiS'у достигнутого мало и он не перестает нас удивлять... > A: Посмотрите на следующий пример. Он родился за несколько ЧАСОВ упорного штур- ма. > D: Даже БАЙСЯК (тот, кто пишет на BASIC'е) не смог бы столько тормозить. > A: Зато теперь можно смело применять эту идею в своих программах: Задача: "разворот" байта (т.е обмен битов 0-7, 1-6, 2-5, 3-4). Было 76543210 (%01100001), стало 01234567 (%1000110) LD A,#80 ADD HL,HL RRA JR NC,$-2 LD H,A Байт приходит в H, в нем же и уходит. > D: Для начала приведу процедуру, кото- рой пользуюсь я (и не только я!): RR n RLA RR n RLA RR n RLA RR n RLA RR n RLA RR n RLA RR n RLA RR n RLA LD n,A ,где n - любой регистр Процедура AmiS'а: занимает 7 байт, ра- ботает 134 такта. Ограничения: входной байт только в H. Вторая процедура: занимает 25 байт, работает 100 тактов. Ограничения: нет. В размерах автор сэкономил 18 байт, но в скорости проиграл 34 такта. Если я кого-либо еще не убедил в пра- воте моих слов, то пусть они обратят свои взоры на МЕГАДЕМЫ и множество других прог- рамм, в которых "ну о-о-о-очень" крутые эффекты. В них никто не экономит память, т.к. заботятся о том, чтобы все выглядело красиво, а не занимало поменьше места (ко- торого никому никогда не хватает). Также настораживают слова AmiS'а, обе- щающего в последующих номерах ZX-Ревю представить вниманию "НАЧИНАЮЩИХ" проги лучших кодеров, "доведенные до СОВЕР- ШЕНСТВА". Будем надеяться, что он их не собирается ОПТИМИЗИРОВАТЬ!!!
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3