пятница, 13 марта 2009 г.

Цвета в текстовом режиме

Программа создает таблицу цветов в текстовом режиме. Комприлировать fasm-ом

org 100h
        mov     ax, 3
        int     10h         ; установка видеорежима

        mov     ax, 1003h
        mov     bl, 0       ; 0 - яркие цвета, 1 - мигание
        int     10h


        push    0b800h
        pop     es          ; es = сегмент видеопамяти
        mov     di, 0       ; di = начало сегмента

        cld                 ; прямое направление для строковых операций

        mov     bx, hex_numbers  ; устанавливаем таблицу для команды xlat
        mov     ah, 0            ; ah будет хранить текущий атрибут

next_color:
        mov     al, ' '
        stosw               ; выводим пробел

        mov     al, ah
        shr     al, 4;      ; в al остаются старшие 4 бита
        xlatb               ; преобразуем их в шестнадцатиричную цифру
        stosw               ; выводим первую цифру

        mov     al, ah
        and     al, 0xf;    ; в al младшие 4 бита
        xlatb               ; преобразуем их в шестнадцатиричную цифру
        stosw               ; выводим вторую цифру

        mov     al, ' '
        stosw               ; выводим пробел

        inc     ah          ; следующий атрибут

        test    ah, 0xf     ; если вывели 16 атрибутов
        jnz     @f          ; заполняем строку до конца
        dec     ah          ; пробелами
        mov     cx, 80 - (16 * 4) ; сколько символов заполнять
        rep     stosw
        inc     ah

@@:
        test    ah, ah      ; если ah=0, то перебрали все атрибуты
        jnz     next_color  ; повторяем для всех возможных атрибутов

        mov     ah, 0       ; ждем клавишу
        int     16h

        ret                 ; выходим

hex_numbers db '0123456789ABCDEF'  ; шестнадцатиричные цифры

Комментариев нет:

Отправить комментарий