0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><strong>Ассемблер</strong>представляет собой машинно-ориентированный низкоуровневый язык программирования. По сути, это система обозначений, которая используется в целях представления программ, записанных в машинном коде в удобочитаемой форме. Посмотрим, как это работает на примере.</p>
1
<p><strong>Ассемблер</strong>представляет собой машинно-ориентированный низкоуровневый язык программирования. По сути, это система обозначений, которая используется в целях представления программ, записанных в машинном коде в удобочитаемой форме. Посмотрим, как это работает на примере.</p>
2
<p>Когда мы говорим о команде ассемблера, мы говорим<strong>о команде для процессора</strong>. То есть такая команда означает, какую именно операцию надо будет выполнить.</p>
2
<p>Когда мы говорим о команде ассемблера, мы говорим<strong>о команде для процессора</strong>. То есть такая команда означает, какую именно операцию надо будет выполнить.</p>
3
<p>Синтаксически<strong>команда</strong>компонуется из нескольких частей: •<strong>mov</strong>- пересылка данных. Команда выполняет копирование содержимого одного операнда в другой; •<strong>lea</strong>- служит для вычисления эффективного адреса операнда-источника, сохраняет этот операнд-источник в регистре; •<strong>cmp</strong>- обеспечивает сравнение 2-х операндов; •<strong>jmp, jne, je, jle</strong>и пр. - это безусловные и условные переходы к меткам. К примеру,<strong>jump @exit</strong>обеспечит переход к метке<strong>exit</strong>(это безусловный переход); •<strong>nop</strong>- 1-байтовая команда, которая сама по себе ничего не делает, а лишь занимает место, а также время. Для чего используется? Ну, например, в целях создания задержки в программе либо в качестве заполнителя удаленных инструкций; • и другие.</p>
3
<p>Синтаксически<strong>команда</strong>компонуется из нескольких частей: •<strong>mov</strong>- пересылка данных. Команда выполняет копирование содержимого одного операнда в другой; •<strong>lea</strong>- служит для вычисления эффективного адреса операнда-источника, сохраняет этот операнд-источник в регистре; •<strong>cmp</strong>- обеспечивает сравнение 2-х операндов; •<strong>jmp, jne, je, jle</strong>и пр. - это безусловные и условные переходы к меткам. К примеру,<strong>jump @exit</strong>обеспечит переход к метке<strong>exit</strong>(это безусловный переход); •<strong>nop</strong>- 1-байтовая команда, которая сама по себе ничего не делает, а лишь занимает место, а также время. Для чего используется? Ну, например, в целях создания задержки в программе либо в качестве заполнителя удаленных инструкций; • и другие.</p>
4
<p><strong>Операнды</strong>- это уже то, над чем конкретно станут выполняться команды. В качестве операндов могут выступать названия регистров, служебные части команд, ячейки памяти и пр.</p>
4
<p><strong>Операнды</strong>- это уже то, над чем конкретно станут выполняться команды. В качестве операндов могут выступать названия регистров, служебные части команд, ячейки памяти и пр.</p>
5
<p>Также необходим<strong>комментарий</strong>. Он нужен для удобства чтения программного кода и прописывается после точки с запятой.</p>
5
<p>Также необходим<strong>комментарий</strong>. Он нужен для удобства чтения программного кода и прописывается после точки с запятой.</p>
6
<p>Для обозначения участка кода используются<strong>метки</strong>. Они не только могут улучшать читаемость кода, но и обеспечивать переход к отмеченному участку.</p>
6
<p>Для обозначения участка кода используются<strong>метки</strong>. Они не только могут улучшать читаемость кода, но и обеспечивать переход к отмеченному участку.</p>
7
<p>Например:</p>
7
<p>Например:</p>
8
mov ax, 0 ; Поместим значение 0 в регистр ax<p>Что тут что: •<strong>mov</strong>- команда по перемещению значения из одного операнда в другой; •<strong>ax, 0</strong>- операнды регистра и значения; •<strong>; <текст></strong>- соответственно, комментарий.</p>
8
mov ax, 0 ; Поместим значение 0 в регистр ax<p>Что тут что: •<strong>mov</strong>- команда по перемещению значения из одного операнда в другой; •<strong>ax, 0</strong>- операнды регистра и значения; •<strong>; <текст></strong>- соответственно, комментарий.</p>
9
<p>Можно рассмотреть и другой пример, на этот раз возведем число в степень в ассемблере:</p>
9
<p>Можно рассмотреть и другой пример, на этот раз возведем число в степень в ассемблере:</p>
10
<p>То же самое, но на высокоуровневом языке программирования, том же "Си", будет выглядеть иначе:</p>
10
<p>То же самое, но на высокоуровневом языке программирования, том же "Си", будет выглядеть иначе:</p>
11
<p><em>По материалам https://habr.com/ru/users/pentestit-ru/.</em></p>
11
<p><em>По материалам https://habr.com/ru/users/pentestit-ru/.</em></p>
12
12