Изменение цвета выводимого сообщения в консоли [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;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл iostream для использования функций вывода и ввода.
  2. Задаем цвет текста в консоли как красный, используя ASCII-код управления цветом текста.
  3. Выводим первую строку текста A line of text in red.
  4. Задаем цвет текста в консоли как зеленый, используя ASCII-код управления цветом текста.
  5. Выводим вторую строку текста A line of text in green.
  6. Задаем цвет текста в консоли как коричневый, используя ASCII-код управления цветом текста.
  7. Выводим третью строку текста A line of text in brown.
  8. Задаем цвет текста в консоли как синий, используя ASCII-код управления цветом текста.
  9. Выводим четвертую строку текста A line of text in blue.
  10. Задаем цвет текста в консоли как пурпурный, используя ASCII-код управления цветом текста.
  11. Выводим пятую строку текста A line of text in magenta.
  12. Задаем цвет текста в консоли как зеленый, используя ASCII-код управления цветом текста.
  13. Выводим шестую строку текста A line of text in cyan.
  14. Задаем цвет текста в консоли как белый, используя ASCII-код управления цветом текста.
  15. Выводим седьмую строку текста A line of text in white.
  16. Задаем цвет текста в консоли по умолчанию, используя ASCII-код управления цветом текста.
  17. Выводим восьмую строку текста A line of text in default color.
  18. Завершаем функцию main().
  19. Конец кода.
  20. В консоли выводится последовательность строк текста, каждая из которых имеет свой уникальный цвет.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы