Читайте данную работу прямо на сайте или скачайте
Эволюция языка программирования Assembler
Министерство образования и науки РФ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
дыгейский Государственный ниверситет
ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ
Курсовая работа
По дисциплине: Системное программное обеспечение
Эволюция языка программирования Ассемблер
Выполнил: студент группы А2
специальности АСОИУ
Хмиляр М.А.
Научный руководитель:
Киздермишев А.А.
Рецензент:
Плисенко О.А.
Майкоп 2005 год
СОДЕРЖАНИЕ
Введение 5
1. Понятие, назначение и составные элементы систем программирования а7
2. Классификация языков программирования 11
2.1. Машинно-ориентированные языки 11
2.1.1. Машинный язык 11
2.1.2. Языки символического кодирования 12
2.1.3. Автокоды 13
2.1.4. Макрос 14
2.2 Машинно-независимые языки 14
2.2.1. Проблемно - ориентированные языки 15
2.2.2. ниверсальные языки 15
2.2.3. Диалоговые языки 16
2.2.4. Непроцедурные языки 17
3. Ассемблер 18
3.1 Программирование на языке Ассемблер 18
3.2 Описание различных версий Ассемблер 21
3.2.1. Turbo Assembler фирмы Borland 21
3.2.2. Macro Assembler 24
3.2.3. Netwide Assembler 26
3.2.4. Краткое описание других видов Ассемблер 27
Заключение 30
Список использованной литературы 32
ВВЕДЕНИЕ
Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов - языков программирования. Существует множество языков программирования, но мы остановимся на Ассемблере.
ктуальность.
Несмотря на то, что в настоящее время программист может использовать большое количество языков программирования, которые гораздо проще Ассемблера, знание Ассемблера и умение программировать на нем никогда не будут лишними. Этот факт подтверждается следующими доводами:
1. На других языках программирования не всегда возможно написать приложение, которое полно бы довлетворяло требованиям. А в некоторых случаях полностью невозможно. На языке программирования Ассемблер можно написать любое приложение.
2. Иногда языки программирования высокого ровня не могут обеспечить требуемое быстродействие. А приложение созданное на Ассемблере всегда быстродействующее.
3. Размер приложений созданных на языках высокого ровня имею гораздо больший размер, чем приложения созданные на Ассемблере.
4. Язык Ассемблер позволяет работать непосредственно с аппаратными средствами, что в некоторых случаях дает программисту преимущество и требуемый результат. Приложение на языке высокого ровня работает с аппаратными стройствами через написанные модули, т.е. не позволит программисту что-либо изменить, а, следовательно, получить требуемый результат.
5. Знание языка Ассемблер дает большее преимущество перед теми, кто программирует только на языках высокого ровня. Знающий Ассемблер знает и структуру компьютера, и структуру аппаратных стройств.
Цель работы.
1. Описать эволюцию языка программирования Ассемблер.
2. Описать различия разных версий Ассемблера.
3. Выявить преимущества языка программирования Ассемблер.
4. Выявить недостатки языка программирования Ассемблер.
1. ПОНЯТИЕ, НАЗНАЧЕНИЕ И СОСТАВНЫЕ ЭЛЕМЕНТЫ СИСТЕМ ПРОГРАММИРОВАНИЯ
Неотъемлемая часть современных ЭВМ - системы программного обеспечения, являющиеся логическим продолжением логических средств ЭВМ, расширяющим возможности аппаратуры и сферу их использования. Система программного обеспечения, являясь посредником между человеком и техническими стройствами машины, автоматизирует выполнение тех или иных функций в зависимости от профиля специалистов и режимов их взаимодействия с ЭВМ. Основное назначение программного обеспечения - повышение эффективности труда пользователя, также величение пропускной способности ЭВМ посредством сокращения времени и затрат на подготовку и выполнение программ. Программное обеспечение ЭВМ можно подразделить на общее и специальное программное обеспечение[1].
Общее программное обеспечение реализует функции, связанные с работой ЭВМ, и включает в себя системы программирования, операционные системы, комплекс программ технического обслуживания.
Специальное программное обеспечение включает в себя пакеты прикладных программ, которые проблемно ориентированы на решение вполне определенного класса задач.
Системой программирования называется комплекс программ, предназначенный для автоматизации программирования задач на ЭВМ. Система программирования освобождает проблемного пользователя или прикладного программиста от необходимости написания программ решения своих задач на неудобном для него языке машинных команд, и предоставляют им возможность использовать специальные языки более высокого ровня. Для каждого из таких языков, называемых входными или исходными, система программирования имеет программу, осуществляющую автоматический перевод (трансляцию) текстов программы с входного языка на язык машины. Обычно система программирования содержит описания применяемых языков программирования, программы-трансляторы с этих языков, также развитую библиотеку стандартных подпрограмм. Важно различать язык программирования и реализацию языка.
Язык - это набор правил, определяющих систему записей, составляющих программу, синтаксис и семантику используемых грамматических конструкций[2].
Язык программирования - это специальный язык, на котором пишут команды для правления компьютером. Языки программирования созданы для того, чтобы людям было проще читать и писать для компьютера, но они затем должны транслироваться (транслятором или интерпретатором) в машинный код, который только и может исполняться компьютером. Языки программирования можно разделить на языки высокого ровня и языки низкого ровня.
Язык низкого ровня - это язык программирования, предназначенный для определенного типа компьютера и отражающий его внутренний машинный код; языки низкого ровня часто называют машинно-ориентированными языками. Их сложно конвертировать для использования на компьютерах с разными центральными процессорами, также довольно сложно изучать, поскольку для этого требуется хорошо знать принципы внутренней работы компьютера.
Язык высокого ровня - это язык программирования, предназначенный для довлетворения требований программиста; он не зависит от внутренних машинных кодов компьютера любого типа. Языки высокого ровня используют для решения проблем и поэтому их часто называют проблемно-ориентированными языками. Каждая команда языка высокого ровня эквивалентна нескольким командам в машинных кодах, поэтому программы, написанные на языках высокого ровня, более компактны, чем аналогичные программы в машинных кодах.
Реализация языка - это системная программа, которая переводит (преобразует) записи на языке высокого ровня в последовательность машинных команд.
Имеется два основных вида средств реализации языка: компиляторы и интерпретаторы.
Компилятор транслирует весь текст программы, написанной на языке высокого ровня, в ходе непрерывного процесса. При этом создается полная программа в машинных кодах, которую затем ЭВМ выполняет без участия компилятора.
Интерпретатор последовательно анализирует по одному оператору программы, превращая при этом каждую синтаксическую конструкцию, записанную на языке высокого ровня, в машинные коды и выполняя их одна за другой. Интерпретатор должен постоянно присутствовать в зоне основной памяти вместе с интерпретируемой программой, что требует значительных объемов памяти.
Следует заметить, что любой язык программирования может быть как интерпретируемым, так и компилируемым, но в большинстве случаев у каждого языка есть свой предпочтительный способ реализации. Языки Фортран, Паскаль в основном компилируют; язык Ассемблер почти всегда интерпретирует; языки Бейсик и Лисп широко используют оба способа.
Основным преимуществом компиляции является скорость выполнения готовой программы. Интерпретируемая программа неизбежно выполняется медленнее, чем компилируемая, поскольку интерпретатор должен строить соответствующую последовательность команд в момент, когда инструкция предписывает выполнение.
В то же время интерпретируемый язык часто более добен для программиста, особенно начинающего. Он позволяет проконтролировать результат каждой операции. Особенно хорошо такой язык подходит для диалогового стиля разработки программ, когда отдельные части программы можно написать, проверить и выполнить в ходе создания программы, не отключая интерпретатора.
По набору входных языков различают системы программирования одно- и многоязыковые. Отличительная черта многоязыковых систем состоит в том, что отдельные части программы можно составлять на разных языках и помощью специальных обрабатывающих программ объединять их в готовую для исполнения на ЭВМ программу.
Для построения языков программирования используется совокупность общепринятых символов и правил, позволяющих описывать алгоритмы решаемых задач и однозначно истолковывать смысл созданного написания. Основной тенденцией в развитии языков программирования является повышение их семантического ровня с целью облегчения процесса разработки программ и величения производительности труда их составителей[3].
2. КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
2.1. Машинно-ориентированные языки
Машинно-ориентированные языки - это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.)[4]. Машинно-ориентированные языки позволяют использовать все возможности и особенности машинно-зависимых языков:
- высокое качество создаваемых программ (компактность и скорость выполнения);
- возможность использования конкретных аппаратных ресурсов;
- предсказуемость объектного кода и заказов памяти;
- для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
- трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
- низкая скорость программирования;
- невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.
2.1.1. Машинный язык
Отдельный компьютер имеет свой определенный машинный язык, ему предписывают выполнение казываемых операций над определяемыми ими операндами, поэтому машинный язык является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM/370/ и др.) имеют единый машинный язык для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.
В новых моделях ЭВМ намечается тенденция к повышению внутренних языков машинно-аппаратным путем реализовывать более сложные команды, приближающиеся по своим функциональным действиям к операторам алгоритмических языков программирования.
2.1.2. Языки символического кодирования
Продолжим рассказ о командных языках, языки символического кодирования, так же, как и машинный язык, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в языках символического кодирования заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное меньшение числа ошибок при составлении программ.
Использование символических адресов - первый шаг к созданию языков символического кодирования. Команды ЭВМ вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.
2.1.3. Автокоды
Есть также языки, включающие в себя все возможности языков символического кодирования, посредством расширенного введения макрокоманд - они называются автокоды.
В различных программах встречаются некоторые, достаточно часто использующиеся, командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту. Макрокоманды переводятся в машинные команды двумя путями - расстановкой и генерированием. В постановочной системе содержатся лостовы - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в лостов программы, превращая её в реальную машинную программу.
В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию.
Обе указанных системы используют трансляторы с языками символического кодирования и набор макрокоманд, которые также являются операторами автокода.
Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер.
2.1.4. Макрос
Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).
В основном, Макрос предназначена для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов - выдача выходного текста.
Макрос одинаково может работать, как с программами, так и с данными.
2.2 Машинно-независимые языки
Машинно-независимые языки - это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они добны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и ВС.
Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка (задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на машинных языках[5].
Т.о., командные последовательности (процедуры, подпрограммы), часто используемые в машинных программах, представлены в высокоуровневых языках отдельными операторами. Программист получил возможность не расписывать в деталях вычислительный процесс на ровне машинных команд, сосредоточиться на основных особенностях алгоритма.
2.2.1. Проблемно - ориентированные языки
С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно - ориентированные языки. Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.
Проблемных языков очень много, например:
Фортран, Алгол - языки, созданные для решения математических
задач;
Simula, Слэнг - для моделирования;
Лисп, Снобол - для работы со списочными структурами.
2.2.2. ниверсальные языки
Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый ниверсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для правления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнения частков программ.
Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и правляемое и статистическое распределения памяти.
2.2.3. Диалоговые языки
Появление новых технических возможностей поставило задачу перед системными программистами - создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ их назвали диалоговыми языками.
Эти работы велись в двух направлениях. Создавались специальные правляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей правления обеспечивали бы описание алгоритмов решения задач.
Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.
Одним из примеров диалоговых языков является Бэйсик.
Бэйсик использует обозначения подобные обычным математическим выражениям. Многие операторы являются прощенными вариантами операторов языка Фортран. Поэтому этот язык позволяет решать достаточно широкий круг задач.
2.2.4. Непроцедурные языки
Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.
Позволяя четко описывать как задачу, так и необходимые для её решения действия, таблицы решений дают возможность в наглядной форме определить, какие словия должны быть выполнены прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.
Табличные методы легко осваиваются специалистами любых профессий.
Программы, составленные на табличном языке, добно описывают сложные ситуации, возникающие при системном анализе.
3. АССЕМБЛЕР
3.1 Программирование на языке Ассемблера
Сегодня повсюду используются такие языки высокого ровня как Бейсик, Фортран и Паскаль. Возможно, вы же знакомы, по крайней мере, с одним языком высокого ровня. Если вы постоянно пользуетесь персональным компьютером IBM, то вы знаете, что интерпретатор Бейсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в Ассемблере из-за его эффективности и точности.
Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке Ассемблера создаст программу более компактную и быстродействующую, чем такая же программа, написанная на языке высокого уровня. Это так практически для всех небольших или средних программ. К сожалению, по мере возрастания размеров, программы на языке Ассемблера теряют часть своих преимуществ. Это происходит из-за необходимого в ассемблерной программе внимания к деталям. Как вы видите, язык Ассемблера требует от вас планирования каждого действия компьютера. В небольших программах это позволяет оптимизировать работу программы с аппаратными средствами. В больших же программах огромное количество деталей может помешать вам эффективно работать над самой программой, даже если отдельные компоненты программы окажутся очень неплохими. Безусловно, программирование на языке Ассемблера отвечает потребностям не каждой программы.
Программы на языке Ассемблера очень точны. Поскольку этот язык позволяет программисту непосредственно работать со всем аппаратным обеспечением, ассемблерная программа может делать то, что недоступно никакой другой программе. Несомненно, что в программировании стройств ввода-вывода, где требуется контроль над отдельными разрядами регистров стройства, программирование на языке Ассемблера - единственный подходящий выбор[6].
Ясно, что эффективность и точность языка Ассемблера дают определенные преимущества. Но его детализированность создает и некоторые проблемы. Когда же стоит избирать для программирования язык Ассемблера?
Конечно, вы должны пользоваться программами на языке Ассемблера, когда нет другого способа написать программу. Например, программисты фирмы IBM писали с использованием процедур Ассемблера все программы правления стройствами ввода-вывода для IBM PC. Для правления устройствами ввода-вывода и системой прерываний, потребовалась та точность языка Ассемблера, которую не может обеспечить ни один другой язык программирования. Аналогично, на языке Ассемблера в фирме IBM писались процедуры диагностики, которые должны проверять каждую деталь аппаратуры.
Язык Ассемблера необходим также и в тех случаях, когда главными являются рабочие характеристики программы. Это может быть время исполнения или конечный размер программы. Библиотека математических процедур Фортрана - пример программы, требующей хороших характеристик, как в отношении времени, так и размера. Математические процедуры являются частью любой программы на Фортране, поэтому они должны занимать как можно меньше места. Кроме того, эти процедуры правляют всеми математическими функциями в фортрановской программе и часто используются. Следовательно, они должны исполняться быстро.
Какая программа не подходит для языка Ассемблера? Конечно, вы можете написать на нем любую программу, однако с большой программой лучше работать в языке высокого уровня, таком как Бэйсик или Паскаль. Эти языки позволяют вам сосредоточиться на своей проблеме. Вам не приходится непосредственно иметь дело с тонкостями аппаратного оборудования и процессора. Языки высокого ровня позволяют вам отступить назад и за деревьями видеть лес.
Очевидно далее, что вы нуждаетесь в соединении программ языка Ассемблера с программами языков высокого ровня. Здесь мы ограничимся программированием на языке Ассемблера для тех задач, для которых он хорошо подходит, таких как правление вводом-выводом.
И последнее, при программировании на языке Ассемблера и только через написание программ на этом ровне детализации вы можете понять как работает машина на самом нижнем ровне. Если вы хотите узнать о компьютере все, вы должны быть знакомы с его языком ассемблера. Единственный способ добиться этого писать программы на этом языке.
Самыми популярными на сегодняшний день являются пакеты Turbo Assembler (TASM) фирмы Borland, Macro Assembler for Windows32 (MASM32), созданный Hutch (на основе старого MASM фирмы Microsoft), также Flat Assembler (FASM), и Netwide Assembler (NASM), развиваемый командой NASM Development Team. Все эти ассемблеры предоставляют весьма широкие возможности для программиста. На них можно писать программы как под DOS, так и под Windows[7].
Существует также множество других видов ассемблера, число которых растет. Например: CodeX Assembler, Gema Assembler, Light Macro Assembler (LASM), Lazy Assembler (LZASM), Table Driven Assembler (TDASM), NewBasic++ Assembler (NBASM), TMA Macro Assembler и др.
3.2 Описание различных версий Ассемблера
3.2.1. Turbo Assembler фирмы Borland
Турбо Ассемблер фирмы Borland представляет собой многопроходный ассемблер с разрешением опережающих ссылок, скоростью ассемблирования до 48 строк в минуту (на компьютере IBM PS/2, модель 60), совместимый с макроссемблером фирмы Microsoft MASM и дополнительной возможностью использования режима расширенного синтаксиса. Независимо от вашего опыта в программировании вы, несомненно, оцените эти особенности, также ряд других средств, которые значительно облегчают программирование на Ассемблере[8].
Среди таких средств можно кратко помянуть следующие:
- аполная поддержка процессора 80386;
- аулучшенная синтаксическая проверка типов;
- аупрощенные директивы определения сегментов;
- аулучшенное правление листингом;
- арасширения инструкций POP и PUSH;
- расширенный аоператор CALL с аргументами и необязательным параметром языка;
- алокальные метки;
- алокальные идентификаторы в стеке и аргументы вызова в процедурах;
- аструктуры и объединения;
- авложенные директивы;
- арежим QUIRK, эмулирующий MASM;
- аполная отладка на ровне исходного текста с помощью Турбо отладчика;
- австроенная тилита генерации перекрестных ссылок (TCREF);
- афайлы конфигурации и командные файлы.
Турбо Ассемблер является мощным Ассемблером, работающим с командной строкой, который воспринимает ваши исходные файлы (файлы с расширением *.asm*) и создает из них объектные модули (файлы с расширением *.obj*). После этого вы можете использовать программу-компоновщик фирмы Borland TLINK.EXE, отличающуюся высокой скоростью компоновки, для компоновки полученных объектных модулей и создания выполняемых файлов (файлов с расширением *.exe*).
Турбо Ассемблер создан для работы с процессорами серии 80х86 и 80х87 (более подробно набор инструкций процессоров серии 80х86/80х87 описан в соответствующих руководствах фирмы Intel).
Turbo Assembler, помимо полной поддержки транслятора фирмы Microsoft имеет дополнительные возможности, объединённые в режиме, названном разработчиками Ideal. Использование этого режима даёт возможность начинающему программисту применять более наглядный и простой стиль разработки программ. Более опытные программисты, пишущие на ассемблере, могут использовать такие возможности режима Ideal, как вложенные структуры, объединения.
Важной особенностью режима Ideal является применение проверки типов данных, подобно языкам высокого ровня, что позволяет выявить многие ошибки ещё на этапе трансляции. Среди многих других важных преимуществ режима Ideal можно выделить следующие:
‑ возможность использования одинаковых имён для обозначения членов различных структур;
‑ применение операторов HIGH и LOW;
‑ предварительное вычисление выражений EQU;
‑ корректное правление сегментами данных объединённых в группы;
‑ усовершенствованное использования директив;
‑ разумное использование скобок в выражениях.
Turbo Assembler передаёт аргументы в процедуры на языках высокого ровня в кадре стека, помещая аргументы перед вызовом процедуры в стек. Процедуры, написанные на языках высокого ровня, считывают аргументы из стека по мере необходимости. При выходе процедура может далять аргументы из стека или оставлять эту операцию для вызывающей процедуры.
Традиционным способом, с помощью которого объединяются программы, написанные на С++ и Ассемблере, является разделительная компиляция с последующей компоновкой в один исполняемый файл. При этом можно использовать компилятор Borland C++, который вызывает Turbo Assembler для трансляции ассемблерной программы.
Разработка программы на языке Turbo Assembler включает четыре этапа:
1-й этап. Подготовка исходного текста программы и оформление его в виде текстового файла (одного или нескольких) с помощью какого-нибудь редактора в формате DOS с расширением *.asm*.
2-й этап. Ассемблирование программы с применением транслятора Tasm, результатом которого является объектный файл с расширением *.obj*. Когда программа состоит из нескольких файлов (модулей), то их ассемблирование производится независимо друг от друга. Если в процессе трансляции будут обнаружены ошибки, то объектный файл не создаётся, формируется сообщение об ошибках. Ошибки страняются, после чего трансляция повторяется. Объектный файл (двоично-кодированное представление программы) не может быть запущен на исполнение, так как в нём не содержится информация о загрузке сегментов программы в памяти компьютера.
3-й этап. Компоновка программы производится компоновщиком (редактором связей) Turbo Linker и заключается в объединении объектных модулей в один исполняемый файл с назначением стартового адреса программы. Исполняемый файл имеет расширение *.exe*. 2-й и 3-й этапы определяют процесс подготовки исполнительного файла программы, называемого трансляцией.
4-й этап состоит в отладке программы с использованием отладчика Turbo Debugger, который будет являться основным инструментом при изучении форматов команд, их кодирования, также представления переменных программы в памяти.
3.2.2. Macro Assembler
Пакет Макро Ассемблера включает в себя основные программы, необходимые для создания, отладки и сопровождения программ на языке ассемблера.
В состав пакета Макро Ассемблера входят следующие программные компоненты:
MASM - макроссемблер
LINK - объектный линкер 8086
SYMDEB - символьный отладчик программ
MAPSYM - генератор символьного файла
CREF - тилита перекрестных ссылок
LIB - тилита обслуживания библиотек
MAKE - тилита сопровождения программ
Макроссемблер MASM создает программы, которые могут быть выполнены микропроцессорами 8086, 8088, 80186 и 80286, также может ассемблировать программы для компьютеров с сопроцессорами 8087 и 80287.
Линкер LINK обрабатывает выработанную MASM объектную программу с целью разрешения ссылок к другим модулям и приведения программы к виду, пригодному для загрузки в память.
Утилита LIB обеспечивает формирование и обслуживание библиотек объектных модулей, которые могут быть использованы LINK для разрешения внешних ссылок.
Отладчик SYMDEB реализует отладку сформированной программы на двух ровнях: на ровне символических имен и на ровне абсолютных адресов.
Программа MAPSYM предназначена для создания символьного файла для SYMDEB. Символьный файл формируется на основе информации, полученной от MASM, и необходим для символьной отладки.
Утилита CREF может быть использована для формирования листинга перекрестных ссылок программы, наличие которого облегчает отладку.
При помощи тилиты MAKE процесс разработки программ может быть автоматизирован. В файле описаний MAKE могут быть заданы различные алгоритмы вызовов и взаимодействия программ пакета (и не только их).
Кроме казанных программ, для создания ассемблерных исходных файлов необходим также редактор текстов, работающий в коде ASCII без правляющего кода. Многие редакторы текстов, которые обычно используют правляющие коды или другие специальные форматы в документах, обеспечивают также программирование или недокументированный режим для формирования ASCII-файлов.
Пакет макроссемблера работает в операционной системе MS-DOS или PC-DOS версии 2.0 и выше и требует наличия минимум 12К памяти (использование команды SYMDEB может потребовать дополнительной памяти).
Макроссемблер обеспечивает выполнение следующих функций:
1. Анализ исходного текста на языке ассемблера на предмет наличия в нем макрокоманд и/или макроопределений и обработка этих конструкций с соответствующей коррекцией исходного текста.
2. Синтаксический анализ полученного текста и вывод необходимой диагностической информации.
3. Формирование объектного модуля[9].
3.2.3. Netwide Assembler
Расширенный Ассемблер NASM - это 80x86 Ассемблер, разработанный исходя из принципов переносимости и модульности. Он поддерживает широкий диапазон форматов объектных файлов, включая форматы Linux a.out и ELF, NetBSD/FreeBSD, COFF, Microsoft 16-bit OBJ и Win32. Он способен также создавать простые бинарные файлы. Синтакс NASM максимально прощен для понимания и похож на синакс Intel, но слегка посложнее. Он поддерживает инструкции Pentium, P6 и MMX, также имеет макро-расширения.
Расширенный Ассемблер вырос из идеи, поданной на comp.lang.asm.x86, когда по существу не было хорошего свободно доступного ассемблера серии x86 и нужно было, чтобы кто-то написал его.
Язык состоит из четырех исполняемых файлов: NASM-исполняемые файлы nasm.exe и nasmw.exe, и NDISASM-исполняемые файлы ndisasm.exe и ndisasmw.exe. Файлы, имеющие в окончании имени w, работают под Win9x/ME/NT, те, которые без w - работают под DOS-ом.
При создании программы NASM выбирает имя выходного файла самостоятельно; так как это зависит от формата объектного файла. Если формат объектного файла - Microsoft (*.obj* и win32), он далит расширение.asm (или любое другое, какое вам нравится использовать - NASMу все равно) из имени исходного файла и заменит его на *.obj*. У объектных файлов Unix-формата (aout, coff, elf и as86) он будет заменять расширение на *.o*. Для формата *.rdf* он будет использовать расширение *.rdf*, в случае формата *.bin* он просто далит расширение (например из myfile.asm получится файл myfile).
Если выходной файл же существует, NASM перезапишет его, если только его имя не совпадает с именем входного файла - в этом случае появится предупреждение и в качестве выходного файла будет использовано имя nasm.out.
В случаях, когда имя по умолчанию недопустимо, используйте ключ - o командной строки, позволяющий определить необходимое вам имя выходного файла. Имя выходного файла должно следовать за ключом - o, неважно с пробелом между ними или без[10].
3.2.4. Краткое описание других видов Ассемблера
Power Assembler 32.
Интегрированная среда разработки - три в одном, - избавляет программиста от нудного набора опций командной строки транслятора и компоновщика вручную. Power Assembler имеет функции оболочки для двух самых распространенных ассемблеров: Borland (Inprize) Turbo Assembler (версия 4.0 и выше) и Microsoft Macro Assembler (версия 6.14 и выше). В интегрированной среде разработки встроен добный, легко настраиваемый под Ваши нужды редактор с возможностью выделения синтаксиса различными цветами, включения автоотступа, и сохранения файлов в формате *.rtf*.
Внешний вид интерфейса Power Assembler можно изменять по своему желанию, так как фоновые изображения для инструментальных панелей, также кнопок доступны в виде графических файлов.
Кроме того, Power Assembler предоставляет множество полезных и добных инструментов и функций: инспектор (инструмент навигации, поиска и редактирования текста), база шаблонов (категоризированное хранилище шаблонов), библиотека кодов (категоризованное хранилище часто используемых кодов - констант, процедур и т.п.), инструментарий (база часто используемых программ) и др. Одним нажатием на кнопку в инструментальной панели можно оттранслировать, скомпоновать и выполнить программу на Ассемблере. Все ошибки транслятора и компоновщика переводятся на русский язык и выводятся в окно ошибок, позволяющее одним щелчком мыши на строке ошибки найти эту ошибку в исходном тексте модуля или открыть подключаемый модуль, содержащий ее, если он закрыт[11].
Visual Assembler.
Эта программа написана для тех, кто программирует на Ассемблере. Borland Tasm - транслятор сделанный для MSDOS. Т.к. начинающему программисту на Ассемблере будет сложно не допускать ошибок на этом языке, то постоянная компиляция и компоновка программы с помощью командной строки может быстро томить и надоесть. Visual Assembler позволяет всё это простить до минимума. Вы казываете программе путь TASM и TLINK и набираете текст в окне ввода. Когда вам необходимо откомпилировать программу, вы просто в меню программы выбираете тип компиляции, и программа выполняет всю рутинную операцию за вас. Один нюанс - в пути к TASM и TLINK и файлу с исходным текстом не должно быть пробелов.
Flat Assembler.
Более известный как fasm, -- быстрый и эффективный Ассемблер для Linux, DOS и Windows. Он поддерживает все инструкции 8086-80486/Pentium с расширениями MMX, SSE, SSE2, SSE3 и 3DNow.
Начиная с текущей версии (1.60) Flat Assembler поддерживает и инструкции x86-64 (как AMD64, так и EM64T) - правда, пока на выходе доступны только ELF64. Для некоторой совместимости с NASM добавлен символ $$, проведены лучшения в производительности программы.
Очень быстрый, так как не генерирует никаких промежуточных файлов. Имеются версии для DOS, Windows и Linux. Версия для Windows имеет встроенную IDE. Поддерживаются макросы, инструкции всех процессоров 80x86, выходные форматы файлов MZ, PE, COFF и ELF[12].
ЗАКЛЮЧЕНИЕ
Язык Ассемблера - мощное средство программирования. Он позволяет программисту осуществлять всестороннее управление аппаратными средствами ЭВМ. Однако такое правление заставляет программиста вникать в детали, далекие от основного содержания программы. Все преимущества языка Ассемблера оборачиваются подчас пустой тратой времени на многочисленные детали.
Несмотря на то, что Ассемблер является машинно-ориентированным языком, то есть языком низкого ровня, программист может применять его для работы, как на высоком.
К преимуществам Ассемблера можно отнести:
1. Данный язык программирования позволяет создавать приложения, которые будут более эффективны, чем аналогичные приложения, написанные на языке высокого ровня, т.е. приложения будут более короткими и при этом более быстро выполнимыми.
2. Язык Ассемблера позволяет программисту выполнять действия, которые либо вообще нельзя реализовать на других языках и в частности на языках высокого ровня, либо выполнение которых займет слишком много машинного времени в случае привлечения дорогих средств языка высокого ровня.
К недостаткам языка следует отнести:
1. По мере величения своего размера программа на Ассемблере теряет наглядность. Это связано с тем, что в ассемблерных программах следует делять много внимания деталям. Язык требует от вас планирования каждого шага ЭВМ. Конечно, в случае небольших программ это позволяет сделать их оптимальными с точки зрения эффективности использования аппаратных средств. В случае же больших программ бесконечное число деталей может помешать вам добиться оптимальности программы в целом, несмотря на то, что отдельные фрагменты программы будут написаны очень хорошо.
2. Для программирования на данном языке необходимо очень хорошо знать структуру компьютера и работу аппаратных стройств, так как Ассемблер работает непосредственно с стройствами.
Из всего вышесказанного можно сделать вывод, что на языке Ассемблера можно сделать любое приложение, любую программу, но для написания больших программ лучше использовать языки высокого ровня, такие как Бейсик или Паскаль, которые позволят вам сосредоточиться на самой задаче и вам не нужно будет непосредственно учитывать особенности стройства и микропроцессора.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
[1]. Вычислительная техника и программирование. / Под ред. А.В. Петрова - М.: Высш. шк., 1990.
[2]. Малютин Э.А. Языки программирования. - М.: Просвещение, 1982.
[3]. Богумирский Б. Эффективная работа на IBM PC в среде Windows 95 Пб, Питер, 1997
[4]. Ваулин А.С. Языки программирования. кн.5 - М.: Школа-Пресс, 1993.
[5]. Майоров С.А., Кириллов В.В., Приблуда А.А.. Введение в микро-ЭВМ. - М.: Просвещение, 1995.
[6]. Касвандс Э.Г. Введение в программирование на языке Ассемблер. ч.1 - М.: ЮНИТИ - ДАНА, 1993.
[7]. Ассемблер. [Электронный ресурс]. - Режим доступа: ссылка более недоступнаp>
[8]. Зубков С. В. Assembler для DOS, Windows и Unix. - М.: ИНФРА-М, 2.
[9]. Макро Ассемблер. [Электронный ресурс]. - Режим доступа: ссылка более недоступнаp>
[10]. Программируем на ассемблере. [Электронный ресурс]. - Режим доступа: ссылка более недоступнаp>
[11]. Что такое ассемблер. [Электронный ресурс]. - Режим доступа: ссылка более недоступнаp>
[12]. Журнал КомпьюТерра №37-38 1994.