| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Вывод цветного текста - мож. кому пригодится... |
| Автор: Ruterian 12.2.2004, 16:30 |
| Давно хотел сделать процедуру, аналогичную 09h функции int 21h, но для вывода строк в цвете (как в языках высокого уровня). И, вот, придумал Адрес строки передаем в ES:BP далее просто вызываем ЭТО :-) Можно писать текст в виде <$><атрибут1>,<текст1>,<$><атрибут2>,<текст2>,0 Длину строки указывать не надо, положение не надо - пишет от курсора. Перед строкой, и внутри её, можно использовать следующие управляющие символы: 24h - признак цвета. Указывает, что следующий за ним байт нужно рассматривать как атрибут. 0Ah и 0Dh - перенос строки и возврат курсора на 0-ю колонку. Работают, если перед ними нет символа 24h. 0 - признак конца строки. Схема строки в виде <текст>,0 будет рассматриваться как белый на черном. Признак цвета и управляющий символ можно вставлять в любое место строки. color_string: mov ax,0300h ; получить адрес курсора mov bx,0 int 10h set_att: cmp byte ptr [es:bp],24h ; анализируем первый знак je yes_color ; если это признак цвета, то следующий - атрибут jmp no_color yes_color: inc bp ; получаем атрибут jmp nbw ; далее обращаемся как с атрибутом anal_att: cmp byte ptr [es:bp],20h jl nbw ; если первый знак - не атрибут no_color: mov bl,07h ; писать белым на черном jmp clr_txt nbw: mov bl,[es:bp] ; выделяем атрибут из строки inc bp clr_txt: mov cx,1 ; вывести один символ mov ax,1301h ; функция cmp byte ptr [es:bp],0 ; ищем признак конца строки je endoftxt cmp byte ptr [es:bp],24h ; ищем след.признак цвета в строке je yes_color cmp byte ptr [es:bp],13 jne no_ret_cur xor dl,dl no_ret_cur: int 10h ; пишем текст inc bp ; получам адрес след.символа cmp byte ptr [es:bp-1],13 je no_move_cur cmp byte ptr [es:bp-2],13 je no_move_cur inc dx ; перемещаем курсор no_move_cur: jmp clr_txt endoftxt: retn |