Разработка программы на Assembler

Автор работы: Пользователь скрыл имя, 28 Января 2014 в 10:48, курсовая работа

Краткое описание

Язык Ассемблера – система записи программы с детализацией до отдельной машинной команды, позволяющая использовать мнемоническое обозначение команд и символическое задание адресов.
Поскольку в разных аппаратных архитектурах разные программно –доступные компоненты (система команд, регистры, способы адресации), язык Ассемблера аппаратно-зависимый. Программы, написанные на языке Ассемблера могут быть перенесены только на вычислительную систему той же архитектуры.

Прикрепленные файлы: 1 файл

Курсовая.doc

— 182.50 Кб (Скачать документ)



Содержание

 

 

 

ВВЕДЕНИЕ

 

Язык Ассемблера – система записи программы с детализацией до отдельной машинной команды, позволяющая использовать мнемоническое обозначение команд и символическое задание адресов.

Поскольку в  разных аппаратных архитектурах разные программно –доступные компоненты (система команд, регистры, способы адресации), язык Ассемблера аппаратно-зависимый. Программы, написанные на языке Ассемблера могут быть перенесены только на вычислительную систему той же архитектуры.

Программирование  на языке Ассемблера позволяет в  максимальной степени использовать особенности архитектуры вычислительной системы. До недавнего времени воспринималась как аксиома, что Ассемблерная программа всегда является более эффективной и в смысле быстродействия, и в смысле требований к памяти. Для Intel-архитектуры это и сейчас так. Но это уже не так для RISK архитектур. Для того, чтобы программа могла эффективно выполняться в вычислительной среде с распараллеливанием на уровне команд, она должна быть определенным образом оптимизирована, т.е команды должны быть расположены в определенном порядке, допускающем их параллельное выполнение. Программист просто не сможет по командно оптимизировать свою программу. С задачей такой оптимизации более эффективно справляются компиляторы.

Доля программ, которые пишутся на языках Ассемблеров  в мире, неуклонно уменьшается, прикладное программирование на языках Ассемблеров  применяется только по недомыслию. Язык Ассемблеров “в чистом виде” применяется только для написания отдельных небольших частей системного ПО: микроядра ОС, самых нижних уровней драйверов – тех частей, которые непосредственно взаимодействуют с реальными аппаратными компонентами. Этим занимается узкий круг программистов, работающих в фирмах, производящих аппаратуру и ОС. Зачем же нам тогда изучать построение Ассемблера?

Хотя разработка программ, взаимодействующих с реальными  аппаратными компонентами – редкая задача, в современном программировании при разработке прикладного, а ещё более – промежуточного ПО, довольно часто применяются технологии виртуальных машин. Для выполнения того или иного класса задач, программно моделируется некоторое виртуальное вычислительное устройство, функции которого соответствуют нуждам этого класса задач. Для управления таким устройством для него может быть создан соответствующий язык команд. Говоря шире, любую программу можно представить себе, как виртуальное “железо”, решающее конкретную задачу. (Конечный пользователь часто не видит разницы между программой и аппаратурой, и часто говорит не: “Мне программа выдала то-то”, а “мне компьютер выдал то-то”). В некоторых случаях интерфейс программы можно представить в виде системы команд, а, следовательно, нужен соответствующий ассемблер. (Это, конечно, относится не к программам “для чайников”, а к инструментальным средствам программистов, системам моделирования и т.п

 

 

1.ОБЩИЙ РАЗДЕЛ.

 

    1. Создание программы на ассемблере.

 

Надежность  программы достигается, в первую очередь, благодаря ее правильному  проектированию, а не бесконечному тестированию. Это правило означает, что если программа правильно разработана как в отношении структур данных, так и структур управления, то это в определенной степени гарантирует правильность ее функционирования. При изменении такого стиля программирования ошибки являются легко локализуемыми и устранимыми.

В большинстве  случаев рекомендуется следующий  процесс разработки программы на ассемблере:

 

      1. Этап постановки и формулировки задачи:

 

  • изучение предметной области и сбор материала в проблемно-ориентированном контексте
  • определение назначения программы, выработка требований к ней и представление требований, если возможно, в формализованном виде
  • формулирование требований к представлению исходных данных и выходных результатов
  • определение структур входных и выходных данных
  • формирование ограничений и допущений на исходные и выходные данные.

 

1.1.2. Этап проектирования:

 

  • формирование «ассемблерной» модели задачи;

 

  • выбор метода реализации задачи;

 

  • разработка алгоритма реализации задачи;

 

  • разработка структуры программы в соответствии с выбранной моделью памяти.

 

      1. Этап кодирования:

 

  • уточнение структуры входных и выходных данных  и определение ассемблерного формата их представления;

 

  • программирование задачи;

 

  • Комментирование текста программы и составление предварительного описания программы.

 

1.1.4. Этап отладки и  тестирования:

  • составление тестов для проверки правильности раьоты программы;
  • обнаружение, локализация и устранение ошибок в программе, выявленных в тестах;
  • корректировка кода программы и её описания.

 

1.1.5. Этап эксплуатации  и сопровождения:

 

  • настройка программы на конкретные условия использования;
  • обучение пользователей работе с программой;
  • организация сбора сведений о сбоях в работе программы, ошибках в выходных данных, пожеланиях по улучшению интерфейса и удобства работы с программой;
  • модификация программы с целью устранения выявленных ошибок и, при необходимости, изменения ее функциональных возможностей.

К порядку применения и полноте выполнения перечисленных  этапов нужно подходить разумно. Многое определяется особенностями конкретной задачи, ее назначением, объемом кода и обрабатываемых данных, другими характеристиками задачи. Некоторые из этих этапов могут либо выполняться одновременно с другими этапами, либо вовсе отсутствовать.

 

Традиционно у  существующих реализаций ассемблера нет  интегрированной среды, подобной интегрированным  средам Turbo Pascal, Turbo C или Visual C++. Поэтому для выполнения всех функций по вводу кода программы, ее трансляции, редактированию и отладке необходимо использовать отдельные служебные программы. Большая часть их входит в состав специализированных пакетов ассемблера.

На рисунке (Рисунок1) приведена общая схема процесса разработки программы на ассемблере. На схеме выделено четыре шага процесса. На первом шаге, когда вводится код программы, можно использовать любой текстовый редактор. Основным требованием к нему является то, чтобы он не вставлял посторонних спецсимволов (спецсимволов редактирования). Файл должен иметь расширение *.asm

 

1.ВВОД ИСХОДНОГО ТЕКСТА ПРОГРАММЫ



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок1 - Процесс разработки программы на ассемблере

 

Программы, реализующие  остальные шаги схемы, входят в состав программного пакета ассемблера. После  написания текста программы на ассемблере наступает следующий этап – трансляция программы. На этом шаге формируется объектный модуль, который включает в себя представление исходной программы в машинных кодах и некоторую другую информацию, необходимую для отладки и компоновки его с другими модулями. Традиционно на рынке ассемблеров для микропроцессоров фирмы Intel имеется два пакета: «Макроассемблер» MASM фирмы Microsoft и Turbo Assembler TASM фирмы Borland.

У этих пакетов  много общего. Пакет микроассемблера  фирмы Microsoft (MASM) получил свое название потому, что он позволял программисту задавать макроопределения (или макросы), представляющие собой именованные группы команд. Они обладали тем свойством, что их можно было вставлять в программу в любом месте, указав только имя группы в месте вставки. Пакет Turbo Assembler (TASM) интересен тем, что имеет два режима работы. Один из этих режимов, называемый MASM, поддерживает все основные возможности макроассемблера MASM. Другой режим, называемый IDEAL, представляет более удобный синтаксис написания программ, более эффективное использование памяти при трансляции программы и другие новшества, приближающие

 

компилятор  ассемблера к компиляторам языков высокого уровня. В эти пакеты входят трансляторы, компоновщики, отладчики и другие утилиты для повышения эффективности процесса разработки программ на ассемблере.

В данной курсовой работе для получения объектного модуля исходный файл подвергается трансляции при помощи программы tasm.exe из пакета TASM.

После устранения ошибок можно  приступать к следующему шагу – созданию исполняемого (загрузочного) модуля, или, как ещё называют этот процесс, к компоновке программы. Главная цель этого шага – преобразовать код и данные в объектных файлах в их перемещаемое выполняемое отображение. Процесс создания исполняемого модуля разделяют на два шага – трансляцию и компоновку. Это сделано намеренно для того, чтобы можно было объединять вместе несколько модулей (написанных на одном или нескольких языках). Формат объектного файла позволяет, при определенных условиях, объединить несколько отдельно оттранслированных исходных модулей в один модуль. При этом в функции компоновщика входит разрешение внешних ссылок (ссылок на процедуры и переменные) в этих модулях. Результатом работы компоновщика является создание загрузочного файла с расширением *.exe. После этого операционная система может загрузить такой файл и выполнить его.

Устранение синтаксических ошибок ещё не гарантирует того, что программа будет хотя бы запускаться, не говоря уже о правильности работы. Поэтому обязательным этапом процесса обработки является отладка.

На этапе отладки, используя  описание алгоритма, выполняется контроль правильности функционирования как отдельных участков, так и всей программы в целом. Но даже успешное окончание отладки еще не  является гарантией того, что программа будет работать правильно со всеми возможными исходными данными. Поэтому нужно обязательно провести тестирование программы, то есть проверить ее работу на «пограничных» и заведомо некорректных исходных данных. Для этого составляются тесты.

Специфика программ на ассемблере состоит в том, что они интенсивно работают с аппаратными ресурсами компьютера. Это обстоятельство заставляет программиста постоянно отслеживать содержимое определенных регистров и областей памяти. Естественно, что человеку трудно следить за этой информацией с большой степенью детализации. Поэтому для локализации логических ошибок в программах используют специальный тип ПО – программные отладчики.

Отладчики бывают двух типов:

  • интегрированные – отладчик реализован в виде интегрированной среды типа среды для языков Turbo Pascal, Quick C и т.д.;
  • автономные – отладчик представляет собой отдельную программу .

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

    1. Синтаксис ассемблера.

Предложения, составляющие программу, могут представлять собой  синтаксическую конструкцию, соответствующую  команде, макрокоманде, директиве или  комментарию. Для того чтобы транслятор ассемблера мог распознать их, они  должны формироваться по определенным синтаксическим правилам.

 Предложения ассемблера  формируются из лексем, представляющих  собой синтаксически неразделимые  последовательности допустимых  символов языка, имеющие смысл  для транслятора. Лексемами являются:

  • идентификаторы – последовательности допустимых символов, использующиеся для таких объектов программы, как коды операций, имена переменных и названия меток. Правило записи идентификаторов заключается в следующем: Идентификатор может состоять из одного или нескольких символов. В качестве символов можно использовать буквы латинского алфавита, цифры и некоторые специальные знаки: _,?,$,@;
  • цепочки символов – последовательности символов, заключенные в одинарные или двойные кавычки;
  • целые числа в одной из следующих систем счисления: двоичной, десятичной, шестнадцатеричной. Отождествление чисел при записи их в программах на ассемблере производится по определенным правилам. Десятичные числа не требуют для своего отождествления указания каких либо дополнительных символов.

Практически каждое предложение содержит описание объекта, над которым или при помощи которого выполняется некоторое  действие. Эти объекты называются операндами. Их можно определить так: операнды – это объекты (некоторые значения, регистры или ячейки памяти), на которые действуют инструкции или директивы, либо это объекты, которые определяют или уточняют действие инструкций или директив.

Операнды могут  комбинироваться с арифметическими, логическими, побитовыми и атрибутивными  операторами для расчёта некоторого значения или определения ячейки памяти, на которую будет воздействовать данная команда или директива.

Рассмотрим  классификацию операндов, поддерживаемых транслятором ассемблера.

Информация о работе Разработка программы на Assembler