:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №4 (17.03.2001) Просмотров: 4829
Автор: Александр Шушков / axor / Perspective. Рубрика: Этюды. Номер: №4 (17.03.2001). Конкурс на самую короткую процедуру прямоугольника.Так как от читателей на данный момент ничего не поступило, то мне самому пришлось сесть за ассемблер и представить вашему вниманию небольшую процедуру, которая в основном используется в оконном интерфейсе. Моей целью было сделать наиболее короткую процедуру, чего, в принципе, и должны придерживаться этюды. Длина процедуры составила всего 46 байт (без переменных). Естественно, что кто-то сможет написать еще короче, поэтому у нас возникла идея - объявить конкурс по этой процедуре. Человек, написавший самую короткую процедуру, получит один номер газеты бесплатно. Итак, дерзайте, и, может быть у вас что-то получится. А моя процедура выглядит так:
ORG 40000 ; HL - Адрес в экране ; D - Высота прямоугольника в пикселях (3...192) ; E - Ширина прямоугольника в знакоместах (1...32) LD HL,#4000 ; Для примера LD DE,#640A ; RECTANGLE PUSH HL CALL rect_ln ; Горизонтальная линия POP HL:INC H DEC D ; Уменьшаем, т.к. DEC D ; в первой и последней ; строке рисуем ; горизонтальные линии LD B,D loop_rc PUSH HL LD (HL),128 ; Левая граница LD A,E ; Расчет приращения DEC A ; по ширине ADD A,L LD L,A LD (HL),1 ; Правая граница POP HL CALL DOWN_HL ; На строку ниже DJNZ loop_rc rect_ln LD B,E ; Ширина loop_ln LD (HL),255 INC L DJNZ loop_ln RET DOWN_HL INC H:LD A,H:AND 7 RET NZ:LD A,L:ADD A,32 LD L,A:RET C:LD A,H:SUB 8:LD H,A RET P.S. Естественно никаких проверок на выход за пределы экрана и т.п. не делается. Ссылки по теме:Этюды [№6]Конкурс по процедуре прямоугольника продолжается [№7] |