Языки класса автокод ассемблер

Язык ассемблера (автокод)

Как мы уже знаем, ассемблеры возникли в качестве первых отличных от машинных кодов средств программирования и относятся к второму поколению языков программирования. Какой же смысл сегодня, в XXI веке, изучать эту древность? Или язык ассемблера — современное средство? Разберем этот вопрос подробнее. Среди языков программирования ассемблер ближе всего к архитектуре ЭВМ, следовательно, он требует от программиста досконального знания деталей реализации данной ЭВМ, особенностей архитектуры. Это позволяет писать эффективные программы — короткие, быстрые, не требующие большого объема памяти. Где они востребованы и востребованы ли? Ответ на этот вопрос — востребованы, и эта ситуация будет наблюдаться, по всей видимости, еще много лет.

Как бы ни показалось удивительным некоторым читателям, но существуют применения ЭВМ, где доступные ресурсы до сих пор весьма ограниченны. Это, например, встроенные микропроцессоры и микроконтроллеры. А ведь именно они представляют собой наиболее многочисленный класс современных ЭВМ, если подсчитать все используемые суперкомпьютеры, мэйнфреймы, мини-ЭВМ (рабочие станции), персональные компьютеры и т. д. Микроконтроллеры повсюду — в телевизорах, телефонах, микроволновых печах, автомобилях, лифтах… Другой пример — системные программы (ядро операционной системы, драйверы). Можно привести в качестве примера также большие программные комплексы, работающие в системах массового обслуживания, в которых имеется узкое «бутылочное горлышко» — фрагмент программы, наиболее часто выполняющийся и критический с точки зрения производительности системы в целом. Такой фрагмент целесообразно писать на ассемблере, даже если остальная программная система использует Java или C#.

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

Рассматривать ассемблер мы будем на примере программирования микропроцессоров Intel семейства x86. Данная архитектура не является ни наиболее простой для изучения, ни наиболее удобной и оптимальной с точки зрения разработки программ. Настоящие ценители

программирования на ассемблере помнят изящество архитектуры ассемблера ЭВМ разработки компании DEC семейства PDP-11 [13]. Причина выбора данного языка заключается в невероятном количестве выпущенных по всему миру компьютеров, основанных на архитектуре x86 — впрочем, далеко не единственной выпущенной компанией Intel, в послужном списке которой такие замечательные архитектуры, как, например, iAPX 432 и Itanium. Из чего следует, что, во-первых, не должно быть проблем с его нахождением и проверкой примеров, а во-вторых, читатель, не исключено, сможет извлечь из материала некоторую практическую пользу для себя. Ведь, как показывает многолетний опыт преподавания, учащиеся не любят изучать новые языки и склонны в практической работе на протяжении долгих лет использовать именно тот язык программирования, который изучили на первом курсе. Ниже представлены этапы исторического развития процессоров Intel.

1971 г. — первый в мире микропроцессор 4004, создан Intel (внутри 16 разрядов, снаружи 8 разрядов) 1978

80286 (IBM PC AT) 1982

80386 (32-разрядный, защищенный режим) 1985

Pentium — PentiumPro (увеличенный размер кэш-памяти) 1993

Источник

Машинно-ориентированные языки (Автокод — Ассемблер)

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

Язык ассемблера естественным образом связан с ЯМК ма­шины и поэтому называется машинно-ориен­тированным. В ка­честве примера рассмотрим Ассемблер СМ «Малютка»и Авто­код УК «Ней­ман».

Пример (программа с линейной структурой).

Вычислить выражение a = b Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблерc – d Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблерe.

Решение.

Программа на Ассемблере СМ «Малютка».

A: ds 1; — резервируем в памяти одну ячейку под переменную а;

В: dw 8; — резервируем в памяти ячейку под переменную b и заносим туда некоторое зна­че­ние

С: dw 10; — аналогично с;

D: dw 7; — аналогично d;

Е: dw 5; — аналогично е;

ENT; — начало программы;

LDA (В); — загрузили В в сумматор (команда 0);

MULT (С); — умножили содержимое сумматора на С (команда В);

STA (А); — сохранили содержимое сумматора в А (1);

LDA (D); — загрузили D в сумматор (0);

MULT (Е); — умножили содержимое сумматора на С (В);

NEG; — сменили знак содержимого сумматора (300);

ADD (A); — сложили содержимое сумматора со значением из А (А);

STA (А); — сохранили содержимое сумматора в А (1);

IPRT; — печать содержимого сумматора (С00);

HLT; — останов машины (F00).

Программа на Автокоде УК «Нейман».

STOP — останов машины.

Пример (программа с циклом). Вычислить f = n!

Решениe.

Программа на Ассемблере СМ «Малютка».

F: ds 1; — резервируем в памяти одну ячейку под пере­менную f;

N: dw 9; — резервируем в памяти ячейку под перемен­ную n и заносим туда некоторое зна­че­ние

ONE: dw 1; — резервируем в памяти ячейку под константу 1;

ENT; — начало программы;

LDA (ONE); — загрузили константу 1 в сумматор (команда 0)

STA (F); — сохранили содержимое сумматора в F (ко­манда 1);

M1: LDA (F); — загрузили F в сумматор (0);

MULT (N); — умножили содержимое сумматора на N (В);

STA (F); — сохранили содержимое сумматора в F (ко­манда 1);

LDA (N); — загрузили N в сумматор (0);

STA (N); — сохранили содержимое сумматора в N (1);

JNP M2; — передаем управление на метку М2, если содер­жимое сумматора Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблер0 (D);

JMP Ml; — передаем управление на метку M1 (4);

М2: LDA (F); — загрузили F в сумматор (0);

IPRT; — вывод содержимого сумматора (С00);

HLT; — останов машины.

Программа на Автокоде УК «Нейман».

LI: MUL F,N,F — f: = f x n;

IFGO L1 — передача управления на метку L1, если n > 0;

STOP — останов машины.

9.3. Задание на лабораторную работу

Задания распределяются в зависимости от выданного преподавателем mn-кода. Если m — число нечетное, то ваш вариант 1, если четное — вариант 2.

Задание 1.Какова оптимальная длина кода операций (в битах) для компьютера, система ма­шин­ных команд ко­­торого состоит из:

Вариант 1

Вариант 2

Задание 2.Какое максимальное количество машинных команд может содержать система команд ком­пьютера, если длина поля кода операции в формате его машинных команд составляет:

Вариант 1

Вариант 2

Задание 3.Каков размер адресуемой памяти компьютера (в ячейках), если длина адресного поля рав­на:

Вариант 1

Вариант 2

Задание 4. Какова длина адресного поля компьютера (в битах), если раз­мер его адресуемой памяти сос­­тав­ля­ет:

Вариант 1

Вариант 2

Задание 5.Какова длина машинной команды компьютера (в битах), если длина поля кода опера­ций 4 бита и…

Вариант 1

1) …длина адресной части 6 бит, процессор — двух­адресный;

2) …размер адресуемой памяти 256 ячеек, про­цес­сор — одноад­ресный?

Вариант 2

1) …длина адресной части 1 байт, процессор — одно­адресный;

2) …размер адресуемой памяти 16 ячеек, про­цес­сор — трехадресный?

Задание 6.Какова длина машинной команды (в битах), если размер адре­суемой памяти составляет 1024 ячей­ки и…

Вариант 1

1) …процессор — двухадресный, число ма­шин­ных команд в сис­теме команд не может пре­вы­шать 50;

Вариант 2

1) …процессор — одноадресный, число ма­шин­ных команд в сис­теме команд не может пре­вы­шать 16?

Задание 7.Длина машинной команды составляет 2 байта, размер

поля кода операций — 4 бита, оп­ре­делить:

Вариант 1

1) размер адресуемой памяти, если процессор двух­адресный;

2) количество адресов в команде, если длина ад­ресного поля составляет 6 битов.

Вариант 2

1) количество адресов в команде, если размер ад­ресуемой па­мяти 16 ячеек;

2) размер адресуемой памяти, если процессор трехадресный;

Дата добавления: 2018-04-15 ; просмотров: 900 ; Мы поможем в написании вашей работы!

Источник

Автокод

Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблер

Язы́к ассе́мблера (англ. assembly language ) — машинно-ориентированный язык программирования низкого уровня. Представляет собой систему обозначений, используемую для представления в удобно читаемой форме программ, записанных в машинном коде. Его команды прямо соответствуют отдельным командам машины или их последовательностям. Является существенно платформо-зависимым: языки ассемблера для различных аппаратных платформ несовместимы, хотя могут быть в целом подобны.

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

В разговорном русском языке может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в машинный код процессора. Вместо фразы «программа на ассемблере» корректнее говорить «программа на языке ассемблера».

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

Содержание

История

Данный тип языков получил своё название от названия транслятора (компилятора) с этих языков, называемого ассемблером (англ. assembler — сборщик). Название обусловлено тем, что программа «автоматически собиралась», а не вводилась вручную покомандно непосредственно в машинных кодах.

Исторически, если первым поколением языков программирования считать машинные коды, то язык ассемблера можно рассматривать как второе поколение языков программирования. Недостатки языка ассемблера, например, сложность разработки на нём больших программных комплексов, позже привели к появлению языков третьего поколения — языков программирования высокого уровня (таких как Фортран, Лисп, Кобол, Паскаль, Си и другие).

Синтаксис языка

Синтаксис программы на языке ассемблера определяется главным образом системой команд конкретного процессора и системой директив конкретного транслятора.

Для некоторых платформ может существовать несколько видов синтаксиса языка ассемблера, не совместимых между собой. Например, наиболее популярные синтаксисы языков ассемблера для Intel-совместимых процессоров — Intel-синтаксис и AT&T-синтаксис.

Метки

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

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

На объявленную затем метку может быть выполнен переход из другого места программы, расположенного как выше, так и ниже по тексту.

Запись числовых констант

Трансляторы с языка ассемблера позволяют использовать числовые константы в различных системах счисления, поэтому для каждой используемой в тексте программы числовой константы должно быть указано, в какой системе счисления она записана. Способы указания систем счисления зависят от конкретного транслятора и могут существенно отличаться от одного транслятора к другому. Например:

Соответственно, запись числа без явного указания системы счисления разными трансляторами будет воспринята по-разному. Например, 057 в зависимости от транслятора может быть прочитано как восьмеричная запись числа 47, десятичная запись числа 57 или шестнадцатеричная запись числа 87. В некоторых трансляторах система счисления, используемая по умолчанию, может быть определена с помощью директив.

Инструкции процессора

Каждая модель (или семейство) процессоров имеет свой набор команд (систему команд) и соответствующий ей язык ассемблера. Используемые мнемоники обычно одинаковы для всех процессоров одной архитектуры или семейства архитектур (среди широко известных — мнемоники процессоров и контроллеров x86, ARM, PIC, SPARC, PowerPC, M68k и другие). Возможные исключения из этого правила:

Типичными командами языка ассемблера являются (большинство примеров даны для Intel-синтаксиса архитектуры x86):

Наборы мнемоник конкретных процессоров описаны в спецификациях этих процессоров, часто известных как «Datasheet».

Типичный формат записи команд:

В указанном формате строки:

Пример кодирования инструкций на языке ассемблера для архитектуры PIC16:

Директивы

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

Ниже приведены примеры использования директив определения констант для добавления строки «Hello, world!» в код программы различными способами.

Связывание программ на разных языках

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

Достоинства и недостатки языка ассемблера

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

Вместе с тем, язык ассемблера имеет и недостатки, так или иначе ограничивающие его применение или делающие таковое менее выгодным.

Применение языка ассемблера

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

На языке ассемблера пишут программы или их фрагменты в тех случаях, когда критически важны:

С использованием программирования на языке ассемблера производятся:

Использование языка ассемблера практически не имеет альтернативы при создании:

Ещё одной сферой применения является обратное реконструирование программ. С помощью программы-дизассемблера возможно преобразование откомпилированной программы в программу на языке ассемблера, которая затем может быть подвергнута изучению, изменению и повторной компиляции. В большинстве случаев это единственный (хотя и крайне трудоёмкий) способ обратного реконструирования алгоритмов программы, если не доступен её исходный код на языке высокого уровня.

Источник

Автокод

Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблер

Язы́к ассе́мблера (англ. assembly language ) — машинно-ориентированный язык программирования низкого уровня. Представляет собой систему обозначений, используемую для представления в удобно читаемой форме программ, записанных в машинном е. Его команды прямо соответствуют отдельным командам машины или их последовательностям. Является существенно платформо-зависимым: языки ассемблера для различных аппаратных платформ несовместимы, хотя могут быть в целом подобны.

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

В разговорном русском языке может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в машинный процессора. Вместо фразы «программа на ассемблере» корректнее говорить «программа на языке ассемблера».

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

Содержание

История [ | ]

Данный тип языков получил своё название от названия транслятора (компилятора) с этих языков, называемого ассемблером (англ. assembler — сборщик). Название обусловлено тем, что программа «автоматически собиралась», а не вводилась вручную покомандно непосредственно в машинных ах.

Исторически, если первым поколением языков программирования считать машинные ы, то язык ассемблера можно рассматривать как второе поколение языков программирования. Недостатки языка ассемблера, например, сложность разработки на нём больших программных комплексов, позже привели к появлению языков третьего поколения — языков программирования высокого уровня (таких как Фортран, Лисп, Кобол, Паскаль, Си и другие).

Синтаксис языка [ | ]

Синтаксис программы на языке ассемблера определяется главным образом системой команд конкретного процессора и системой директив конкретного транслятора.

Для некоторых платформ может существовать несколько видов синтаксиса языка ассемблера, не совместимых между собой. Например, наиболее популярные синтаксисы языков ассемблера для Intel-совместимых процессоров — Intel-синтаксис и AT&T-синтаксис.

Метки [ | ]

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

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

На объявленную затем метку может быть выполнен переход из другого места программы, расположенного как выше, так и ниже по тексту.

Запись числовых констант [ | ]

Трансляторы с языка ассемблера позволяют использовать числовые константы в различных системах счисления, поэтому для каждой используемой в тексте программы числовой константы должно быть указано, в какой системе счисления она записана. Способы указания систем счисления зависят от конкретного транслятора и могут существенно отличаться от одного транслятора к другому. Например:

Соответственно, запись числа без явного указания системы счисления разными трансляторами будет воспринята по-разному. Например, 057 в зависимости от транслятора может быть прочитано как восьмеричная запись числа 47, десятичная запись числа 57 или шестнадцатеричная запись числа 87. В некоторых трансляторах система счисления, используемая по умолчанию, может быть определена с помощью директив.

Инструкции процессора [ | ]

Каждая модель (или семейство) процессоров имеет свой набор команд (систему команд) и соответствующий ей язык ассемблера. Используемые мнемоники обычно одинаковы для всех процессоров одной архитектуры или семейства архитектур (среди широко известных — мнемоники процессоров и контроллеров x86, ARM, PIC, SPARC, PowerPC, M68k и другие). Возможные исключения из этого правила:

Типичными командами языка ассемблера являются (большинство примеров даны для Intel-синтаксиса архитектуры x86):

Наборы мнемоник конкретных процессоров описаны в спецификациях этих процессоров, часто известных как «Datasheet».

Типичный формат записи команд:

В указанном формате строки:

Пример ирования инструкций на языке ассемблера для архитектуры PIC16:

Директивы [ | ]

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

Ниже приведены примеры использования директив определения констант для добавления строки «Hello, world!» в программы различными способами.

Связывание программ на разных языках [ | ]

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

Достоинства и недостатки языка ассемблера [ | ]

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

Вместе с тем, язык ассемблера имеет и недостатки, так или иначе ограничивающие его применение или делающие таковое менее выгодным.

Применение языка ассемблера [ | ]

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

На языке ассемблера пишут программы или их фрагменты в тех случаях, когда критически важны:

С использованием программирования на языке ассемблера производятся:

Использование языка ассемблера практически не имеет альтернативы при создании:

Ещё одной сферой применения является обратное реконструирование программ. С помощью программы-дизассемблера возможно преобразование откомпилированной программы в программу на языке ассемблера, которая затем может быть подвергнута изучению, изменению и повторной компиляции. В большинстве случаев это единственный (хотя и крайне трудоёмкий) способ обратного реконструирования алгоритмов программы, если не доступен её исходный на языке высокого уровня.

Источник

Язык ассемблера

Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблерИз Википедии, бесплатной энциклопедии

Языки класса автокод ассемблер. Смотреть фото Языки класса автокод ассемблер. Смотреть картинку Языки класса автокод ассемблер. Картинка про Языки класса автокод ассемблер. Фото Языки класса автокод ассемблер

Язы́к ассе́мблера (англ. assembly language ) — машинно-ориентированный язык программирования низкого уровня. Представляет собой систему обозначений, используемую для представления в удобно читаемой форме программ, записанных в машинном коде. Его команды прямо соответствуют отдельным командам машины или их последовательностям. Является существенно платформо-зависимым: языки ассемблера для различных аппаратных платформ несовместимы, хотя могут быть в целом подобны.

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

В разговорном русском языке может именоваться просто «ассемблером» (типичны выражения типа «писать программу на ассемблере»), что, строго говоря, неверно, так как ассемблером именуется утилита трансляции программы с языка ассемблера в машинный код процессора. Вместо фразы «программа на ассемблере» корректнее говорить «программа на языке ассемблера».

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

Содержание

История [ править | править код ]

Данный тип языков получил своё название от названия транслятора (компилятора) с этих языков, называемого ассемблером (англ. assembler — сборщик). Название обусловлено тем, что программа «автоматически собиралась», а не вводилась вручную покомандно непосредственно в машинных кодах.

Исторически, если первым поколением языков программирования считать машинные коды, то язык ассемблера можно рассматривать как второе поколение языков программирования. Недостатки языка ассемблера, например, сложность разработки на нём больших программных комплексов, позже привели к появлению языков третьего поколения — языков программирования высокого уровня (таких как Фортран, Лисп, Кобол, Паскаль, Си и другие).

Синтаксис языка [ править | править код ]

Синтаксис программы на языке ассемблера определяется главным образом системой команд конкретного процессора и системой директив конкретного транслятора.

Для некоторых платформ может существовать несколько видов синтаксиса языка ассемблера, не совместимых между собой. Например, наиболее популярные синтаксисы языков ассемблера для Intel-совместимых процессоров — Intel-синтаксис и AT&T-синтаксис.

Метки [ править | править код ]

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

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

На объявленную затем метку может быть выполнен переход из другого места программы, расположенного как выше, так и ниже по тексту.

Запись числовых констант [ править | править код ]

Трансляторы с языка ассемблера позволяют использовать числовые константы в различных системах счисления, поэтому для каждой используемой в тексте программы числовой константы должно быть указано, в какой системе счисления она записана. Способы указания систем счисления зависят от конкретного транслятора и могут существенно отличаться от одного транслятора к другому. Например:

Соответственно, запись числа без явного указания системы счисления разными трансляторами будет воспринята по-разному. Например, 057 в зависимости от транслятора может быть прочитано как восьмеричная запись числа 47, десятичная запись числа 57 или шестнадцатеричная запись числа 87. В некоторых трансляторах система счисления, используемая по умолчанию, может быть определена с помощью директив.

Инструкции процессора [ править | править код ]

Каждая модель (или семейство) процессоров имеет свой набор команд (систему команд) и соответствующий ей язык ассемблера. Используемые мнемоники обычно одинаковы для всех процессоров одной архитектуры или семейства архитектур (среди широко известных — мнемоники процессоров и контроллеров x86, ARM, PIC, SPARC, PowerPC, M68k и другие). Возможные исключения из этого правила:

Типичными командами языка ассемблера являются (большинство примеров даны для Intel-синтаксиса архитектуры x86):

Наборы мнемоник конкретных процессоров описаны в спецификациях этих процессоров, часто известных как «Datasheet».

Типичный формат записи команд:

В указанном формате строки:

Пример кодирования инструкций на языке ассемблера для архитектуры PIC16:

Директивы [ править | править код ]

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

Ниже приведены примеры использования директив определения констант для добавления строки «Hello, world!» в код программы различными способами.

Связывание программ на разных языках [ править | править код ]

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

Достоинства и недостатки языка ассемблера [ править | править код ]

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

Вместе с тем, язык ассемблера имеет и недостатки, так или иначе ограничивающие его применение или делающие таковое менее выгодным.

Применение языка ассемблера [ править | править код ]

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

На языке ассемблера пишут программы или их фрагменты в тех случаях, когда критически важны:

С использованием программирования на языке ассемблера производятся:

Использование языка ассемблера практически не имеет альтернативы при создании:

Ещё одной сферой применения является обратное реконструирование программ. С помощью программы-дизассемблера возможно преобразование откомпилированной программы в программу на языке ассемблера, которая затем может быть подвергнута изучению, изменению и повторной компиляции. В большинстве случаев это единственный (хотя и крайне трудоёмкий) способ обратного реконструирования алгоритмов программы, если не доступен её исходный код на языке высокого уровня.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *