Ассемблер - команди для початківців низькорівневих програмістів

Ассемблер - команди для початківців низькорівневих програмістів

Всі команди можуть бути виконані тільки за допомогою машинної мови. Ассемблер-команди - символічне представлення цієї мови. З його допомогою пишуть невеликі, але дуже швидкі програми. Але, незважаючи на їх розмір, процес написання досить трудомісткий.

Тому команди асемблера використовуються для роботи з апаратною складовою, або коли на виконання програми критично не вистачає пам 'яті. Тому код асемблера оформляється у вигляді підпрограм і інтегрується з кодом високого рівня. Оскільки асемблер може сильно відрізнятися залежно від типу архітектури, то слід розглянути його для конкретного випадку, в даній статті це архітектура Win. Але опис команд асемблера, як правило, сильно не змінюється, і використовувати їх можна і в мікроконтролерах, і в інших приладах електроніки, для яких використовується асемблер.


Арифметичні команди, які використовуються в асемблері

Незважаючи на такий парадокс, як універсальність, всього 4 арифметичні команди асемблера є і можуть використовуватися програмістами. Але тим не менш за допомогою них створювалися високорівневі мови програмування, на яких працюють комп 'ютери, побутова техніка, телефони, смартфони, ноутбуки тощо. Працювати з ними можна, і досить успішно. Список команд асемблера такий:

  • додавання;
  • віднімання;
  • множення;
  • ділення.

Додавання

Арифметична операція, відома ще зі школи. Для її використання необхідно враховувати тільки особливість додавання, яка пов 'язана з представленням складених чисел в пам' яті самого комп 'ютера. Загальний вид операції такий:

ADD < Комірка 1/Регістр1 >, < Комірка 2/Регістр2 >

Команда бере числа з комірок, складає їх разом і записує в "Комірку1". Тепер про умови проходження операції: обидва числа з комірки повинні мати однаковий розмір. Також якщо спочатку йде регістр, то до нього можна приплюсувати все. Якщо спочатку йде комірка, до неї можна приплюсувати або безпосередній операнд, або регістр.

Опис команд асемблера та їх реалізації вимагає більш повного підходу, ніж може надати одна стаття. За командами ассемблера, незважаючи на їх жалюгідну кількість, пишеться величезна кількість книг, які мають не одну сотню сторінок. Тому, незважаючи на уявну легкість, рекомендуємо ознайомитися з більш детально описуючою командою роботою, яка дозволить дізнатися всі нюанси для різних архітектур.

Віднімання

Ця операція виконується за таким самим алгоритмом, як і попередня. Навіть тип запису команди схожий:


SUB < Комірка 1/Регістр1 >, < Комірка 2/Регістр2 >

Принцип підрахунку такий: із № 1 віднімається значення № 2, і записується на місце № 1. Умови проходження операції точно такі ж, як і умови проходження операції додавання.

Множення

Якщо для ділення і додавання використовувалися однакові команди, як для беззнакових, так і для знакових чисел, то при множенні і поділі для них існують різні алгоритми. Так, для множення беззнакових чисел використовується така команда:

MUL < операнд >

Зазначений в команді операнд є одним із сомножителів. Місце другого сомножителя і місце результату операції заздалегідь фіксуються, залежно від розміру MUL в байтах. Місце їх розташування - тема окремої статті. Для знакового множення використовують команду:

IMUL < операнд № 1 >, < операнд № 2 >

Можна зустріти й інші варіанти реалізації, але цей є більш зрозумілим і звичним. Вказуються два сомножителі, і результат поміщається в операнд № 1. При цьому в якості операнда № 1 виступає обов 'язково регістр, а операнда № 2 - регістр або комірка пам' яті. Але інші варіанти теж будуть описані:


IMUL < операнд № 1 >

IMUL < операнд № 1 > >, < операнд № 2 >, < безпосередній операнд >

IMUL < операнд № 1 >, < безпосередній операнд >

Перший варіант подібний до MUL за своїм пристроєм, тому правила до нього можна віднести і тут. Другий варіант дозволяє явно вказати місце розташування - як результату, так і сумнівника. У третьому варіанті вказується регістр, який буде першим сумнівножителем і в якому буде поміщений результат множення. Під безпосереднім операндом передбачається зазначення не певного регістру, а числа, на яке буде множитися операнд.

Ділення

Як уже повідомлялося вище, для поділу використовуються дві команди. Для беззнакових чисел застосовують:


DIV < операнд >

Для знакових чисел використовують команду:

IDIV < операнд >

Особливість застосування команд поділу полягає в тому, що використовується тільки операнд-ділник, в якості якого виступає регістр або комірка пам 'яті. Подільне число завжди має своє визначене місцезнаходження, яке залежить від розміру числа. Своє місце має і результат операції.

З пошуку та визначення місць можна сказати те саме, що й про множення: необхідна окрема стаття, оскільки обсяг інформації досить значний.


Корисний висновок

Також до категорії "" відносно корисні команди асемблера "" слід віднести і команду NEG < Комірка/Регістр >. Вона переводить знак в число, яке знаходиться в операнді. Ось і все, сподіваємося, що стаття допомогла вам розібратися в арифметичних командах ассемблера.

Знадобляться і операції інкрементування та декрементування (збільшення або зменшення операнду на одиницю). Щоб інкрементувати операнд необхідно прописати таку команду:

INC < операнд >

Для декрементації слід прописати:

DEC < операнд >


В якості операнда може виступити комірка пам 'яті або регістр. Виняткова вигода від цих операцій полягає в тому, що вони для себе забирають менше місця, ніж аналогічні команди асемблера, пропоновані складанням або відніманням.