Асемблер - команди для початківців низькорівневих програмістів
Всі команди можуть бути виконані тільки за допомогою машинної мови. Асемблер-команди – символічне представлення цієї мови. З його допомогою пишуть невеликі, але дуже швидкі програми. Але, незважаючи на їх розмір, процес написання досить трудомісткий. Тому команди асемблера використовуються для роботи з апаратної складової, або коли на виконання програми критично бракує пам`яті. Тому код асемблера оформляється у вигляді підпрограм і інтегрується з кодом високого рівня. Так як асемблер може сильно відрізняться в залежності від типу архітектури, то слід розглянути його для конкретного випадку, в даній статті це архітектура Win. Але опис команд асемблера, як правило, сильно не змінюється, і використовувати їх можна і в мікроконтролерах, і в інших приладах електроніки, для яких використовується асемблер.
Арифметичні команди, застосовувані в асемблері
Незважаючи на такий парадокс, як універсальність, всього 4 арифметичні команди асемблера є і можуть використовуватися програмістами. Але тим не менш допомогою них створювалися високорівневі мови програмування, на яких працюють комп`ютери, побутова техніка, телефони, смартфони, ноутбуки і т. Д. Працювати з ними можна, і вельми успішно. Список команд асемблера такий:
- додавання;
- віднімання;
- множення;
- поділ.
Додавання
Арифметична операція, відома ще зі школи. Для її використання необхідно враховувати тільки особливість складання, яка пов`язана з поданням складаються чисел у пам`яті самого комп`ютера. Загальний вигляд операції такий:
ADD lt; Ячейка1 / регістр1>, lt; Ячейка2 / Регістр2>
Команда бере числа з комірок, складає їх разом і записує в «Ячейку1». Тепер про умови проходження операції: обидва числа з комірки повинні мати однаковий розмір. Також якщо спочатку йде регістр, то до нього можна приплюсувати все. Якщо спочатку йде осередок, то до неї можна приплюсувати або безпосередній операнд, або регістр.
Опис команд асемблера та їх реалізації вимагає більш повного підходу, чим може надати одна стаття. За команд асемблера, незважаючи на їх жалюгідне кількість, пишеться величезна кількість книг, які мають не одну сотню сторінок. Тому, незважаючи на легкість, рекомендуємо ознайомитися з більш детально описує команди роботою, яка дозволить дізнатися всі нюанси для різних архітектур.
Віднімання
Ця операція виконується за таким же алгоритмом, як і попередня. Навіть тип запису команди схожий:
SUB lt; Ячейка1 / регістр1>, lt; Ячейка2 / Регістр2>
Принцип підрахунку такий: з №1 віднімається значення №2, і записується на місце №1. Умови проходження операції точно такі ж, як і умови проходження операції додавання.
Множення
Якщо для ділення і складання використовувалися однакові команди, як для беззнакових, так і для знакових чисел, то при множенні і діленні для них існують різні алгоритми. Так, для множення беззнакових чисел використовується така команда:
MUL lt; операнд>
Вказаний в команді операнд є одним із співмножників. Місце другого співмножника і місце результату операції заздалегідь фіксуються, залежно від розміру MUL в байтах. Місце їхнього розташування – тема окремої статті. Для знакового множення використовують команду:
IMULlt; операнд№1>, lt; операнд№2>
Можна зустріти й інші варіанти реалізації, але цей є більш зрозумілим і звичним. Вказуються два співмножники, і результат поміщається в операнд №1. При цьому в якості операнда №1 виступає обов`язково регістр, а операнда №2 – регістр або елемент пам`яті. Але інші варіанти теж будуть описані:
IMULlt; операнд№1>
IMULlt; операнд№1 >>, lt; операнд№2>, lt; безпосередній операнд>
IMULlt; операнд№1>, lt; безпосередній операнд>
Перший варіант подібний MUL за своїм устроєм, тому правила до нього можна віднести і тут. Другий варіант дозволяє явно вказати місце розташування – як результату, так і співмножники. У третьому варіанті вказується регістр, який буде першим співмножником і в якому буде поміщений результат множення. Під безпосереднім операндом мається на увазі вказівку не певного регістра, а числа, на яке буде множитися операнд.
Розподіл
Як уже повідомлялося вище, для поділу використовуються дві команди. Для беззнакових чисел застосовують:
DIV lt; операнд>
Для знакових чисел використовують команду:
IDIV lt; операнд>
Особливість застосування команд поділу полягає в тому, що використовується тільки операнд-дільник, в якості якого виступає регістр або елемент пам`яті. Подільне число завжди має своє певне місцезнаходження, яке залежить від розміру числа. Своє місце має і результат операції.
З пошуку та визначення місць можна сказати те ж, що і про примноження: необхідна окрема стаття, так як обсяг інформації досить значний.
Корисне висновок
Також до категорії "щодо корисні команди асемблера" слід віднести і команду NEG lt; Ячейка / Регістр>. Вона переводить знак в число, яке знаходиться в операнде. От і все, сподіваємося, що стаття допомогла вам розібратися в арифметичних командах асемблера.
Стануть в нагоді і операції инкрементирования і декрементірованія (збільшення або зменшення операнда на одиницю). Щоб інкрементіровать операнд необхідно прописати таку команду:
INC lt; операнд>
Для декрементаціі слід прописати:
DEC lt; операнд>
Як операнда може виступити комірка пам`яті або регістр. Виняткова вигода від цих операцій полягає в тому, що вони для себе забирають менше місця, ніж аналогічні команди асемблера, пропоновані складанням або відніманням.