Заполнение половины экрана символами - Assembler
Формулировка задачи:
Добрый день, помогите решить задачу
необходимо при нажатой правой кнопке заполнить верхнюю часть экрана, при нажатой левой - нижнюю часть
Размеры экрана 80*25
тут мы определяем границы заливки экрана. StateL - состояние левой кнопки, stateR - состояние правой кнопки
Далее необходимо прописать алгоритм заполнения половины экрана. Вот тут что-то трудности
Можно одним циклом посчитать границы сразу в символах от начала экрана
0*80 ... 12*80-1
12*80 ... 25*80-1
Но вот как это прописать кодом?
Вот пытался, но что-то не работает(
Di - номер колонки
Si = номер символа на экране
mov dx,24 ; нижняя граница mov bx,0 ; верхняя граница test ax,02h ; нажата левая кнопка? jz lbl01 ; нет mov dx,12 ; нижняя граница - половина экрана mov al,stateL xor al,1 mov stateL,al ; al - что сделать? 1 - заполнить 0 чистить lbl01: ; левую проверили test ax,08h;? правая jz lbl02 mov bx,12 mov al,stateR xor al,1 mov stateR,al; что делаем? lbl02:
mov cx,80 ; 80 колонок - от 1 до 80 cyccol: ; цикл по строкам imul si,cx,25; si = (cx - 1) * 25 + di sub si,25 ; add si,di ;
Решение задачи: «Заполнение половины экрана символами»
textual
Листинг программы
mov ax,0B800h mov es,ax ;сегментный адрес видеопамяти xor di,di ;смещение от начала видеопамяти 0 mov ax,sym ;выводимы символ mov cx,m * n ;число столбцов * число строк rep stosw ;за этой инструкцией в гугл
Объяснение кода листинга программы
- mov ax,0B800h — Задаём сегментный адрес видеопамяти
- mov es,ax — Передаём значение переменной ax в регистр es
- xor di,di — Обнуляем смещение от начала видеопамяти
- mov ax,sym — Передаём символ в переменную ax
- mov cx,m * n — Перемножаем значения переменных m и n и передаём результат в регистр cx
- rep stosw — Выводим символ на экран, используя значение смещения от начала видеопамяти и количество столбцов и строк, которые нужно заполнить.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д