Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 17.12.2015
Сообщений: 6

Изменить цвет фона на зелёный

09.10.2017, 13:24. Показов 9131. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: поменять цвет фона на зеленый.
Немного не понимаю что значит цикл m1. Вроде, выбираем нужный цвет путем изменения битов в байтах. Можете рассказать подробнее? Спасибо.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.386
cseg segment para use16 'CODE'
      assume cs:cseg,ds:cseg,ss:cseg
start:
mov ax,0B800h
mov es,ax
mov si,00h
mov cx,40
m1:
btr word ptr es:[si],12
bts word ptr es:[si],13
btr word ptr es:[si],14
add si,2
loop m1
mov ax,4ch
int 21h
cseg ends
end start
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2017, 13:24
Ответы с готовыми решениями:

Как изменить цвет текста и фона
Куда мне вставить изменения цвета текста и фона :-( ? Подскажите,пожалуйста. Код рабочей программы: d1 segment para public...

В введенном тексте найти цифры и изменить цвет фона данной цифры
Написать COM программу, которая будет выполнять следующие операции: 1. Ожидать ввода текста с клавиатуры. 2. Найти в тексте цифры. 3....

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

5
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
09.10.2017, 21:30
Несколько витееватое решение. Вам нужно обязательно использовать btr/bts?

А цикл по m1 - перебор символов первой половины первой строки экрана.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
09.10.2017, 21:38
Лучший ответ Сообщение было отмечено Userdie как решение

Решение

Userdie, изменение битов в видеобуфере ES:SI, а там у тебя сейчас:
Code
1
2
3
4
5
6
C:\debug
-d b800:0
B800:0000  20 07 20 07 20 07 20 07 - 20 07 20 07 20 07 20 07    . . . . . . . .
B800:0010  20 07 20 07 20 07 20 07 - 20 07 20 07 20 07 20 07    . . . . . . . .
B800:0020  20 07 20 07 20 07 20 07 - 20 07 20 07 20 07 20 07    . . . . . . . .
B800:0030  20 07 20 07 20 07 20 07 - 20 07 20 07 20 07 20 07    . . . . . . . .
..т.е. пробел(20h) с атрибутом(07h) = чистый экран.
Операнд(SI) равен "слово", значит в памяти 0720h.

BTR = Bit-Test-(and)-Reset; BTS = Bit-Test-(and)-Set.
Отсчёт битов с нуля - справо\налево.
Assembler
1
2
3
4
5
6
7
8
9
10
;          Атрибут     Символ
; 0720h = 0000 0111 - 0010 0000
;        15-------8 - 7-------0 
;            07h         20h
 
m1:   btr  word ptr es:[si],12      ; сбросить бит(12) = и так сброшеный!
      bts  word ptr es:[si],13      ; взвести бит(13) = 0010 0111 (фон - зелёный)
      btr  word ptr es:[si],14      ; сбросить бит(14) = и так сброшеный!
      add  si,2                     ; сл.позиция..
loop  m1
Соответственно, если выставить вначале режим 80х25 (AX=3\int 10h - нужно делать всегда, перед работой с в\буфером), то можно смело убирать BTR'-ы, толку от которых нуль. Лучше сперва выставить яркость старшим битом(15), а потом уже выбирать цвет фона оставшимися\тремя.

Например так получишь сине\зелёную решётку, а не чистый\зелёный фон:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      mov  cx,800\2                 ; пол экрана
m1:   bts  word ptr es:[si],15      ; ставим яркий фон
      bts  word ptr es:[si],12      ; цвет фона - синий!
      add  si,2                     ; сл.позиция в окне..
 
      bts  word ptr es:[si],15
      bts  word ptr es:[si],13      ; цвет - зелёный!
      add  si,2
loop  m1
 
;.. или один фон ещё короче (взводим биты старшей тетрады слова):
      mov  cx,800
m1:   or   word ptr es:[si],0E000h  ; ставим ярко\жёлтый фон
      add  si,2
      dec  cx                       ; декремент быстрее чем LOOP
      jnz  m1
2
1 / 1 / 0
Регистрация: 17.12.2015
Сообщений: 6
09.10.2017, 21:42  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Несколько витееватое решение. Вам нужно обязательно использовать btr/bts?
А цикл по m1 - перебор символов первой половины первой строки экрана.
Использовать обязательно. Вот в этом и вопрос как раз.
Как я понял, мы работаем в RGB режиме. BTR - bit test and reset (то есть сбрасываем в ноль), а BTS соответственно bit test and set. В итоге получается, что биты 12 и 14 (почему именно эти биты?) мы сбрасываем, а 13 ставим в единичку. Получится RGB = 010, что значит зеленый цвет.

Вернее, наверно, поставить вопрос о формате данных в видеопамяти в цветных текстовых режимах. Достаточной информации для данного примера не нашел.

upd: пока писал сообщение, уважаемый R71MT ответил на него. Большое спасибо.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6206 / 2441 / 402
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
09.10.2017, 22:06
Цитата Сообщение от Userdie Посмотреть сообщение
Вернее, наверно, поставить вопрос о формате данных в видеопамяти в цветных текстовых режимах.
..по сути всё правильно ты догнал.
В байте-атрибута старшая тетрада это цвет фона, а младшая - цвет символа.
Старший бит(15) отвечает за интенсивность (или мигание).
Начальный видео\режим устанавливать обязательно!
Assembler
1
2
3
4
start:
  mov  ax,3
  int  10h
;...
1
 Аватар для Kukuxumushu
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
10.10.2017, 01:15
Я только не догнал зачем btr/bts, когда можно
Assembler
1
2
3
4
5
mov di,1
...
and byte ptr [di], 0fh
or byte prt [di], 20h
add di,2
и наслаждаться творением хоть в Emu8086.
Да и в cx явно не 40 быть должно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2017, 01:15
Помогаю со студенческими работами здесь

Поменять цвет экрана на зеленый
Добрый день. Необходимо написать подпрограмму, меняющую цвет экрана с черного на зеленый, путем изменения битов в байтах атрибутов...

Программа меняющая цвет экрана на зеленый
Добрый день, помогите пожалуйста написать простенькую программу: Нужно написать программу меняющую цвет экрана на зеленый, путем...

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

При нажатии на зеленую кнопку: цвет фона менять на зеленый
помогите сделать так,что бы при нажетии на зеленую кнопку цвет фона менялся на зеленый

Из вызывающей программы нужно изменить цвет линий, например, красный на зеленый, как это организовать?
Вот такая проблема!!! Есть файл DLL, в нем код для рисования картинки к примеру Canvas->Pen->With = 3,5; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru