Многие уже писали о том, что пора бы покончить с сырыми и непродуманными процедурами. Но, сами при этом делают в своих работах недопустимые, с моей точки зрения, просчеты, как в алгоритмах и синтаксисе, так и в реализации. На это и хочу обратить Ваше внимание. Далее я приведу несколько простейших примеров и объясню зачем это нужно.
Перед нами задача: написать самую короткую процедуру очистки экрана (естественно без использования ПЗУ).
Многие начинающие сделают нечто похожее на:
Id hi, #4000 Id de,#4001 Id bc,#1aff Id (hi),I Idir
Посидев некоторое время можно сократить процедуру:
>
или
Id |
hl,#5b00 |
dec |
hi |
xor |
a |
Id |
(hi),a |
or |
h |
jr |
nz,$-6 |
Id |
h,#23 |
Id |
(hl).O |
Id |
a,h |
CP #5Ь jr nz,$-6
что работает несколько быстрее, но портит ячейку #5Ь00, и следовательно не удовлетворяет нашим требованиям.
Таких простейших приемов можно придумать огромное множество. Большинство из них применять даже нецелесообразно. Тогда спрашивается, зачем это нужно? Отвечу. Эти упражнения нужны не только для применения в своих программах (хотя, как правило, почти все они становятся для Вас стандартом), а для "тренировки мозгов" Если данная "тренировка" станет для Вас обыденным делом, то Вы вскоре поймете, что уже не можете писать свои программы без нее. Данная тренировка должна работать автоматически и только тогда о Вас можно будет сказать, что Вы стали настоящим "крутым" кодером.
Посмотрите на следующий пример. Он родился за несколько ЧАСОВ упорного штурма. Зато теперь можно смело применять эту идею в своих программах:
Задача: "разворот" байта (т.е. обмен битов 0-7,1-6,2-5,3-4) было 76543210 %(01100001) стало 01234567 %(10000110) Id а,#80 add hl.hl rra
jr nc,$-2 Id h,a Байт приходит в h, в нем же и уходит.
Разберите подробно, что и как делает данная процедура, и Вам станет понятен ход моих мыслей и ранее изложенных доводов.
этюды
(с) Amis (095) 412-4705 (Алексей)
Здрав ствуйт е, уважаемые поклонники ZX-РЕВЮ! Хочу обратиться к тем, кто свои Для на
Особенно обратите внимание на то, как тут используется регистр А.
Для "домашнего задания" могу предложить Вам оптимизировать простейшие процедуры умножения, деления, взятие факториала, возведение в степень, ВЫЧИСЛЕНИЕ sin и cos. Попробуйте оптимизировать данные процедуры как по размеру, так и по скорости исполнения. Т.е. получить два разных варианта одной процедуры. Для тех, кто давно знаком с этим приемом, предлагаю на страницах ZX РЕВЮ опубликовать свои наработки. В последующих выпусках я предложу на Ваше рассмотрение доведенные до совершенства процедуры лучших кодеров, таких как KSA, MAX IWAMOTO, RST 7, STALKER, TITUS и т.д., естественно, с их согласия.
Если у Вас есть модем и Вы живете в Москве, то можете присылать свои работы по вышеуказанному телефону. Или приносить/присылать их в ИНФОРКОМ с пометкой "ОПТИМИ-ЗАЦИЯ"
Внимание! На данную тему объявляется конкурс. AmigaNet: 39:241/17.8 FidoNet: 2:5020/659.51
ИФК: Максим Лупан из Адлера прислал материал, который должен вызвать интерес не только у начинающих, но и у опытных программистов.
КОРР* Процедуры две: первая - загрузчик с индикатором.
В ZX РЕВЮ 96/4-5 появились два отличных загрузчика Сергея Колотова и Богдана Артемьева. Не в силах что-либо противопоставить первому, я решил сделать свой вариант второго. Наблюдая как-то за инстоляцией игрушки на IBM в оболочке WINDOWS 95, я подумал: а поче-му-бы не сделать подобный загрузчик для SPECCY? Для дисковода нет смысла, т.к. загрузка не занимает более 10 секунд. А вот для магнитофона получилось вполне подходяще. Правда, пришлось распахнуть шкалу на весь экран, но суть (скорость заполнения в зависимости от длины файла) остались неизменной.
Вообще, в последнее время наметился ощутимый прорыв в области магнитофонной загрузки. Я думаю, это естественно, ведь все начинали с магнитафона (по крайней мере большинство) и теперь, когда дисковод стал обычной вещью, многих (в том числе и меня) снова потянуло к ленточным загрузчикам где возможностей развернуться гораздо больше.