Мова асемблера x86
Мова асемблера x86 — загальна назва групи асемблерних мов, що беруть свій початок від перших мов асемблера мікропроцесорів Intel 8086 та Intel 8088 і забезпечують деякий рівень сумісності на рівні початкових текстів програм. У порівнянні з мовами асемблера інших процесорів, відмінною рисою асемблерів для архітектури x86 є наявність двох цілком відмінних синтаксисів, зумовлених історичними особливостями розвитку двох важливих для цієї комп'ютерної платформи операційних систем (MS-DOS і Unix). Також слід відзначити наявність кількох реалізацій програм-асемблерів, кожна з яких може мати несумісні з іншими особливості (такі як макроси, препроцесор, адресування змінних та інше).
Типовими командами мови асемблера є:
- Команди пересилки даних (mov та ін.);
- Арифметичні команди (add, sub, та ін.);
- Логічні та побітові операції (or, and, xor, shr, ror та ін.);
- Команди управління ходом виконання програми (jmp, loop, ret та ін.);
- Команди виклику переривань (іноді відносять до команд управління): int;
- Команди вводу-виводу в порти (in, out);
- Для мікроконтролерів і мікрокомп'ютерів характерні також команди, що виконують перевірку і перехід по умові, наприклад деякі з них:
- cjne — перейти, якщо не дорівнює;
- djnz — декрементувати, і якщо результат ненульовий, то перейти;
- cfsneq — порівняти, і якщо не дорівнює, пропустити наступну команду.
Синтаксис мови асемблера визначається системою команд конкретного процесора чи мікроконтролера.
Intel-синтаксис є одним з найпоширеніших, використовується для IBM-сумісних комп'ютерів.
Відрізняється від Intel-синтаксису наявність суфіксів до мнемонік та префіксів до операндів.
Цей розділ не містить посилань на джерела. |
main ()
{
int a = 1; // оголошуємо змінну a і кладемо туди значення 1
int b = 2; // оголошуємо змінну b і кладемо туди значення 2
int c; // оголошуємо змінну c, але не ініціалізуємо її
// Початок асемблерної вставки
__asm{
mov eax, a // завантажуємо значення змінної a в регістр EAX
mov ebx, b // завантажуємо значення змінної b в регістр EBX
add eax, ebx // додаємо EAX з EBX, записуючи результат в EAX
mov c, eax // завантажуємо значення EAX у змінну c
}
// Кінець асемблерної вставки
// Виводимо вміст c на екран
// За допомогою звичної функції printf
printf ("a + b =% x +% x =% x \ n", a, b, c);
}