Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
46
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Глава 3. Команды и алгоритмы

3.1. Организация приложений MS-DOS

Как уже отмечаюсь выше, язык ассемблера является отражением ар­хитектуры процессора, и изучение языка в сущности означает изучение системы команд и способов адресации, реализуемых процессором. Одна­ко любой язык программирования полезен лишь постольку, поскольку на нем можно написать какие-то работоспособные программы. В то же время трудно представить себе реальную программу, которая выполняет чисто логические или вычислительные действия, ничего не вводя и не выводя и не взаимодействуя с другими программами. Однако такие вопросы, как организация выполнимой программы, ее запуск, взаимодействие с раз­нообразными аппаратными и программными объектами вычислительной системы (клавиатурой, дисками, таймером, памятью, системными драй­верами и проч.) и, наконец, завершение являются прерогативой опера­ционной системы. Поэтому в программах на языке ассемблера всегда ши­роко используются системные средства, например, для вывода на экран или ввода с клавиатуры, чтения или записи файлов, управления памятью и проч. Более того, сама внутренняя организация программы, ее структу­ра и, в определенной степени, алгоритмы поведения в сильной степени определяются правилами организации вычислительного процесса, зало­женными в DOS. Изучение языка ассемблера в отрыве от конкретной опе­рационной системы вырождается в схоластическое занятие, результатом которого будет знание формальных правил написания программных пред­ложений без возможности применить эти правила для создания работос­пособных программ.

В то же время возможности даже такой относительно простой опера­ционной системы, как MS-DOS, весьма велики и многообразны, и их изучение составляет самостоятельный раздел программирования. В насто­ящей книге средства DOS рассматриваются лишь в том минимальном объе­ме, который необходим для создания простых, но работоспособных про­грамм на языке ассемблера, а также для демонстрации основных алгорит­мов и приемов программирования.

Желающие получить более глубокое представление о возможностях MS-DOS и использовании функций DOS в прикладном программирова­нии, могут обратиться к книге: К.Г.Финогенов «Самоучитель по систем­ным функциям MS-DOS», M., Радио и связь, Энтроп, 1995.

К числу важнейших вопросов, требующих хотя бы минимального рас­смотрения, следует отнести требования, предъявляемые MS-DOS к струк­туре прикладных программ, а также к особенностям их взаимодействия с самой DOS и с другими программами.

Программы, предназначенные для выполнения под управлением MS-DOS, можно классифицировать по разным признакам. По внутренней

организации все программы принадлежат к одному из двух типов, кото­рым соответствуют расширения имен программных файлов .ЕХЕ и .СОМ. По взаимодействию с самой DOS программы подразделяются на транзит­ные и резидентные. Наконец, следует выделить важнейших класс программ, служащих для обработки аппаратных или программных прерываний, и на­зываемых обычно обработчиками прерываний. Мы не касаемся здесь таких специфических программ, как устанашшваемые драйверы устройств, ко­мандные процессоры (к их числу принадлежит COMMAND.COM) или оболочки DOS (например, широко распространенная программа Norton Commander), которые можно выделить в самостоятельные классы.

Первый пример законченной программы, рассмотренный нами в гл. 2, относился к наиболее распространенному типу .ЕХЕ-приложений. Для такой программы характерно наличие отдельных сегментов команд, дан­ных и стека; для адресации к полям каждого сегмента используется свой сегментный регистр. Удобство .ЕХЕ-программы заключается в том, что ее можно почти неограниченно расширять за счет увеличения числа сегмен­тов. В случае большого объема вычислений в программу можно включить несколько сегментов команд, обеспечив, разумеется, переходы из сег­мента в сегмент с помощью команд дальних переходов или дальних вызо­вов подпрограмм. Если же программа должна обрабатывать большие объе­мы данных, в ней можно предусмотреть несколько сегментов данных. Каж­дый сегмент не может иметь размер более 64 Кбайт, однако в сумме их объем ограничивается только наличной оперативной памятью. Правда, в реальном режиме затруднительно обратиться к памяти за пределами 1 Мбайт адресного пространства, так что максимальный размер програм­мы, если не предусматривать в ней какие-то специальные средства по­очередной загрузки сегментов, ограничен величиной 550 ... 600 Кбайт. Наличие в МП 86 лишь двух сегментных регистров данных (DS и ES) несколько усложняет алгоритмы обработки больших объемов данных, так как приходится постоянно переключать эти регистры с одного сегмента на другой. Однако реально в современных процессорах имеются не два, а четыре сегментных регистра данных (DS, ES, FS и GS), которые вполне можно использовать в приложениях DOS, упростив тем самым процеду­ры обращения к данным и ускорив выполнение программ. Позже вес эти возможности будут рассмотрены более подробно.

Во многих случаях объем программы оказывается невелик — меньше, а часто и много меньше, чем 64 Кбайт. Такую программу нет никакой необходимости составлять из нескольких сегментов: и команды, и дан­ные, и стек можно разместить в единственном сегменте, настроив на его начало все 4 сегментных регистра. Для односегментных программ в MS-DOS существует специальный формат и специальные правила их состав­ления. Программные файлы с программами, составленными по этим пра­вилам, имеют расширение -СОМ. В формате .СОМ обычно пишутся рези­дентные программы и драйверы, хотя любую прикладную программу небольшого объема можно оформить в виде ,СОМ-приложения. Если по­смотреть список системных программ, входящих в DOS, и реализующих, в частности, внешние команды DOS, то можно заметить, что приблизи-

98