Вывод цветной строки n раз - Assembler
Формулировка задачи:
Здравствуйте, как можно вывести какую-нибудь строку в цвете несколько раз? Вывести смог, но с цветом разобраться не могу
Ещё допускается вывод в строку
.model tiny .code org 100h begin: mov cx,10 Label: mov ah,9 mov dx,offset String int 21h dec cx jnz Label ret string db 'privet',13,10,'$' end begin
.model tiny .code org 100h begin: mov cx,10 Label: mov ah,9 mov dx,offset String int 21h dec cx jnz Label ret string db 'privet $' end begin
Решение задачи: «Вывод цветной строки n раз»
textual
Листинг программы
.model tiny .code org 100h begin: ;очистка экрана mov ah, 06h mov cx, 0000h mov dx, 164Fh mov al, 0 mov bh, 07h int 10h ;вывод строк mov bl, 1 ;цвет текста - будет изменятся в цикле mov dl, 1 ;позиция экрана для начала строки X mov dh, 1 ;позиция экрана для начала строки Y push es ;сначала сохраняем регистры es и bp push bp mov ax, ds ;в es:bp помещаем адрес начала строки mov es, ax lea bp, String mov cx, 10 ;счетчик количества выводимых строк @@For: mov ax, 1300h ;функция вывода строки mov bh, 0 ;страница видеопамяти inc bl ;цвет текста, сразу меняем mov dl, dl ;позиция X экрана (не меняем) inc dh ;позиция Y экрана (переходим к следующей) push cx mov cx, LenStr ;длина строки int 10h pop cx loop @@For pop bp ;восстанавливаем регистры pop es int 20h String db 'privet $' LenStr equ $-String end begin
Объяснение кода листинга программы
- Очистка экрана: — Переменная ah содержит код функции 06h (вывод символа). — Переменная cx содержит 0000h (16-битный беззнаковый номер строки). — Переменная dx содержит 164Fh (16-битный беззнаковый номер столбца). — Переменная al содержит 0 (16-битный беззнаковый номер цвета). — Переменная bh содержит 07h (16-битный беззнаковый номер цвета). — Функция 10h (вывод символа) вызывается с регистрами ah, bh, dl, dh, al, bh.
- Вывод строк: — Переменная bl содержит 1 (цвет текста). — Переменная dl содержит 1 (позиция X экрана). — Переменная dh содержит 1 (позиция Y экрана). — Регистры es и bp сохраняются в стеке. — В регистре es содержится адрес начала строки. — Переменная cx содержит 10 (количество строк для вывода). — Функция 1300h (вывод строки) вызывается с регистрами ax, bh, dl, dh, bl, cx. — Цвет текста изменяется на следующий в цикле. — Позиция X экрана не меняется. — Позиция Y экрана увеличивается на 1. — Длина строки сохраняется в переменной cx. — Строка выводится с помощью функции 10h (вывод символа). — Длина строки восстанавливается в переменной cx. — Регистры es и bp восстанавливаются из стека. — Вызывается функция 20h (завершение работы).
- Константы и строки: — Строка 'privet $' содержит текст для вывода. — Переменная LenStr содержит длину строки (11 байт). — Строка и длина строки определены с помощью директивы db (декларация строки). — Строка и длина строки могут быть изменены на другие значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д