Язык программирования Assembler — это человеко-понятная запись машинного языка, который определяется типом процессора ПК. Машинный язык это просто шаблон битов, которые после обработки заменяются на символьные обозначения и называются мнемоникой. Программирование для начинающих.
Таким образом, компьютер распознает, IA-32 (Интел) машинные инструкции
10110000 01100001
,а для программистов это легче запомнить, в эквивалентном представление на ассемблере в виде
MOV% Al, $ 0x61
(что означает перемещенеие шестнадцатеричного значение 61 (97 в десятичной системе) в регистр ‘Al’.)
В отличие от языков высокого уровня, есть очень близкое соответствие между языком программирования Assembler и машинным языком (почти один к одному). Преобразование исходных кодов в машинный языках называется ассемблированием, перевод из машинного в человеко-понятный — дизассемблированием. Программирование для чайников.
Каждый компьютер имеет собственную архитектуру (зависящую от процессора) и, соответственно, имеет свой собственный машинный язык, и поэтому собственный родной язык ассемблера (приведенный выше примере для Интел i386). Эти языки программирования Assembler отличаются по количеству и типу операций, которые они поддерживают. Они также могут иметь различные размеры и количество регистров, и различные представления типов данных в хранилище. Хотя все компьютеры общего назначения (в основной массе это персональные компьютеры, но есть и промышленные) могут выполнять почти одинаковую функциональность, хотя и различается то, как они это выполняют, что помогает обучению основам программирования.
Кроме того, несколько наборов мнемоник или синтаксисов языка Assembler могут отвечать за один и тот же набор инструкций. то в этих случаях, один из самых популярных используется производителем в своей документации.
Машинные команды
Основные операции доступны почти во всех наборах инструкций языка программирования Assembler.
- перемещение
- помещение значения в регистр
- перемещения данных из памяти в регистр, или наоборот
- чтение и запись данных из устройств
- вычисление
- сложения, вычитания, умножения или деления значения двух регистров, размещение результата в регистре
- объединить два значения регистра с логическими и / или
- отрицать значение регистра арифметически или логическое НЕ
- изменение хода выполнения программы
- перейти в другое место в программе (как правило, инструкции обрабатываются последовательно)
- перейти в другое место, но сохранить текущее положение в качестве точки для возврата
- вернуться к последней точке из которой начался переход
Специальные наборы инструкций часто будут иметь одну или несколько инструкций для исполнения, поскольку в противном случае потребуется много инструкций. Примеры:
- перемещение больших блоков памяти
- сложные вычисления и / или с плавающей точкой (синус, косинус, квадратный корень и т.д.)
- применения простой операции (например, сложение) для вектор значений
Директивы языка программирования Assembler
В дополнение к машинным командам, разные версии языка имеют дополнительные директивы для сборки блоков данных, а также присвоения адреса для инструкций или кода.
Как правило, имеется возможность создавать простые символические конструкции для определения значения в виде символических выражений, которые вычисляются во время исполнени, что позволяет писать код, который проще читать и понимать.
Как и большинство языков программирования, текстовые комментарии могут быть добавлены в исходный код, которые игнорируют компьютер.
Кроме того, обычно имеется встроенный макроязык, чтобы было легче создавать сложные фрагменты кода или данных.
На практике, отсутствие комментариев и замена переменных их фактическими значениями делает человеческую интерпретацию дизассемблированного код значительно сложнее, чем чтение исходного кодо программы.
Использование Assembler
Существует дискуссия по поводу полезности Ассемблера. Во многих случаях, современные компиляторы могут перевести языков высокого уровня в машинный код, который работает так быстро, как и написанный вручную на языке Assembler.
Однако, некоторые расчеты могут еще быть выполнены в виде вставок на быстром исполняемом коде Ассемблера, и некоторые вещи низкоуровневого программирования легче делать на Ассемблере. Некоторые системно-зависимые функции, выполняемые операционной системы просто не могут быть выражены в языках высокого уровня. Многие компиляторы также могут переводить языки высокого уровня в язык Assembler, прежде чем полностью откомпилировать, что позволяет просматривать ассемблерный код для просмотра для отладки и оптимизации.
Многие встроенные устройства также запрограммировать на ассемблере выжать абсолютный максимум функциональности из того, что часто очень ограниченный вычислительных ресурсов, хотя это постепенно меняется в некоторых областях, как более мощные чипы становятся доступными при той же минимальной стоимости.