Прямое программирование видеопамяти - 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.
- Переменная
ax
используется в качестве регистра общего назначения для хранения и передачи данных. Значение 3 используется для определения режима работы программы. - Команда
int 10h
используется для передачи управления BIOS, что приводит к выводу символа на экран. - Переменная
es
используется как регистр сегмента для доступа к видеопамяти. Значение 0b800h соответствует сегменту видеопамяти. - Переменная
ax
снова используется как регистр общего назначения для хранения и передачи данных. Значение 7020h соответствует начальному адресу видеопамяти. - Переменная
dx
используется как регистр общего назначения для хранения и передачи данных. Значение 10 используется для определения количества выводимых символов. - Переменная
di
используется как регистр индекса для доступа к элементам массива. Значение 0 используется для инициализации регистра. - Цикл
while
начинается с метки @@01. Переменнаяbx
используется как регистр общего назначения для хранения и передачи данных. Значение 10 используется для определения количества выводимых символов. - Команда
push di
используется для отправки значения регистраdi
на стек. - Команда
stosw
используется для вывода символа из видеопамяти на экран. - Условие цикла
while
проверяется, и если оно истинно, то выполнение цикла продолжается. - Значение регистра
di
уменьшается на 1. - Команда
pop di
используется для восстановления значения регистраdi
из стека. - Регистр
di
увеличивается на 160, что соответствует адресу следующего символа в видеопамяти. - Значение регистра
dx
уменьшается на 1. - Условие цикла
while
снова проверяется, и если оно истинно, то выполнение цикла продолжается. - Цикл
while
завершается. - Команда
ret
используется для возврата управления в вызывающую программу. - Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д