╔════════════════════════════════════════╗
║▒▒▒▒▒▒▒▒▒▒▒▒▒ ОПТИМИЗАЦИЯ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╚════════════════════════════════════════╝
(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-Ревю
представить вниманию "НАЧИНАЮЩИХ" проги
лучших кодеров, "доведенные до СОВЕР-
ШЕНСТВА". Будем надеяться, что он их не
собирается ОПТИМИЗИРОВАТЬ!!!