Регістри асемблера: види, призначення та особливості команд

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

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

Структура регістрів в асемблер

Види регістрів

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

  • Регістри загального призначення.
  • Індексні регістри.
  • Регістри-покажчики.
  • Сегментні блоки пам`яті.
  • Регістри прапорів.

Фактично всі регістри займають в пам`яті 32 біта. Тобто можуть містити числа від нуля до 4294967295. Деякі з регістрів розділені на кілька частин по 16 і 8 біт. Це дозволяє управляти або частиною блоку пам`яті, або осередком цілком, записуючи в неї тільки частина даних.

Команди управління пам`яттю

Регістри асемблера отримали назву згідно виконуваних функцій:

  • ЕАХ-Accumulator регістра акумулятора;
  • EBX-Base-база;
  • ECX-Counter-відповідає за рахунок;
  • EDX-Data-блок комірок даних;
  • ESI-Source Index-регістр джерела;
  • Edi-destination Index-регістр приймача;
  • ESP-Pointer of stack-покажчик на стек;
  • EBP - Base Pointer-Покажчик основи стека.

Особливості використання регістрів

Варто враховувати те, що кожен з позначених регістрів може застосовуватися не тільки для внесення даних. Наприклад, в регістр бази можна внести будь-яке десяткове число і користуватися ним як лічильником. Однак при цьому небажано застосовувати в цих цілях блоки пам`яті, які відповідають вказівниками – ESP і EBP, так як при цьому можуть виникати проблеми з доступом до осередків абстрактного типу даних. Призначення регістрів асемблера-зберігання якоїсь інформації, для чого може використовуватися будь-який їх вид.

Код на ASM і подання в лістингу

Регістри загального призначення

Даний вид регістрів створений для збереження даних після обчислювальних операцій. Фактично в них можна за допомогою команди mov внести інформацію в будь-якому вигляді і системі обчислення: двійковій, вісімковій, десятковій або шістнадцятковій. Інша назва-регістри даних асемблера. До переліку регістрів загального призначення assembler відносять:

  • Еах (accumulator) регістр акумуляції. Складається з трьох молодших блоків по 8 біт: АХ, АН, AL. При необхідності можна звертатися до двох молодших блоків.
  • ЄВХ – base) - блок даних, який відповідає за базу. Так само, як і всі регістри загального призначення, складається з двох молодших розділів по 8 біт і одного шестнадцатібітного. Таким чином в один регістр можна помістити відразу кілька числових значень.
  • ЕСХ (counter – - відповідає за лічильник. Використовується під час виконання циклів. Без нього не працює команда loop. Складається з двох частин, одна з яких включає два восьмибітних блоку СН і CL.
  • EDX-Data-потрібно для операцій точного визначення адреси в оперативній пам`яті для функцій введення і виведення. Крім того, в цей регістр можна поміщати дані для переадресації на використання в процедурах і шаблонах. Робота з регістрами в 64-бітної версії

Регістри покажчики

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

Структура процесора і регістрів
  • Регістр ESP-покажчик на вершину стека. Завжди містить адресу першого елемента, який був поміщений в стек в кеш-пам`яті процесора. При необхідності може бути заповнений іншими даними. Включає молодший регістр SP, що складається з 16 біт.
  • Регістр ЄВР (Base Pointer – - являє собою блок осередків пам`яті, що вимагається для адресації даних, які містяться в стеку. При цьому значно полегшує доступ до всіх даних і змінних. Включає молодший розряд ВР.

Регістри-індекси

Індексні блоки пам`яті потрібні для розширеної індексації. Крім того, вони беруть участь в роботі деяких арифметичних операцій і обробки байтових рядків-послідовності байт, що містять довільне значення. У assembler включено два регістри, які відповідають за індексування ESI і EDI. Опишемо їх:

  • ESI (Source index) включає Індекс джерела (місце, звідки беруться дані) і потрібен для частини дій над байтовими рядками;
  • EDI (destination index) потрібно для запису результатів обчислень. Також застосовується для частини строкових дій. Частково пов`язаний з регістром сегментів ES.

Сегментні регістри

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

  • Регістр коду CS в звичайному вигляді містить адресу початку сегмента коду програмне забезпечення (початку машинного представлення коду). Таким чином здійснюється перехід по командам за рахунок командного покажчика IP.
  • Регістр даних містить адресу даних, які обробляє програма в момент початку запуску. Пересування за даними здійснюється за рахунок зміщення, яке записано в регістр EIP.
  • Stack Segment (ESS) потрібен для збереження початку сегмента абстрактного типу даних.
  • Extra segment-допоміжний регістр, який містить порожню область для запису даних під час деяких дій над байтовими рядками. Може містити інформацію, аналогічну регістру даних.

Регістр покажчика команд

Зв`язок між блоками пам`яті

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

Реєстр прапорів асемблера

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

Статті на тему