Вывод цветной строки 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 (декларация строки). — Строка и длина строки могут быть изменены на другие значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д