![]() |
|
|
![]()
|
|
| Ruterian |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 9.1.2004 Где: Вязьма, Минск Репутация: нет Всего: нет |
Давно хотел сделать процедуру, аналогичную 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 Это сообщение отредактировал(а) Ruterian - 12.2.2004, 16:34 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |