Абзац
:: Поиск
:: ПоддерЖка ПрОекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №4 (17.03.2001) ПрОсмотрОв: 3444

    Автор: Александр Шушков / 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]


    © 2004-2013 Perspective group