Команды ассемблера
Ассемблер представляет собой машинно-ориентированный низкоуровневый язык программирования. По сути, это система обозначений, которая используется в целях представления программ, записанных в машинном коде в удобочитаемой форме. Посмотрим, как это работает на примере.
Когда мы говорим о команде ассемблера, мы говорим о команде для процессора. То есть такая команда означает, какую именно операцию надо будет выполнить.
Синтаксически команда компонуется из нескольких частей: • mov — пересылка данных. Команда выполняет копирование содержимого одного операнда в другой; • lea — служит для вычисления эффективного адреса операнда-источника, сохраняет этот операнд-источник в регистре; • cmp — обеспечивает сравнение 2-х операндов; • jmp, jne, je, jle и пр. — это безусловные и условные переходы к меткам. К примеру, jump @exit обеспечит переход к метке exit (это безусловный переход); • nop — 1-байтовая команда, которая сама по себе ничего не делает, а лишь занимает место, а также время. Для чего используется? Ну, например, в целях создания задержки в программе либо в качестве заполнителя удаленных инструкций; • и другие.
Операнды — это уже то, над чем конкретно станут выполняться команды. В качестве операндов могут выступать названия регистров, служебные части команд, ячейки памяти и пр.
Также необходим комментарий. Он нужен для удобства чтения программного кода и прописывается после точки с запятой.
Для обозначения участка кода используются метки. Они не только могут улучшать читаемость кода, но и обеспечивать переход к отмеченному участку.
Например:
mov ax, 0 ; Поместим значение 0 в регистр ax
Что тут что: • mov — команда по перемещению значения из одного операнда в другой; • ax, 0 — операнды регистра и значения; • ; <текст> — соответственно, комментарий.
Можно рассмотреть и другой пример, на этот раз возведем число в степень в ассемблере:
То же самое, но на высокоуровневом языке программирования, том же «Си», будет выглядеть иначе:
pow (2, 3);
По материалам https://habr.com/ru/users/pentestit-ru/.