Открываем turbo Pascal 7
begin
{Устанавливаем графический режим монитора 13h, 320x200, 256 цветов}
asm
mov ax,0013h
int 10h
end;
asm
mov ax,0A000h
mov es,ax
{Рисуем - раз}
mov byte ptr es:[320*10+10],12
mov byte ptr es:[320*10+11],12
mov byte ptr es:[320*10+12],12
mov byte ptr es:[320*11+10],12
mov byte ptr es:[320*11+11],12
mov byte ptr es:[320*11+12],12
mov byte ptr es:[320*12+10],12
mov byte ptr es:[320*12+11],12
mov byte ptr es:[320*12+12],12
{Рисуем - два}
mov byte ptr es:[320*100+100],1
mov byte ptr es:[320*101+101],2
mov byte ptr es:[320*102+102],3
mov byte ptr es:[320*103+103],4
mov byte ptr es:[320*104+104],5
mov byte ptr es:[320*105+105],6
end;
{Ожидаем нажатия клавиши}
asm
mov ah,0
int 16h
end;
{Устанавливаем текстовый режим монитора 03h, 80x25, 16 цветов текста и фона}
asm
mov ax,0003h
int 10h
end;
end.
Ага. Теперь скомпиллируйте ЭТО и запустите на выполнение. Что Вы видите ?
(Должны увидеть квадратик и цепочку точек). Нажав клавишу, Вы должны закрыть
графическое окно и вернуться в среду.
НЕбольшое техническое отступление. Синтаксис асм-вставок в tp7.
Асм-вставка начианется псевдооператором "asm". Далее идут сами ассемблерные
команды(Вы должны видеть их зелеными). Завешает блок асм директива
"end;" - как, врочем, и другие логически завершенные блоки в Pascal.
Теперь посмотрим на команды. Их не так много и они довольно одинаковы.
Отбросим пока вот эти три блока, дав им поверхностное объяснение:
asm
mov ax,0013h
int 10h
end;
Пока примите, как факт, что для вызова Операционной системы, BIOS или
других программ обычно используются вот такие вот записи(команды):
mov ax,0013h - это пример ЗАДАНИЯ ПАРАМЕТРОВ, передаваемых другим
программам;
int 10h - это ВЫЗОВ других программ Вашей машины - здесь это вызов BIOS.
{Ожидаем нажатия клавиши}
asm
mov ah,0
int 16h
end;
mov ah,0 - это пример ЗАДАНИЯ ПАРАМЕТРОВ, передаваемых другим
программам;
int 16h - это ВЫЗОВ других программ Вашей машины - здесь это вызов BIOS.
Итак, вернемся к тем командам, которые откомментарены как " {Рисуем - раз}"
и "{Рисуем - два}". Попытайтесь понять, чем они похожи, а чем отличаются...
... Вы должны были заметить, что вот эти команды:
mov byte ptr es:[320*10+10],12
mov byte ptr es:[320*10+11],12
...
в более общем виде можно записать как:
mov byte ptr es:[Что-то],Еще что-то.
Попробуйте самостоятельно поменять эти "Что-то" и "Еще что-то" у нескольких
команд. Посмотрите на результат. Создайте еще несколько подобных команд.
Проявите фантазию в разумных пределах и насоздавайте еще разных
подобных команд.
Попытайтесь сделать самостоятельно какие-то обобщения по результатам.
А теперь небольшое задание. Исходный пример рисовал нам красный квадратик в
верхнем левом углу экрана. Попробуйте на основе полученного опыта ТОЛЬКО с
помощью команд типа:
mov byte ptr es:[Что-то],Еще что-то.
нарисовать синий прямоугольник, но уже в нижнем правом углу экрана.
Подсказка: обратите внимание вот на этот комментарий:
{Устанавливаем графический режим монитора 13h, 320x200, 256 цветов}
Урок 1 закончен. Решение и некоторые объяснения будут даны в уроке 2 |