Изменение цвета выводимого сообщения в консоли [C+asm] - C (СИ)
Формулировка задачи:
Всем доброго времени суток!
Есть задачка, где нужно вывести определённое сообщение с определёнными атрибутами (цвет символов/цвет символов+цвет фона).
Я посимвольно инициализировал строки, и решил циклом к каждому символу применить с помощью ассемблера нужные атрибуты.
Проблема: Не знаю, как применить атрибуты.
Вот мой код:
То есть, вопрос таков: как с помощью ассемблерной вставки изменить цвет букв в консоли?
Заранее спасибо за помощь..)
Вот это дело выводит примерно по центру экрана синюю полоску с красными точками внутри. Подскажите пожалуйста, как можно эту полосочку переместить туда, где находится моя строка?
#include <conio.h>
#include <stdio.h>
void main()
{
char string_1[12]={'B','l','a','c','k','_','M','e','t','a','l','\0'};
char string_2[11]={'D','o','o','m','_','M','e','t','a','l','\0'};
char string_3[12]={'D','r','o','n','e','_','M','e','t','a','l','\0'};
clrscr();
printf("Press any key to continue after each string..");
getch();
clrscr();
asm mov ax,3
asm int 0x10
for (char i=0;i<12;i++)
{ //тут должна быть вставка, которая изменяет цвет
//по-сути, в регистр (например, в ax) нужно занести i, но в таком случае компилятор говорит
//"invalid combination of opcode and operands"
putchar(string_1[i]);
}
getch();
clrscr();
for (char j=0;j<11;j++)
{
putchar(string_2[j]);
}
getch();
clrscr();
for (char q=0;q<12;q++)
{
putchar(string_3[q]);
}
getch();
clrscr();
printf("Done!");
getch();
}
Есть прогресс)
asm push 0B800h
asm pop es
asm mov si, offset string_1
asm mov ah,094h
asm lodsb
asm stoswРешение задачи: «Изменение цвета выводимого сообщения в консоли [C+asm]»
textual
Листинг программы
#include <iostream>
int main()
{
std::cout << "\033[031m A line of text in red\n \
\033[032m A line of text in green\n \
\033[033m A line of text in brown\n \
\033[034m A line of text in blue\n \
\033[035m A line of text in magenta\n \
\033[036m A line of text in cyan\n \
\033[037m A line of text in white\n \
\033[0m" << std::endl;
}
Объяснение кода листинга программы
- Включаем заголовочный файл iostream для использования функций вывода и ввода.
- Задаем цвет текста в консоли как красный, используя ASCII-код управления цветом текста.
- Выводим первую строку текста
A line of text in red. - Задаем цвет текста в консоли как зеленый, используя ASCII-код управления цветом текста.
- Выводим вторую строку текста
A line of text in green. - Задаем цвет текста в консоли как коричневый, используя ASCII-код управления цветом текста.
- Выводим третью строку текста
A line of text in brown. - Задаем цвет текста в консоли как синий, используя ASCII-код управления цветом текста.
- Выводим четвертую строку текста
A line of text in blue. - Задаем цвет текста в консоли как пурпурный, используя ASCII-код управления цветом текста.
- Выводим пятую строку текста
A line of text in magenta. - Задаем цвет текста в консоли как зеленый, используя ASCII-код управления цветом текста.
- Выводим шестую строку текста
A line of text in cyan. - Задаем цвет текста в консоли как белый, используя ASCII-код управления цветом текста.
- Выводим седьмую строку текста
A line of text in white. - Задаем цвет текста в консоли по умолчанию, используя ASCII-код управления цветом текста.
- Выводим восьмую строку текста
A line of text in default color. - Завершаем функцию main().
- Конец кода.
- В консоли выводится последовательность строк текста, каждая из которых имеет свой уникальный цвет.