Прямое программирование видеопамяти - Assembler (224112)

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

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

Привет мальчики и девочки Помогите пожалуйста сделать задание, потому что я не знаю как. Сейчас у меня дистанционное обучение и все что у меня есть - это гугл. Ассемблер для меня темный лес, но лабораторную сдать нужно. Для знающих и любящих этот язык, эта задача на 15мин, а я читаю методичку и ничего не понимаю. Буду очень признательна за помощь! Задание: Заполнить 0-у страницу видеопамяти произвольным текстом, используя для правой и левой частей экрана разные значения атрибута фона(Старшая тетрада атрибута символа).

Решение задачи: «Прямое программирование видеопамяти»

textual
Листинг программы
start:                   ;
   MOV   AX,3            ; видеорежим 80х25/16 (текст)
   INT   10h             ;
   MOV   AH,9            ; напрос на ввод строки
   MOV   DX,mess0        ;
   INT   21h             ;
 
   PUSH  0B800h          ; видеобуфер в ТХТ-режиме
   POP   ES              ;
   XOR   DI,DI           ; сбрасываем позицию в окне
   ADD   DI,320          ; пропускаем мессагу (строка 3)
@print:                  ; внешний цикл
   MOV   CX,80           ; кол-во символов в строке
   MOV   BL,90h          ; синий фон, чёрный символ
@@:                      ; внутренний цикл (1 строка)
   XOR   AX,AX           ; ждём символ с клавиатуры
   INT   16h             ;
   CMP   AL,13           ; ENTER ?
   JE    exit            ; да - выходим в DOS
   MOV   AH,BL           ; заносим атрибут в АН
   STOSW                 ; отправляем символ в видеобуфер!
   CMP   CX,40           ; достигли половины экрана?
   JNZ   next            ; нет - продолжаем ввод
   ADD   BL,10h          ; да - меняем фон на зелёный
next:                    ;
   LOOP  @b              ; мотаем, пока СХ > 0
   JMP   @print          ; переходим на вторую строку..

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

Код представляет собой программу на языке Assembler, которая выполняет следующие действия:

  1. Устанавливает видеорежим 80x25/16 (текст).
  2. Выводит на экран строку Press any key to continue....
  3. Переходит в бесконечный цикл, в котором:
    • Во внешнем цикле (при помощи регистра CX) выводятся символы строки.
    • При вводе символа Enter (код 13) происходит выход из цикла и переход к следующей строке.
    • Внутренний цикл (при помощи регистра CX) выводит символ с клавиатуры в видеобуфер.
    • Если символы достигли середины экрана, меняется цвет фона на зелёный.
  4. После завершения внутреннего цикла происходит переход к следующей строке.
  5. Если символ, введенный с клавиатуры, равен Enter, программа завершается и происходит переход в DOS.
  6. Если символы достигли середины экрана, меняется цвет фона на зелёный.
  7. Цикл продолжается до тех пор, пока не будет введено значение Enter.

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы