![]() |
|
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №4 (17.03.2001) Просмотров: 5124
![]() Автор: Александр Шушков / 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
RETP.S. Естественно никаких проверок на выход за пределы экрана и т.п. не делается. Ссылки по теме:Этюды [№6]Конкурс по процедуре прямоугольника продолжается [№7] |