документація асемблер

1. Для тих хто чує слово Асемблер вперше - Асемблер.

    1.01 Що таке Асемблер?
    1.02 З чого почати вивчення мови Асемблера?


1.01 Що таке Асемблер?
================================================== =====
Асемблер (від англійського assembler - складальник) - мова програмування низького рівня, однозначно трансльований в систему команд мікропроцесора.

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


Також ассемблером зазвичай називають транслятор мови асемблера.

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

Згодом асемблер увібрав в себе деякі можливості та абстракції, властиві мовам високого рівня: автоматичний вибір коду інструкції, якщо існує кілька різних кодів для однієї і тієї ж операції, наприклад різної довжини; можливість виробляти обчислення виразів під час трансляції; оптимізатор; опис структур даних; і макропідстановки. Макропідстановки до того ж прибрали одне обмеження "класичного" асемблера: соотвествие »один рядок на асемблері - одна інструкція«, так як дав возмоность робити "псевдоінструкціі" з декількох команд процесора. Сильно розвинений макроподстановщік дозволяє реалізовувати багато конструкцій, що існують на мовах високого рівня, зокрема елементи структурного програмування. Асемблер з макроподстановщіком називається окремим терміном: макроассемблер, позначаючи головна відмінність його від "класичного" асемблера. На даний момент "чистих" ассемблеров практично не сущеструет.

Також ассемблером називається програма трансляції програми на асемблері в машинний код процесора. Програма, яка отримує програму на асемблері з машинного коду називається дизассемблер.
джерело: www.wikiznanie.ru

2. Регістри

    Регістр - це певна ділянка пам'яті всередині самого процесора, від 8-ми до 32-х біт довжиною, який використовується для проміжного зберігання інформації, що обробляється процесором. Деякі регістри містять тільки певну інформацію.

Регістри загального призначення - EAX, EBX, ECX, EDX. Вони 32-х бітні і діляться ще на дві частини, нижні з яких AX, BX, CD, DX - 16-ти бітні, і виділяється ще на два 8-ми бітних регістра. Так, АХ ділиться на AH і AL, DX на DH і DL і т.д. Буква "Н" означає великі букви.

Так, AH і AL кожен по одному байту, АХ - 2 байта (або word - слово), Еах - 4 байта (або dword - подвійне слово). Ці регістри використовуються для операцій з даними, такими, як порівняння, математичні операції або запис даних в пам'ять.
Регістр СХ найчастіше використовується як лічильник в циклах.
АН в DOS програмах використовується як визначник, який сервіс буде використовуватися при виклику INT.

CS - сегмент коду (сторінка пам'яті) виконується в даний момент програми.
DS - сегмент (сторінка) даних виконуваної програми, тобто константи, рядкові посилання і т.д.
SS - сегмент стека виконуваної програми.
ES, FS, GS - додаткові сегменти, і можуть не використовуватися програмою.

Регістри управління - CR0, CR1, CR2, CR3. Ці 32-х бітні регістри встановлюють режим роботи процесора (нормальний, захищений і т.д.), постраничное розподіл пам'яті і т.д. Вони доступні тільки для програм в першому кільці пам'яті (Kernel, наприклад). Чіпати їх не слід.

Контрольні регістри - TR6, TR7. Використовуються для контролю посторінковою системи розподілу пам'яті операційною системою. Потрібні тільки якщо ви збираєтеся написати свою ОС.