Лекция №3 СОЗДАНИЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ
И её структура
План
1.Разработка программ на ассемблере с использованием пакета TASM
2.Назначение и структура выходных файлов, формируемых транслятором
3.Ввод и отладка программы (из предыдущей лекции)
4.Структура программы на ассемблере
5.Стандартные директивы сегментации
6.Упрощенные директивы сегментации
7.Представление простых типов данных
На этой лекции мы познакомимся со специальными программными средствами, предназначенными для преобразования исходных текстов на ассемблере к виду, приемлемому для выполнения на компьютере, и научимся использовать их.
Но прежде чем обсуждать сами инструментальные средства разработки программ, представляется необходимым уделить внимание общим методологическим принципам разработки программного обеспечения. Если вы — начинающий программист, то у вас наверняка очень большой интерес к практической работе и, возможно, разработку программы вы производите на чисто интуитивном уровне. До определенного момента здесь нет ничего страшного; это даже естественно. Но совсем не задумываться над тем, как правильно организовать разработку программы (не обязательно на ассемблере), нельзя, так как хаотичность и ставка только на интуицию в конечном итоге станут стилем программирования. А это может привести к тому, что рано или поздно за вами закрепится слава программиста, у которого программы работают «почти всегда» со всеми вытекающими отсюда последствиями для вашей карьеры. Поэтому нужно помнить одно золотое правило: надежность программы достигается, в первую очередь, благодаря ее правильному проектированию, а не бесконечному тестированию.
Это правило означает, что если программа правильно разработана в отношении как структур данных, так и структур управления, то это в определенной степени гарантирует правильность ее функционирования. При применении такого стиля программирования ошибки являются легко локализуемыми и устранимыми.
О том, как правильно организовать разработку программ (независимо от языка), написана не одна сотня книг. Большинство авторов предлагают следующий процесс разработки программы (мы адаптируем его, где это необходимо, к особенностям ассемблера):
1. Этап постановки и формулировки задачи:
изучение предметной области и сбор материала в проблемно-ориентированном контексте;
определение назначения программы, выработка требований к ней и представление требований, если возможно, в формализованном виде;
формулирование требований к представлению исходных данных и выходных результатов;
определение структур входных и выходных данных;
формирование ограничений и допущений на исходные и выходные данные.
2. Этап проектирования:
формирование «ассемблерной» модели задачи;
выбор метода реализации задачи;
разработка алгоритма реализации задачи;
разработка структуры программы в соответствии с выбранной моделью памяти.
3. Этап кодирования:
уточнение структуры входных и выходных данных и определение ассемблерного формата их представления;
программирование задачи;
комментирование текста программы и составление предварительного описания программы.
4. Этап отладки и тестирования:
составление тестов для проверки правильности работы программы;
обнаружение, локализация и устранение ошибок в программе, выявленных в тестах;
корректировка кода программы и ее описания.
5. Этап эксплуатации и сопровождения:
настройка программы на конкретные условия использования;
обучение пользователей работе с программой;
организация сбора сведений о сбоях в работе программы, ошибках в выходных данных, пожеланиях по улучшению интерфейса и удобства работы с программой;
модификация программы с целью устранения выявленных ошибок и, при необходимости, изменения ее функциональных возможностей.
К порядку применения и полноте выполнения перечисленных этапов нужно подходить разумно. Многое определяется особенностями конкретной задачи, ее назначением, объемом кода и обрабатываемых данных, другими характеристиками задачи. Некоторые из этих этапов могут либо выполняться одновременно с другими этапами, либо вовсе отсутствовать. Главное, чтобы вы, приступая к созданию нового программного продукта, помнили о необходимости его концептуальной целостности и недопустимости анархии в процессе разработки.
Ранее мы обсуждали пример программы на ассемблере. Если посмотреть на описанный выше процесс разработки программы, то можно увидеть, что обсуждение велось нами в полном согласии с этим процессом. Мы подробно обсудили проблему, структуры данных, структуру программного модуля и т. д. Наше обсуждение закончилось на этапе кодирования программы. Далее, по логике, нужно было ввести программу в компьютер, перевести в машинное представление и выполнить. Как это сделать? Дальнейшее обсуждение будет посвящено именно этому вопросу.
Традиционно у существующих реализаций ассемблера нет интегрированной среды, подобной интегрированным средам Turbo Pascal, Turbo С или Visual C++. Поэтому для выполнения всех функций по вводу кода программы, ее трансляции, редактированию и отладке необходимо использовать отдельные служебные программы. Большая часть их входит в состав специализированных пакетов ассемблера.
На рис. 4.1 приведена общая схема процесса разработки программы на ассемблере на примере рассмотренной ранее программы (см. листинг 3.1). На схеме выделено четыре шага этого процесса. На первом шаге, когда вводится код программы, можно использовать любой текстовый редактор. Основным требованием к нему является то, чтобы он не вставлял посторонних символов (спецсимволов редактирования). Файл должен иметь расширение . asm.
Рис.4.1. Процесс разработки программы на ассемблере.
Программы, реализующие остальные шаги схемы, входят в состав программного пакета ассемблера. Традиционно на рынке ассемблеров для микропроцессоров фирмы Intel имеется два пакета:
«Макроассемблер» MASM фирмы Microsoft.
Turbo Assembler TASM фирмы Borland.
У этих пакетов много общего. Пакет макроассемблера фирмы Microsoft (MASM) получил свое название потому, что он позволял программисту задавать макроопределения (или макросы), представляющие собой именованные группы команд. Они обладали тем свойством, что их можно было вставлять в программу в любом месте, указав только имя группы в месте вставки. Пакет Turbo Assembler (TASM) интересен тем, что имеет два режима работы. Один из этих режимов, называемый MASM, поддерживает все основные возможнос¬ти макроассемблера MASM. Другой режим, называемый IDEAL, предоставляет более удобный синтаксис написания программ, более эффективное использование памяти при трансляции программы и другие новшества, приближающие компилятор ассемблера к компиляторам языков высокого уровня.
В эти пакеты входят трансляторы, компоновщики, отладчики и другие утилиты для повышения эффективности процесса разработки программ на ассемблере. Воспользуемся тем, что транслятор TASM, работая в режиме MASM, поддерживает почти все возможности транслятора MASM. Для работы вполне достаточно иметь пакет ассемблера фирмы Borland — TASM 3.0 или выше. Обратившись к этому пакету, мы «убьем сразу двух зайцев» — изучим основы и TASM, и MASM. В будущем это позволит вам при необходимости использовать любой из этих пакетов.
