Человеку, занимающимся программированием на языке Ассемблера в операционной системе MS-DOS часто приходится использовать одни и те же конструкции для инициализации программы, использовать однотипные операции и функции. При этом код повторяется «один в один», и при его наборе можно сделать досадную ошибку. Чтобы это не делать, автор разработал несколько простых шаблонов для осуществления часто встречающихся однотипных операций, и предлагает к его использованию согласно лицензии GPL . Ниже приводится описание этих шаблонов.
1.9.1. Введение
Данные шаблоны предназначены для создания исходного кода на языке Ассемблер для операционной системе MS-DOS и совместимых с нею операционных системах, в том числе и для Microsoft Windows 95-7. В этих шаблонах есть повторяющиеся элементы, смысл которых будет объяснён ниже.
- Директива: page — указывает, сколько строк и позиций будет содержать листинг программы, генерируемый транслятором Ассемблера. Лучше оставить его значение, указанное в шаблоне: 60 строк и 132 позиции в строке, page 60,132;
- Директива: TITLE — указывает, как будет озаглавлен листинг программы, и какие колонтитулы будут печататься при выводе листинга. После этой директивы может идти любой текст, общий длиной до 60 символов. Автор рекомендует в качестве текста использовать имя и назначение программы;
- Директива: ASSUME — указывает, какой сегмент поставлен в соответствие определённому сегментному регистру. По-умолчанию сегменту кода соответствует регистр CS , сегментам данных — DS и ES , сегменту стека — SS . Эти сегменты должны быть определены оператором: SEGMENT перед вызовом этой директивы. Сам вызов этой директивы осуществляется в сегменте кода, обязательно перед вызовом других операторов программы. Если по каким-то причинам часть сегментных регистров не используется, вместо указания имени регистра используется слово: «NOTHING» , например: ES:NOTHING ;
- Оператор: SEGMENT — определяет имя и параметры сегмента, используемого в программе на языке Ассемблер. В качестве параметров используются:
- Имя сегмента — располагается перед именем оператора. Оно обозначает метку, под которой данный сегмент идентифицируется в программе на языке Ассемблер. Это имя фигурирует при объявлении сегмента директивой: ASSUME . Это имя используется также в операторах загрузки адреса сегмента;
- Параметр выравнивания сегмента по границе сегмента PARA . Автор рекомендует этот параметр к обязательному использованию;
- Параметр: STACK — используется только для сегментов стека. Указывает, что данный сегмент является сегментом стека;
- Параметр, заключённый в апострофы — указывает компилятору, как будут компоноваться сегменты и их содержимое при выводе листинга ассемблерного файла. Иными словами, он определяет необязательный «класс сегмента». Рекомендуется для сегментов с кодом указывать класс: ‘Code’ , для сегментов с данными — класс ‘Data’ , для сегментов стека — класс ‘Stack’ ; Примечание. Несколько сегментов можно указывать только для программ с форматом файла: «EXE». Для файлов в формате «COM» возможен только один сегмент, и этот сегмент — кодовый.
Во избежание путаницы не желательно переопределять имена сегментов и процедур, приведённые в шаблонах.
DDoS атака на сайт школы
Как ддосить сайты?
Более подробное описание этих директив и операторов языка ассемблер смотри в книге Питера Абеля.
1.9.2. Формат «EXE». Шаблон для создания файла в формате «EXE» Simple001
Исполняемый MS-DOS файл формата EXE обязательно должен содержать в себе следующие сегменты:
- Сегмент кода (с кодом программы). Таких сегментов может быть несколько, если выполняемая программа содержит множество процедур;
- Сегмент стека. Этот сегмент нужен как для инициализации программы, так и для работы операторов PUSH и POP . В программе на языке Ассемблер указывается максимальный размер стека (это значение Вы должны поставить при объявлении этого сегмента).
- Сегменты данных. В-принципе, это не обязательный сегмент, тем не менее, часто используемый. В этом сегменте объявляются пользовательские переменные и константы языка Ассемблер, которые нужны для вычислений. Если в описании конструкций языка Ассемблер используется комментарий «в сегменте данных», то эти константы и переменные должны быть записаны в одном из сегментов данных.
При инициализации программы на языке Ассемблер для исполняемых файлов в формате «EXE» должны присутствовать следующие операторы:
- PUSH DS — сохранение в стеке содержимого регистра DS . Первоначально в этом регистре находился адрес загрузчика программ в командной оболочке MS-DOS;
- Далее в стек необходимо записать значение «0» . Это значение используется для инициализации загрузчика MS-DOS после выполнения программы;
- Затем в регистр DS заносится адрес сегмента с данными выполняемой программы;
- Только после этого пишется код программы на языке Ассемблер.
- Основная процедура программы (как и любая процедура на языке Ассемблер) заканчивается оператором «RET» . Этот оператор приводит сегментные регистры в первоначальное состояние и возвращает управление вызывающей программе или загрузчику командной оболочки .
Таким образом, зарезервированными словами шаблона программы на языке Ассемблер являются следующие слова:
Пример шаблона смотри ниже
page 60,132 TITTLE SIMPLE001 (EXE) Пример шаблона на языке Ассемблер ; ——————————————————— STACKSG SEGMENT PARA STACK ‘Stack’ ; — STACKSG ENDS ; ——————————————————— DATASG SEGMENT PARA ‘Data’ ; — DATASG ENDS ; ——————————————————— CODESG SEGMENT PARA ‘Code’ BEGIN PROC FAR ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:DATASG ; — ИНИЦИАЛИЗАЦИЯ exe ФАЙЛА — PUSH DS ; Записать DS в стек SUB AX, AX ; Установить ноль в AX PUSH AX ; Записать ноль в стек MOV AX, DATASG ; Занести адрес MOV DS, AX ; DATASG в DS ; — RET ; Возврат в DOS BEGIN ENDP CODESG ENDS END BEGIN ; — Конец программы
1.9.3. Формат «COM». Шаблон для создания файла в формате «COM» Simple002
Исполняемый файл в формате «COM», написанный на языке Ассемблер, содержит только один сегмент — сегмент кода. Поэтому в директиве ASSUME все регистры инициализируются только одним значением: CODESG .
Для инициализации «COM» файла необходимо вначале вызвать оператор «ORG» , с помощью которого производится пропуск части кода системного загрузчика программы. Затем идёт определение переменных и констант, используемых в программе. Поскольку в файлах формата «COM» нет сегмента данных, то объявление переменных происходит в начале программы, сразу за адресом загрузчика оболочки. Поскольку, по логике MS-DOS, в первом адресе исполняемой программы в сегменте кода должен быть исполняемый оператор, а не директива определения констант, то первым оператором «COM» программы будет оператор безусловного перехода на метку JMP . В качестве метки выступает имя основной процедуры исполняемого файла «MAIN» . Между этими операторами будут располагаться описание констант и переменных программы, которое в файлах формата «EXE» располагались в сегменте данных.
Имена процедур в файле формата «COM» должны обязательно иметь параметр «NEAR» , поскольку в файлах этого формата допустимы лишь «короткие» адреса памяти (то есть только смещение относительно сегмента кода текущей программы). Заканчиваться процедура должна оператором: «RET» (последний выполняемый оператор ) и, затем, оператором: «метка программы» ENDP» . Собственно же программа должна заканчиваться директивой: «END «метка оператора JMP» .
Таким образом, зарезервированными словами шаблона программы на языке Ассемблер являются следующие слова:
Примечание. Рекомендуется писать небольшие программы для операционной системы MS-DOS именно в «COM» формате, где это возможно, поскольку двоичный код в формате «COM» в 3 — 10 раз более компактный, чем в формате «EXE». Соответственно выше и скорость загрузки, меньше время выполнения программы. Однако на размер программ в этом формате накладывается ограничение — не более 64 Кбайт.
Пример шаблона смотри ниже.
page 60,132 TITLE SIMPLE002 (COM) Пример шаблона на языке Ассемблер ; ——————————————————— CODESG SEGMENT PARA ‘Code’ ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:CODESG ; — ИНИЦИАЛИЗАЦИЯ COM ФАЙЛА — ORG 100H BEGIN: JMP MAIN ; ——————————————————— ; — ; ——————————————————— MAIN PROC NEAR ; — ; — Возврат в DOS и завершение программы RET ; Возврат в DOS MAIN ENDP CODESG ENDS END BEGIN ; — Конец программы
1.9.4. «Учебный» шаблон файла на языке «Ассемблер»
page 60,132 TITLE PRENT (COM) Пример шаблона на языке Ассемблер ; ——————————————————— CODESG SEGMENT PARA ‘Code’ ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:CODESG ; — ИНИЦИАЛИЗАЦИЯ COM ФАЙЛА — ORG 100H BEGIN: JMP MAIN ; ——————————————————— ; — В сегменте данных — PRESS_MSG DB 0DH, 0AH, ‘Press key Enter to Exit. ‘, 0DH, 0Ah,’$’ ; — Приглашение PRESS_ENTER LABEL BYTE ; Ссылка на набор полей MAX_ENTER_LEN DB 02H ; Максимальная длина поля — 2 байта CUR_ENTER_LEN DB ? PRESS_BUFFER DB 2 DUP (0) ; Буфер для ввода данных ; ——————————————————— MAIN PROC NEAR ; — CALL PRENTER ; — Возврат в DOS и завершение программы RET ; Возврат в DOS MAIN ENDP ; — ОБЪЯВЛЕНИЕ ПРОЦЕДУРЫ PRENTER PROC NEAR ; — Вывод сообщения MOV AH, 09H LEA DX, PRESS_MSG INT 21H ; — Ввод клавиши ‘Enter’ MOV AH, 0AH LEA DX, PRESS_ENTER INT 21H ; — ВЕРНУТЬСЯ В ВЫЗЫВАЮЩУЮ ПРОГРАММУ RET PRENTER ENDP ; — КОНЕЦ ПРОЦЕДУРЫ CODESG ENDS END BEGIN ; — Конец программы
Источник: intuit.ru
Изучаем язык ассемблера на примере TSR программы под MS-DOS. Часть 1
Эта серия статей посвящена изучению и практике программирования на языке ассемблера.
Материал рассчитан на новичков в ассемблере, студентов, которым пришлось столкнуться с «динозавром» в виде MS-DOS, и может быть интересен тем, кто хочет немного узнать как функционировали операционные системы на заре своего существования.
Писать мы будем резидентную программу (TSR), которая при завершении возвращает управление оболочке операционной системы, но остается в памяти и продолжает своё существование. В современном мире близкий аналог этого понятия — демон/служба.
Программа будет выполнять следующие функции:
- вывод текста вниз экрана по таймеру,
- переключение режима отображения шрифта: italic/normal,
- русификация,
- запрет на ввод прописных русских букв,
- резидентные часы,
- вывод бинарного представления символа.
Предисловие
Материал не претендует на полноту, здесь будут рассматриваться базовые концепции и приемы программирования на языке ассемблера, необходимые для написания программ.
Не буду лишний раз подчеркивать важность ассемблера. Скажу лишь только, что любой уважающий себя профессионал должен понимать как работает его система на всех уровнях, необязательно знать, но понимать нужно.
Немного оговорок. Далее под ассемблером будет пониматься язык ассемблера, а не программа компилятор. MS-DOS часто будет заменяться на dos/дос.
Об умениях, ожидается, что ты имеешь какие-то представления о командной строке, работал с языками высокого уровня (так ты будешь уже знать основные конструкции, используемые в программировании, и увидишь как они реализуются на уровне ниже). В целом, этого хватит.
Про MS-DOS. Всех, наверное, пугает это слово в современном мире. Операционная система, которая уже как 20 лет мертва, но не все так однобоко как кажется на первый взгляд. Минусы понятны: изучение технологии, которая уже сгнила и разложилась, не используемая модель памяти. Но что насчет положительных моментов:
- Ассемблер он и в Африке ассемблер, основные концепции программирования на нем будут везде одинаковы, да где-то будут расширенные регисты, где-то другой интерфейс по работе с операционной системой.
- MS-DOS очень простая операционная система, которая в начале своего существования умещалась в 50 тысяч строк кода, причем ассемблерных (Майкрософт выложила исходники 2-х версий на github). График ее изучения имеет дно, в отличие от современных операционных систем. Аналогией может служить C и C++, последний, наверное, не знает в полной мере со всеми тонкостями ни один человек в мире.
- Операционка работает в реальном режиме процессора, то есть в 16-битном. Это означает, что нет виртуальной памяти, адреса сразу преобразуются в физические с использованием сегментной адресаци памяти. Нет защиты процессов друг от друга, можно обратиться по любому адресу, посмотреть, что там лежит, можно делать с осью все, что тебе вздумается, но могут быть последствия ;). Плюс этот режим до сих пор не вымер, при запуске системы процессор начинает работу именно в этом режиме. Так что это не просто знакомство с историей.
- Из предыдущего пункта понятно, что систему легко сломать, например, переписать адрес аппаратного прерывания по работе с клавиатурой, но в режиме эмуляции dos очень быстро запускается, что очень удобно в таких случаях
- Ось очень близка к железу, есть только процессор, биос и несколько небольших модулей самой операционной системы. В отличие от современных операционок нет всяких питонов, огромного количества подсистем, которые устанешь перечислять.
- в MS-DOS мало встроенной функциональности, она работает в режиме терминала (печатной машинки), и уже первые шаги в написании ассемблерных программ позволяют видеть пользу от них.
- Ассемблер актуален в MS-DOS, и это радует, когда работаешь в ней, потому что иных средств разработки программ не так много там. Но в настоящее время ассемблер используется только в виде вставок в языке Си или в микроконтроллерах.
- Простой формат бинарного файла, точнее его попросту нет. Текст программы компилируется напрямую в машинный код, и получается исполняемый файл .COM, готовый к запуску. Очень удобно начинать обучение с этого, не забивая себе голову всякими разными дерективами, секции, которые необходимы в современных форматах.
Немного про компилятор. Использоваться будет NASM, хотя логичнее было бы использовать досовские компиляторы TASM, MASM, но они не поддерживают мою рабочую операционную систему Линукс, а разрабатываться хочется все-таки в удобстве, поэтому взят nasm. Он популярный, современный, кроссплатформенный (запускается везде, компилируется подо все, включая дос), более умный — позволяет опускать какие-то вещи в синтаксисе, имеет фичи в виде локальных меток, контекстов, всяких других директив.
Настройка
Для начала нам потребуется эмулятор операционной системы DOS под названием DOSBox. Скачать можно здесь, версия 0.74-3. После установки и запуска вы увидите, что-то похожее на это:
Теперь смонтируем папку (сделаем доступной в досе), в которой будут лежать все наши файлы, утилиты. Для этого в хостовой операционной системе создадим папку в домашней директории пользователя или на рабочем столе. Назовем ее, например, dos. После этого в эмуляторе прописываем следующую команду:
Windows: Z:> mount c: C:UsersUsernameDesktopdos
Linux: Z:> mount c: /home/username/dos
Получаем сообщение Drive C is mounted. Теперь все содержимое папочки dos будет отображаться в диске С: в эмуляторе. Перейти в диск C с диска Z можно командой Z:>c: . Это действие придется делать каждый раз при запуске эмулятора, поэтому мы можем положить эту команду в файл конфигурации в секцию autoexec. На линуксе файл находится в /home/username/.dosbox . На виндовс C:UsersUsernameAppDataLocalDOSbox . Открываем файл dosbox-0.74-3.conf и в конец прописываем команду монтирования и перехода в диск C вот таким образом:
[autoexec] # Lines in this section will be run at startup. # You can put your MOUNT lines here. mount c: /home/username/dos c:
Hello world
Напишем первую программу на ассемблере, которая будет выводить на экран избитую фразу hello world:
org 100h mov ah, 09h mov dx, message int 21h int 20h message: db ‘Hello, world!$’
Вот такая маленькая простая программа исполняет наши нужды. Скомпилировать ее можно с помощью насма следующим образом:
nasm hello_world.asm -o hello_world.com
Бинарный .com файл нужно положить в нашу папочку dos, перезапустить дос или запустить в работующем эмуляторе команду rescan, чтобы дос подхватил изменения. Запустить команду можно, начав вводить первые символы имени файла и нажав Tab. Вводить название файла целиком самостоятельно не стоит, потому что долго и потому что с файлами, у которых в имени больше 8 символов, начинаются проблемы. Регистр букв не важен. После запуска, на экране можно будет увидеть фразу Hello, world!.
Теперь о том, что делает каждая строчка, 1-я строка org 100h это указание компилятору на смещение начала инстукций, будет понятно, что это означает, когда мы рассмотрим устройство .com файла и механизм работы процессора в реальном режиме.
8-я строка содержит метку message: , метки это своего рода переменные, в них помещается адрес текущей инструкции, после компиляции, места, где были ссылки на метки будут заменяться реальными адресами. Двоеточие в метках опционально.
Далее идет псевдо-инструкция db (define byte), она не является инструкцией процессора, служит для того, чтобы в текущее место исполняемого файла записать блок данных побайтово. db принимает сколько угодно операндов (аргументов), разделенных запятыми. В нашем случае это один операнд, являющийся строкой из 14 символов (байт), можно было бы записать строку и посимвольно. В конце строки ставится знак $, который дает понять внутренней функции доса, что наступил конец строки. В следующей части поговорим, о том почему у нас данные находятся в конце файла.
3-5 строки подготовка для вызова прерывания 21h и непосредственно сам вызов, прерывание мы обсудим в 3-ей части, в нашем случае это попросту вызов функции операционной системы. В строке 3 мы помещаем число 09h (h значит шестнадцатиричное) в регистр ah. 09h — это номер функции.
В строке 4 записываем в dx адрес начала строки, которую хотим вывести на экран. Теперь понятно зачем нужен $, начало строки дос знает, конец нет.
В строке 5 передаем управление операционной системе с помощью прерывания, по номеру функции дос понимает, что нужно сделать (вывести строку на экран).
В строке 6 используем прерывание 20h для завершения программы, этот способ не совсем корректный, но он простой и хорошо подходит для .com программ.
Не думаю, что стало сильно понятно. Поэтому в следующих частях мы рассмотрим теоретические аспекты: сегментную адресацию памяти, формат файла .com, дебаггер, интерфейс вызовов функций дос, прерывания и снова вернемся к примеру с hello world.
Источник: habr.com
Второе дыхание DOS’а
Продолжаем цикл статей, посвященных программированию. На этот раз мы поговорим о… DOS! Удивлены? Нет, я не ошибся. Дело в том, что DOS — тоже своего рода язык программирования, а не просто операционная система. И его возможности выходят далеко за стандартный поочередный запуск программ.
DOS, конечно, не подойдет для создания компьютерных игр. Тогда зачем мы его рассматриваем? Потому что DOS в качестве языка программирования очень необычен и чрезвычайно функционален. Ведь это и операционная система, и мощный скриптовый язык. С его помощью можно легко и быстро оптимизировать многие рутинные операции с файлами.
Кроме того, с помощью DOS можно создавать загрузочные меню и даже красивые диалоговые мультиокна. Многие думают, что в век гигагерцев и всеобщего XP такая отсталая и нетехнологичная вещь, как DOS, вообще не нужна. Эти люди заблуждаются! Попробую их переубедить. Во-первых, многие не знают о продвинутых возможностях старой доброй дисковой операционки. Вот сегодня и узнают.
Во-вторых, DOS будет почище любого “левого” скриптового языка. Буквально за несколько минут на нем можно написать процедуры для потоковой обработки файлов (например, для очистки определенного мусора с дисков или для “умного” перемещения файлов). В-третьих, в случае серьезного системного сбоя (которые случаются сплошь и рядом) кто нам починит протекшие мозги?
Уж не безопасный ли режим досточтимого Windows? Нет, он тут не функционален. Придется доставать дискетку с DOS — уж он-то не откажет. DOS — очень полезная в игростроевском быту вещь и, вопреки мнению многих, очень удачно сочетается с Windows. Прочитав эту статью, вы убедитесь в его всемогуществе окончательно.
Есть такая ось… Для совсем уж новичков в компьютерном мире кратко расскажу, что есть DOS. Когда-то это была одна из самых популярных операционных систем. DOS — легендарное детище приснопамятной Microsoft , продержавшееся удивительно долго.
Были в то время и другие операционки для PC (например, OS/2, PC DOS, DR DOS, PTS DOS и т.д.), но DOS победил их всех, взяв, как обычно, не качеством, а количеством. Визуально DOS — унылый черный экран с одинокой строчкой внизу.
Для запуска программ, работы с папками (в то время они назывались директориями) и файлами, а также для других служебных операций, характерных для всех осей, приходилось набирать соответствующие команды. Norton тогда еще не придумали, и DOS был единственной возможноcтью хоть как-то работать с компьютером.
Но даже когда появился Norton, пользователи не отказывались от DOS (на самом деле, “Нортон” — это всего лишь оболочка, которая без DOS работать не в состоянии), потому что некоторые специфические функции без него не выполнишь. Шло время, идея оконного интерфейса по цепочке от фирмы к фирме докатилась-таки до Microsoft, и появился он — великий Windows 3.1.
Для пользователей PC это был настоящий праздник (наивные, они очень скоро постигли и обратную, мученическую сторону жизни пользователя окошек). Но суть оставалась той же — Windows 3.1 все еще не был полноценной операционной системой, только надстройкой над DOS. По-настоящему самостоятельным он стал только к версии 95.
Но DOS остался — вместе с хитрым рекламным ходом о полной обратной совместимости. Да, под всеми окошками можно запускать программы для DOS, но какой ценой! Однако сейчас вы убедитесь, что при правильном использовании такой ненужный теперь DOS обретет второе дыхание. Где его найти? Пуск/Программы/Сеанс MS DOS. Перед вами появится черное окошко с белой текстовой строкой.
Это так называемая эмуляция DOS. Обычно ее достаточно для повседневных нужд, но в случае тяжелого сбоя или специфической задачи пользуются настоящим DOS. Для этого надо перезагрузиться и держать нажатой клавишу F8. Появится меню. Надо выбрать строку, в которой фигурирует слово DOS (таких строк обычно несколько).
Полезные мелочи Для начала давайте познакомимся с несколькими полезными мелочами, которые хоть и не имеют прямого отношения к программированию, зато делают жизнь чуточку проще и веселее. У MS DOS очень разветвленная система команд и ключей. Ключи — это параметры команд, которые пишутся после команды через слэш. — Самый распространенный ключ — /?.
Он выводит детальную справку по любой команде и всем ее ключам. — Команды MS DOS делятся на внутренние и внешние. Внутренние команды “зашиты” в командный интерпретатор и выполняются всегда. Внешние команды требуют для своего запуска специальные внешние файлы. Внешние команды — это независимые программы, входящие в состав DOS.
Наше меню в действии.
Тетрис (T), Operation Flashpoint (O), Serious Sam (S), Word (W)if errorlevel 4 goto wordif errorlevel 3 goto samif errorlevel 2 goto operationif errorlevel 1 goto tetris:tetrisc:gamestetristetris.exegoto end:operationc:gamesFlashpointOperationFlashpoint.exegoto end:samc:gamesSamBinSeriousSam.exegoto end:wordс:Program filesMicrosoft OfficeOfficewinword.exegoto end:endВот и весь скрипт. Когда мы запустим его, на экране появится меню из четырех пунктов. Рядом с каждым пунктом в скобках указана соответствующая клавиша.
Нам достаточно нажать эту клавишу, чтобы запустить ту или иную игру или программу. А теперь давайте разберемся, как этот скрипт устроен. Самая первая команда —choice. Она отвечает за вывод на экран вопроса и обработку ответов. После ключа/c:пишутся буквы — варианты ответа.
Если пользователь в ответ на вопрос нажмет одну из этих букв (впрочем, там могут быть любые символы), переменнаяerrorlevelприобретет значение, соответствующее номеру выбранного варианта. Обратите внимание, что текст вопроса пишется без знака вопроса — он автоматически будет подставлен в конце. В переменнойerrorlevelсохранился выбранный пункт меню.
Теперь его надо обработать. Для этого служит конструкцияif**. Это не что иное, как условие, которое проверяется на истинность. Если условие истинно, выполняется какое-то действие. Например, в первой строчке мы сравниваем значениеerrorlevelс4(этот номер соответствует пункту меню “Word”).
Если значение совпадает (то есть пользователь выбрал именно этот пункт), выполняется командаgoto word. Это команда перехода на метку. Метка служит для перехода в какую-то часть программы. Найдите строчку, где написано**:word**. Это и есть метка, на которую перескочит скрипт после выполнения команды.
После метки будет выполняться команда запуска Word, а потом — снова переход на метку. На этот раз метка стоит в самом конце скрипта и ни на что не указывает. Скрипт кончается. Вот и весь принцип действия. Чтобы вы лучше себе это уяснили, попробуем проследить реакцию скрипта на выбор, скажем,Serious Sam.
Скрипт запускается, и на экран выводится меню. Мы нажимаем клавишуS, и в переменнойerrorlevelоказывается значение3. Два первых условия игнорируются, а третье срабатывает — и скрипт переходит на метку**:sam**. После метки идет команда запуска SeriousSam, он запускается, а скрипт по новой метке переходит в самый конец. Зачем нужен последний переход?
Если бы его не было, скрипт бы пошел выполняться дальше и запустил бы еще и Word. А это нам совсем ни к чему.И снова в бой…Теперь, когда вы постигли многие премудрости программирования в DOS, можно коротко пробежаться по его специфическим возможностям. — С помощью командыcallможно из одного скрипта вызывать другой.
В принципе, другой скрипт можно вызвать, просто запустив его как программу. Но командаcallобеспечивает не только запуск другого скрипта, но и продолжение работы текущего скрипта после завершения вызванного. Только не стоит экспериментировать с рекурсивным вызовом скриптов.
Это может привести к зависанию системы. — С помощью командыsetможно установить значения переменных окружения, а также задать собственные переменные. Например, можно изменить значение переменнойerrorlevel. Вызывается эта команда так:set имя_переменной=значение.
Учтите, что значения могут быть только текстовыми. — DOS может оперировать очень сложными символами масок. Знак вопроса заменяет один символ, звездочка — целую группу символов. Поэтому вполне возможна такая маска:?aс. h. Маска***.*** выделяет все файлы. — Командаdeviceзагружает в память драйвер соответствующего устройства.
Обычно эта команда не используется в скриптах — только вconfig.sys. — Для установки значения некоторых переменных не нужна командаset. К таким переменным относятсяfilesиbuffers, которые отвечают за максимальное число одновременно открытых файлов и буферов. — Когда надо организовать задержку перед каким-то действием (или когда выполнилось одно действие и готовится выполняться второе), можно использовать командуpause.
Она приостанавливает работу скрипта и выводит на экран сообщение “Нажмите любую клавишу…”. Когда пользователь нажмет любую клавишу (помните бородатый анекдот про any key), выполнение скрипта продолжится. — Одна из самых интересных возможностей DOS — создание загрузочных меню.
С их помощью можно заставить мирно сосуществовать десятки операционных систем, автоматизировать некоторые операции и даже исправлять баги загрузки. Создаются загрузочные меню путем изменения файлаautoexec.bat, который — суть скрипт.*** * *** Вот мы и рассмотрели основные возможности DOS в качестве мощного скриптового языка.
Он надежней и удобней большинства скриптовых языков, которые массами бродят по Интернету. DOS незаслуженно забыт, но в новом свете обретает вторую жизнь. И этим стоит воспользоваться. В одном из ближайших номеров “Мании” мы поговорим о скриптовых языках и конфигурационных файлах в играх.
Оказывается, разработчики не придумывают свои скриптовые языки наобум, а руководствуются некими общими основами. И узнав эти основы, вы сможете легко понять любой скриптовый язык в любой игре! Где это можно применить? Ну, например, при препарировании игры (киваю в сторону коллег-хирургов из**» Вскрытия «**) или при разработке мода. Кроме того, если вы решите писать собственную игру, вы узнаете, как создавать скриптовые языки так, чтобы потом не было мучительно больно (в области висков) за бесцельно потраченное время на разработку нежизнеспособного скрипта.
Источник: www.igromania.ru