HTML Diff
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>; &lt;текст&gt;</strong>- соответственно, комментарий.</p>
8 mov ax, 0 ; Поместим значение 0 в регистр ax<p>Что тут что: •<strong>mov</strong>- команда по перемещению значения из одного операнда в другой; •<strong>ax, 0</strong>- операнды регистра и значения; •<strong>; &lt;текст&gt;</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