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

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

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

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

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

textual
Листинг программы
model tiny
.code
org 100h
start:  mov ax,3
    int 10h
    mov ax,0b800h
    mov es,ax
    mov ax,7020h
    mov dx,10
    xor di,di
@@01:   mov bx,10
    push    di
@@02:   stosw
    dec bx
    jnz @@02
    pop di
    add di,160
    dec dx
    jnz @@01
    ret
    end start

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

В коде, написанном на языке Assembler, описывается процедура вывода строки HELLO, WORLD! в шестнадцатеричном формате в кодировке 437GCT.

  1. Переменная ax используется в качестве регистра общего назначения для хранения и передачи данных. Значение 3 используется для определения режима работы программы.
  2. Команда int 10h используется для передачи управления BIOS, что приводит к выводу символа на экран.
  3. Переменная es используется как регистр сегмента для доступа к видеопамяти. Значение 0b800h соответствует сегменту видеопамяти.
  4. Переменная ax снова используется как регистр общего назначения для хранения и передачи данных. Значение 7020h соответствует начальному адресу видеопамяти.
  5. Переменная dx используется как регистр общего назначения для хранения и передачи данных. Значение 10 используется для определения количества выводимых символов.
  6. Переменная di используется как регистр индекса для доступа к элементам массива. Значение 0 используется для инициализации регистра.
  7. Цикл while начинается с метки @@01. Переменная bx используется как регистр общего назначения для хранения и передачи данных. Значение 10 используется для определения количества выводимых символов.
  8. Команда push di используется для отправки значения регистра di на стек.
  9. Команда stosw используется для вывода символа из видеопамяти на экран.
  10. Условие цикла while проверяется, и если оно истинно, то выполнение цикла продолжается.
  11. Значение регистра di уменьшается на 1.
  12. Команда pop di используется для восстановления значения регистра di из стека.
  13. Регистр di увеличивается на 160, что соответствует адресу следующего символа в видеопамяти.
  14. Значение регистра dx уменьшается на 1.
  15. Условие цикла while снова проверяется, и если оно истинно, то выполнение цикла продолжается.
  16. Цикл while завершается.
  17. Команда ret используется для возврата управления в вызывающую программу.
  18. Код завершается.

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


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

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

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