| РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты в разделе | Номер выпуска: | 1698 | | Дата выхода: | 22.06.2018, 14:45 | | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | | Подписчиков / экспертов: | 59 / 20 | | Вопросов / ответов: | 1 / 1 | Консультация # 193398: Уважаемые эксперты! Пожалуйста, помогите закомментировать каждую строчку буду очень благодарен так как не совсем понимаю код программы ... Консультация # 193398: Уважаемые эксперты! Пожалуйста, помогите закомментировать каждую строчку буду очень благодарен так как не совсем понимаю код программы
model tiny code org 100h n equ 8;количество строк-столбцов m equ 3;количество символов на поле mh equ 2;норизонтальная коррекция mv equ 1;вертикальная коррекция char equ 0DBh;выводимый символ white equ 15;цвет символа time equ 1Fh;задержка ;начальные установки begin: mov ax,3 int 10h mov ax,0B800h mov es,ax mov si,40h mov ds,si mov ax,white*256+char ;работа start: xor di,di ;цикл по строкам mov cx,n L1: push cx ;цикл размера строки mov cx,mv*m L2: push cx ;цикл в строке push di mov cx,n L3: push cx ;цикл одно поле mov cx,mh*m rep stosw xor al,char ; pop cx loop L3 pop di add di,160 ; pop cx loop L2 xor al,char ; pop cx loop l1 xor ax,char ;ожидание wait: mov bx,[si] and bx,time jnz wait ;контроль выхода push ax mov ah,1 int 16h pop ax jz start push ax xor ax,ax int 16h cmp ah,1 pop ax jnz start ret end begin Дата отправки: 17.06.2018, 14:35 Вопрос задал: rmd (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, rmd! Держите... Разбирайтесь...
model tiny ;модель памяти, все в одном сегменте code ;сегмент кода org 100h ;необходимо для формата файла COM n equ 8 ;количество строк-столбцов (размерность доски) m equ 3 ;количество символов на поле (высота и ширина клетки) mh equ 2 ;горизонтальная коррекция (высота символа в 2 раза больше, чем ширина) mv equ 1 ;вертикальная коррекция (вертикальная не меняется) char equ 0DBh ;выводимый символ "полностью закрашенный прямоугольник" в кодировке ДОС white equ 15 ;цвет символа (ярко-белый) time equ 1Fh ;задержка (умножается на тик таймера 1/18.2 сек) под Windows весьма условно ;начальные установки begin: ;начало программы mov ax,3 ;ah=0 - установка видеорежима, al=3 - текстовый 25х80 int 10h ; вызов видеосервис БИОСа (необходимо для прямой записи в память под XP+) mov ax, 0B800h ;адрес сегмента видеопамяти mov es, ax ;будем адресовать видеопамять при помощи ES mov si, 40h ;адрес сегмента данных ДОСа и, одновременно, смещение переменной ДОСа, ; в которой лежит переменная для автоматического подсчета паузы mov ds, si ;сегмент ДОСа адресуем при помощи DS mov ax,white*256+char ;выводимый символ с цветом ;работа (выводим доску) start: xor di, di ;адрес в видеосегменте (будем выводить с начала 0 страницы) ;цикл по строкам mov cx, n ;количество строк клеток L1: push cx ;сохраним в стеке ;цикл размера строки mov cx, mv*m ;количество строк в клетке (с учетом коэффициента 1) L2: push cx ;сохраняем в стеке ;цикл в строке push di ;сохраним адрес вывода (для перехода на другую строку) mov cx, n ;количество клеток в строке L3: push cx ;цикл вывода полной строки символов ;цикл одно поле mov cx, mh*m ;количество символов в клетке (с учетом коэффициента 2) rep stosw ;выводим одну строку клетки xor al, char ;меняем символ 0dbh <-> 0 (для соседней клетки) ; pop cx ;восстанавливаем счетчик клеток в строке loop L3 ;на повтор вывода одной полной строки pop di ;восстанавливаем адрес выводимых символов add di, 160 ;на адрес следующей строки 80*2 ; pop cx ;восстанавливаем счетчик строк в клетке loop L2 ;на вывод всех полных строк одного ряда клеток xor al, char ;меняем символ клетки для следующего ряда клеток ; pop cx ;восстанавливаем количество строк клеток loop l1 ;на вывод остальных строк клеток xor ax, char ;меняем начальный символ для следующего вывода, чтобы доска меняла раскраску ;ожидание wait: mov bx, [si] ;читаем системный счетчик тиков and bx, time ;проверяем его, сменились ли младшие 5 бит на 0 jnz wait ;нет - ждем ;контроль выхода ;проверяем выход по ESC push ax ;сохраним выводимый символ и атрибут (цвет) в стеке mov ah, 1 ;опрос, есть ли что "от клавиатуры" int 16h ;сервис клавиатуры pop ax ;восстановим символ и цвет jz start ;нажатия не было - на новый вывод push ax ;опять сохраним, т.к. было нажатие xor ax, ax ;считываем код клавиши int 16h cmp ah, 1 ;ah = скан-код, равно ESC? pop ax ;восстановим символ и цвет jnz start ;нет - на повтор вывода ret ;равно - выходим, фактически переходим на смещенио 0, ; там находится команда int 20h, которая и завершает программу end begin ;конец программы с указанием начальной точки программы
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий