Вывод цветной строки n раз - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, как можно вывести какую-нибудь строку в цвете несколько раз? Вывести смог, но с цветом разобраться не могу
Листинг программы
  1. .model tiny
  2. .code
  3. org 100h
  4. begin:
  5. mov cx,10
  6. Label:
  7. mov ah,9
  8. mov dx,offset String
  9. int 21h
  10. dec cx
  11. jnz Label
  12. ret
  13. string db 'privet',13,10,'$'
  14. end begin
Ещё допускается вывод в строку
Листинг программы
  1. .model tiny
  2. .code
  3. org 100h
  4. begin:
  5. mov cx,10
  6. Label:
  7. mov ah,9
  8. mov dx,offset String
  9. int 21h
  10. dec cx
  11. jnz Label
  12. ret
  13. string db 'privet $'
  14. end begin

Решение задачи: «Вывод цветной строки n раз»

textual
Листинг программы
  1. .model tiny
  2. .code
  3. org 100h
  4.  
  5. begin:
  6.         ;очистка экрана
  7.         mov     ah,     06h
  8.         mov     cx,     0000h
  9.         mov     dx,     164Fh
  10.         mov     al,     0
  11.         mov     bh,     07h
  12.         int     10h
  13.  
  14.         ;вывод строк
  15.         mov     bl,     1       ;цвет текста - будет изменятся в цикле
  16.         mov     dl,     1       ;позиция экрана для начала строки X
  17.         mov     dh, 1           ;позиция экрана для начала строки Y
  18.  
  19.         push    es              ;сначала сохраняем регистры es и bp
  20.         push    bp
  21.         mov     ax,     ds       es:bp помещаем адрес начала строки
  22.         mov     es,     ax
  23.         lea     bp,     String
  24.  
  25.         mov     cx,     10      ;счетчик количества выводимых строк
  26. @@For:
  27.         mov     ax,     1300h   ;функция вывода строки
  28.         mov     bh,     0       ;страница видеопамяти
  29.         inc     bl              ;цвет текста, сразу меняем
  30.         mov     dl,     dl      ;позиция X экрана (не меняем)
  31.         inc     dh              ;позиция Y экрана (переходим к следующей)
  32.         push    cx
  33.         mov     cx,     LenStr  ;длина строки
  34.  
  35.         int     10h
  36.         pop     cx
  37.  
  38.         loop    @@For
  39.  
  40.         pop     bp      ;восстанавливаем регистры
  41.         pop     es
  42.  
  43.         int 20h
  44.  
  45. String  db      'privet $'
  46. LenStr  equ     $-String
  47.  
  48. end     begin

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

  1. Очистка экрана: — Переменная ah содержит код функции 06h (вывод символа). — Переменная cx содержит 0000h (16-битный беззнаковый номер строки). — Переменная dx содержит 164Fh (16-битный беззнаковый номер столбца). — Переменная al содержит 0 (16-битный беззнаковый номер цвета). — Переменная bh содержит 07h (16-битный беззнаковый номер цвета). — Функция 10h (вывод символа) вызывается с регистрами ah, bh, dl, dh, al, bh.
  2. Вывод строк: — Переменная 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 (завершение работы).
  3. Константы и строки: — Строка 'privet $' содержит текст для вывода. — Переменная LenStr содержит длину строки (11 байт). — Строка и длина строки определены с помощью директивы db (декларация строки). — Строка и длина строки могут быть изменены на другие значения.

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


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

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

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы