Машинно-ориентированный язык программирования Ассемблер. Понятие о макропрограммировании

Программа, необходимая для работы МП, должна быть введена в него в машинных кодах. Однако ее составление сопряжено с громоздкостью представления и сложностью запоминания двоичных чисел, соответствующих всем элементам командной строки — кодам операций, операндам и адресам ячеек памяти. Поэтому при программировании используют мнемонические (облегчающие запоминание) символьные обозначения, которые, как правило, представляют собой полную (например, add — операция сложения) или сокращенную (sub — от subtract — вычитание) форму записи английского названия команд. Язык программирования, преобразующий символьные мнемонические обозначения командных строк в их двоичные эквиваленты по правилам, наиболее близким к машинному языку, носит название Ассемблер (Assembler). Он является машинно-ориентированным, так как в нем учитываются все особенности построения и организации МП, в том числе его система машинных команд. При использовании Ассемблера процесс программирования становится более осмысленным, чем написание программы в двоичных кодах, что уменьшает количество возможных ошибок и облегчает труд программиста. Для управления работой МП такая программа проходит преобразование в машинную — ассемблирование: каждому символьному эквиваленту командной строки на Ассемблере сопоставляется командная строка в машинных кодах, вводимая затем в МП.

Являясь языком программирования, Ассемблер обладает всеми признаками таких языков: набором лексем (совокупность слов, входящих в состав языка) и формальных правил их применения.

Для большинства языков программирования характерно обобщенное использование его операторов (одного — вместо большого числа отдельных машинных команд) и их независимость от конкретного вида МП. Чем в большей степени выполняются эти требования, тем более высокоуровневым считается язык программирования. Ассемблер занимает промежуточное место между машинным и высокоуровневыми языками. В нем количество существующих команд меньше, чем машинных, но больше, чем для однотипных операций в высокоуровневых языках. Например, в МП существует несколько разных машинных команд записи данных в регистры и ячейки памяти, но в Ассемблере для всех них используется только одна команда, синтаксис которой: MOV opl, ор2. При ее выполнении на место первого операнда (opl) записывается значение второго (ор2). В то же время, например, в отличие от высокоуровневых языков, в Ассемблере используются четыре разные команды для операции сложения, имеющие следующий синтаксис:

ADD opl, ор2 — складывает первый операнд (opl) со вторым (ор2) и помещает результат на место первого операнда (opl := opl + ор2);

IN op (IN — от increment — увеличение, приращение) — увеличивает значение операнда на 1 (эквивалентна команде

ADD op, 1);

NEG op (NEG — от negative — отрицательный, обратный) — изменяет знак числа на противоположный;

ADC opl, ор2 (.ADC — от add with carry), выполняющая сложение с учетом единицы переноса (op 1 := opl + ор2 + CF).

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

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

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

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

Некоторые операторы позволяют выполнять повторение участка текста программы блоками, размещаемыми друг за другом. Но часто возникает необходимость размещать их иначе — в различных участках текста. Тогда вставляемые фрагменты оформляют в виде макросов — автономных участков программы, отделенных от остальной ее части заголовком и окончанием, имеющих собственные имена и помещаемых в любом месте разрабатываемой программы. При этом следует отличать макросы от других средств программирования (например, от процедур, используемых в соответствующем языке). Процедуры определяются подпрограммами — набором операторов, обеспечивающих выполнение определенной последовательности команд, к которым программа обращается по мере необходимости, а после их выполнения возвращается к своему продолжению. Подпрограммы записываются один раз, а в требуемых местах в программе указывается переход на них. В отличие от этого, участки программы, занимаемые макросами, в основную программу вставляются именно целиком, каждый раз увеличивая ее объем.

При подготовке к исполнению программы, написанные на макроязыке, проходят два этапа: перевод на основной язык (Ассемблер) и трансляцию программы в машинные коды. На первом этапе с помощью специального транслятора, называемого иногда макрогенератором, формируется полный текст программы со всеми помещаемыми в нее частями; на втором этапе проводится собственно ассемблирование. Некоторые программы выполняют оба этих этапа отдельно; другие, называемые макроассемблерами, чередуют их для небольших частей разрабатываемых программ. Получаемая в результате машинная программа передается МП, и ее работа ничем не отличается от других машинных программ.

Контрольные вопросы и задания

  • 1. Что такое Ассемблер?
  • 2. Чем Ассемблер отличается от машинного языка программирования?
  • 3. Расскажите об отличиях Ассемблера от машинного и от высокоуровневых языков программирования.
  • 4. В чем проявляется машинная ориентированность Ассемблера?
  • 5. Чем интерпретация программ отличается от компиляции?
  • 6. Что такое макропрограммирование?
  • 7. Расскажите об особенностях использования макросов.
  • 8. Что такое макроассемблер?
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >