Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Johny_boy
0 / 0 / 0
Регистрация: 21.11.2014
Сообщений: 3
#1

Как менять цвет фона в консоли, нажатием клавиши? (TASM) - Assembler

21.11.2014, 17:41. Просмотров 813. Ответов 1
Метки нет (Все метки)

Здравствуйте, уважаемые жители форума. Помогите пожалуйста с исправлением этой программы или написанием новой. Программа должна менять цвет фона консоли ( при этом не очищая консоль) по нажатию клавиши ( например пробела). В этом коде неправильно работает цикл ( он не работает как таковой), и цвет меняется не попорядку. Можете, пожалуйста, объяснить что исправить или как лучше вообще сделать? Крайне желательно сделать именно на TASM ибо в других я не работал и не понимаю их код.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
MODEL small
 
stack 100h
 
 
.code
 
main:
;---установка 16 фоновых цветов в текстовом режиме 80*25
        MOV  AL,00000000B   ;установка в 0 бита мигания
        MOV  DX,3D8H        ;адрес регистра
        OUT  DX,AX          ;посылаем в регистр
;---инициализируем весь экран в красный на светлосинем фоне
        MOV  AX,0B800H      ;указываем на видеобуфер
        MOV  ES,AX          ;
        MOV  CX,3000        ;записываем атрибут в 2000 ячеек
    xor  BX,BX
        MOV  BX,1           ;BX указывает на байт атрибутов
        add  AL,00010000B   ;значение байта атрибутов
    jmp NEXT_CHAR
NEXT_CHAR:   MOV  ES:[BX],AL   ;посылаем атрибуты в буфер
        INC  BX             ;увеличиваем указатель на атрибуты
        INC  BX             ;
        LOOP NEXT_CHAR      ;пишем в следующую позицию
    jmp cycle
cycle:
    ;xor AH,AH
    ;xor AL,AL
    mov ah, 0       ; функция чтения с клавиатуры
    int 16h         ; прерывание dos- ждём нажатие
    cmp ah, 01h         ; esc нажата (сравнивание значений не нажатой клавиши с нажатой клавишей esc)
    je stop             ; если нажата - выход
    cmp ah, 39h         ; пробел нажат
    jne cycle           ; если не пробел - пропустить
    ;je main
    add AL, 00010000b
    ;INC AL
 
    ;xor BX,BX
    jmp NEXT_CHAR
 
stop:
 
    mov ax, 4C00h   ; выход в dos
    int 21h         ; прерывание dos-закрыть программу
 
end main
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2014, 17:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как менять цвет фона в консоли, нажатием клавиши? (TASM) (Assembler):

Изменить цвет текста в консоли по нажатию клавиши (TASM)
Здравствуйте. Помогите пожалуйста написать код. Программа должна менять цвет...

Изменить цвет шрифта и фона в консоли
Помогите написать программу, которая читает введенные символы с клавиатуры,...

Графика в TASM: текстовая строка, которая двигается стрелками клавиатуры, и меняет цвет при каждом нажатии клавиши
Нужно реализовать текстовую строку которая двигается стрелками клавиатуры, и...

Ввести символы с клавиатуры. Цвет символов - белый, цвет фона - синий
Нужно написать программу, которая позволит вводить символы из клавиатуры, цвет...

Как изменить цвет текста и фона
Куда мне вставить изменения цвета текста и фона :-( ? Подскажите,пожалуйста. ...

Изменение фона консоли
при нажатии кнопки очистить экран синим цветом, вывести свое имя с атрибутом...

1
Charles Kludge
Клюг
7641 / 3156 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
21.11.2014, 21:37 #2
Лучший ответ Сообщение было отмечено Johny_boy как решение

Решение

Ну как-то так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.model  small
.stack
.code
;   org 100h
main:   mov bl, 10h ;1 
    mov ax, 0B800h
    mov ds, ax
    mov es, ax
again:  xor ah, ah          ; функция чтения с клавиатуры
    int 16h         ; прерывание dos- ждём нажатие
    cmp ah, 01h         ; esc нажата (сравнивание значений не нажатой клавиши с нажатой клавишей esc)
    jz  gtfo            ; если нажата - выход
    cmp ah, 39h         ; пробел нажат
    jnz again           ; если не пробел - пропустить
;   
    xor si, si
    xor di, di
    mov cx, 80*25
next:   lodsw
    mov ah, bl
    stosw 
    loop    next
    add bl, 10h
;   inc bl
    jmp again
 
gtfo:
    mov ax, 4C00h       ; выход в dos
    int 21h         ; прерывание dos-закрыть программу
    end main
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 21:37
Привет! Вот еще темы с решениями:

Изменить цвет фона на зелёный
Задача: поменять цвет фона на зеленый. Немного не понимаю что значит цикл m1....

Стирание текущей строки в консоли после нажатия клавиши escape
Здравствуйте, я написал программу, которая вводит и выводит числа в десятичной...

Как менять цвет фона и цвет надписи кнопки?
Есть кнопка, хочу произвольно менять цвет фона и цвет надписи(в зависимости от...

Как менять толщину и цвет линий по нажатию клавиши?
Как менять толщину и цвет линий по нажатию клавиши:??? линии рисую мышкой


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru