Ассемблер – команды для начинающих низкоуровневых программистов
Все команды могут быть выполнены только с помощью машинного языка. Ассемблер-команды – символическое представление этого языка. С его помощью пишут небольшие, но очень быстрые программы. Но, несмотря на их размер, процесс написания весьма трудоёмкий.
Арифметические команды, применяемые в ассемблере
Несмотря на такой парадокс, как универсальность, всего 4 арифметические команды ассемблера есть и могут использоваться программистами. Но тем не менее посредством них создавались высокоуровневые языки программирования, на которых работают компьютеры, бытовая техника, телефоны, смартфоны, ноутбуки и т. д. Работать с ними можно, и весьма успешно. Список команд ассемблера таков:
- сложение;
- вычитание;
- умножение;
- деление.
Сложение
Арифметическая операция, известная ещё со школы. Для ее использования необходимо учитывать только особенность сложения, которая связана с представлением складываемых чисел в памяти самого компьютера. Общий вид операции таков:
ADD <Ячейка1/Регистр1>, <Ячейка2/ Регистр2>
Команда берёт числа из ячеек, складывает их вместе и записывает в «Ячейку1». Теперь об условиях прохождения операции: оба числа из ячейки должны иметь одинаковый размер. Также если сначала идёт регистр, то к нему можно приплюсовать всё. Если сначала идёт ячейка, то к ней можно приплюсовать или непосредственный операнд, или регистр.
Описание команд ассемблера и их реализации требует более полного подхода, чем может предоставить одна статья. По командам ассемблера, несмотря на их жалкое количество, пишется огромнейшее количество книг, которые имеют не одну сотню страниц. Поэтому, несмотря на кажущуюся легкость, рекомендуем ознакомиться с более детально описывающей команды работой, которая позволит узнать все нюансы для разных архитектур.
Вычитание
Эта операция исполняется по такому же алгоритму, как и предыдущая. Даже тип записи команды похожий:
SUB <Ячейка1/Регистр1>, <Ячейка2/ Регистр2>
Умножение
Если для деления и сложения использовались одинаковые команды, как для беззнаковых, так и для знаковых чисел, то при умножении и делении для них существуют различные алгоритмы. Так, для умножения беззнаковых чисел используется такая команда:
MUL <операнд>
IMUL<операнд№1>, <операнд№2>
Можно встретить и другие варианты реализации, но этот является более понятным и привычным. Указываются два сомножителя, и результат помещается в операнд №1. При этом в качестве операнда №1 выступает обязательно регистр, а операнда №2 – регистр или ячейка памяти. Но другие варианты тоже будут описаны:
IMUL<операнд№1>
IMUL<операнд№1>>, <операнд№2>, <непосредственный операнд>
IMUL<операнд№1>, <непосредственный операнд>
Первый вариант подобен MUL по своему устройству, поэтому правила к нему можно отнести и здесь. Второй вариант позволяет явно указать местоположение – как результата, так и сомножителя. В третьем варианте указывается регистр, который будет первым сомножителем и в котором будет помещен результат умножения. Под непосредственным операндом подразумевается указание не определённого регистра, а числа, на которое будет умножаться операнд.
Деление
Как уже сообщалось выше, для деления используются две команды. Для беззнаковых чисел применяют:
DIV <операнд>
Для знаковых чисел используют команду:
IDIV <операнд>
Особенность применения команд деления заключается в том, что используется только операнд-делитель, в качестве которого выступает регистр или ячейка памяти. Делимое число всегда имеет своё определённое местонахождение, которое зависит от размера числа. Свое место имеет и результат операции.
По поиску и определению мест можно сказать то же, что и об умножении: необходима отдельная статья, так как объем информации весьма значителен.
Полезное заключение
Также к категории "относительно полезные команды ассемблера" следует отнести и команду NEG <Ячейка/Регистр>. Она переводит знак в число, которое находится в операнде. Вот и всё, надеемся, что статья помогла вам разобраться в арифметических командах ассемблера.
Пригодятся и операции инкрементирования и декрементирования (увеличения или уменьшения операнда на единицу). Чтобы инкрементировать операнд необходимо прописать такую команду:
INC <операнд>
Для декрементации следует прописать:
DEC <операнд>
В качестве операнда может выступить ячейка памяти или регистр. Исключительная выгода от этих операций заключается в том, что они для себя забирают меньше места, чем аналогичные команды ассемблера, предлагаемые сложением или вычитанием.