Мова асемблер. Команди та основи асемблера

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

Програмування асемблер

Написання програми на асемблері – вкрай важкий і витратний процес. Щоб створити ефективний алгоритм, необхідно глибоке розуміння роботи ЕОМ, знання деталей команд, а також підвищена увага і акуратність. Ефективність – це критичний параметр для програмування асемблер.

Головна перевага мови асемблер в тому, що він дозволяє створювати короткі і швидкі програми. Тому використовується, як правило, для вирішення вузькоспеціалізованих завдань. Необхідний код, який працює ефективно з апаратними компонентами, чи потрібна програма, вимоглива до пам’яті або часу виконання.

Регістри

Регістрами в мові асемблер називають комірки пам’яті, розташовані безпосередньо на кристалі з АЛУ (процесор). Особливістю цього типу пам’яті є швидкість обігу до неї, яка значно швидше оперативної пам’яті ЕОМ. Вона також називається надшвидкої оперативною пам’яттю (СОЗУ або SRAM).

Існують наступні види регістрів:

  • Регістри загального призначення (РОН).
  • Прапори.
  • Покажчик команд.
  • Регістри сегментів.
  • Є 8 регістрів загального призначення, кожен розміром в 32 біта.

    Доступ до регістрів EAX, ECX, EDX, EBX може здійснюватися в 32-бітовому режимі, 16-бітовому – AX, BX, CX, DX, а також 8-бітовому – AH і AL, BH і BL і т. д.

    Буква “E” у назвах регістрів означає Extended (розширений). Самі імена пов’язані з їх назвами англійською:

    • Accumulator register (AX) – для арифметичних операцій.
    • Counter register (CX) – для зрушень і циклів.
    • Data register (DX) – для арифметичних операцій і операцій вводу/виводу.
    • Base register (BX) – для покажчика на дані.
    • Stack Pointer register (SP) – для покажчик вершини стека.
    • Stack Base Pointer register (BP) – для індикатора підстави стека.
    • Source Index register (SI) – для покажчика відправника (джерела).
    • Destination Index register (DI) – для одержувача.

    Спеціалізація РОН мови асемблер є умовною. Їх можна використовувати в будь-яких операціях. Однак деякі команди здатні застосовувати тільки певні регістри. Наприклад, команди циклу використовують ESX для зберігання значення лічильника.

    Регістр прапорів. Під цим мається на увазі байт, який може приймати значення 0 і 1. Сукупність всіх прапорів (їх близько 30) показують стан процесора. Приклади прапорів: Carry Flag (CF) – Прапор переносу, Overflow Flag (OF) – переповнення, Nested Flag (NT) – прапор вкладеності завдань та багато інших. Прапори поділяються на 3 групи: стан, управління і системні.

    Покажчик команд (EIP – Instruction Pointer). Цей регістр містить адресу інструкції, яка повинна бути виконана наступній, якщо немає інших умов.

    Регістри сегментів (CS, DS, SS, ES, FS, GS). Їх наявність в асемблері продиктовано особливим управлінням оперативною пам’яттю, щоб збільшити її використання в програмах. Завдяки ним можна було керувати пам’яттю розміром до 4 Гб. В архітектурі Win32 необхідність в сегментах відпала, але назви регістрів збереглися і використовуються по-іншому.