Professional Documents
Culture Documents
Асемблер модуль1 ІІсеместр
Асемблер модуль1 ІІсеместр
Спадкування - якщо встановлено в TRUE (1), handle подія може бути успадковано
іншими створеними процесами. Якщо немає потреби у використанні ресурсу, за яким
спостерігає семафор, використовується функція ReleaseSemaphore, щоб збільшити
кількість можливих доступів до ресурсу:
push покажчик на подвійне слово - отримуємо попереднє значення
лічильника семафора
push наскільки збільшити значення семафора push handle семафора call
ReleaseSemaphore
Семафори знаходяться в сигналізуючому стані, якщо значення його лічильника не
дорівнює нулю, в іншому випадку він встановлюється в несигналізований стан і вхідний
потік поміщається в сон.
variable: .byte 7
b - байт;
w - слово;
l - подвійне слово;
q - четверне слово;
fildq variable
Команди перетворення типів мають в AT&T назви з чотирьох букв - З, розмір джерела,
Ті
розмір приймача:
// cbw cbtw
// cwde cwtl
// cwd cwtl
// cdq cltd
lcall $ 7, $ 0
10
// Retf 10
lret $ 10
Якщо команда має декілька операндів, операнд-джерело завжди записується першим, а
приймач - останнім, тобто в точності навпаки в порівнянні з Intel-синтаксисом:
// Mov ax, bx
movw% bx,% ax
// Imul eax.ecx, 16
segfs
11
rep
stosd
Крім того, префікс заміни сегмента буде включений автоматично, якщо використовується
оператор «:» в контексті операнда:
12
pushl variable
leal (% Еах,% Еах, 4),% Еах // Mov ax, word ptr [bp-2]
movw -2 (% ebp),% ax
13
// Mov edx, dword ptr [edi * 2]
14
Вищого пріоритету:
* - Множення
<Або << - зрушення вліво > Або >> - зсув вправо Середнього пріоритету:
15
| - Побітовое «АБО»
+ - Додавання
- - Віднімання
байти:
слова:
.word вираз ... або .hword вираз ... або .short вираз ...
Подвійні слова:
.float число ... або .single число ... 64-бітові числа з плаваючою комою:
Заповнює область пам'яті значеннями заданого розміру (0 - 8 байт) вказане число раз. За
Те ж, що і .equ, але можна робити кілька разів. Зазвичай, втім, буває зручніше написати просто
«символ = вираз».
Робить символ видимим для компонувальника, а значить, і для інших модулів програми.
.extern символ
Директива .extern зазвичай ігнорується - все невизначені символи вважаються зовнішніми.
Директива еквівалентна .lcomm, але, якщо символ з таким ім'ям визначено за допомогою
.data підсекція
.text підсекція
Другий вираз вказує, якими байтами заповнювати пропускаючу ділянку (за замовчуванням -
нуль для секцій даних і 90h для секцій коду).
Третій вираз задає максимальне число байт, які може пропустити ця директива.
У деяких системах перший вираз - не числиться, кратним якому повинен стати покажчик, а
число біт в покажчику, які повинні стати нульовими (в нашому прикладі це було б 4).
Розмір сторінки (60 рядків, 200 стовпців за умовчанням): .psize рядки, стовпці
(Теж саме)
(Теж саме)
Оператори зсуву:
Цим операндом може бути або безпосереднє значення, або регістр CL.
Схема виконання операції:
shr byte [bx], cl; Лог. зсув байта за адресою BX на СL біт вправо shr cl, 4;
CL = CL / 16 (для числа без знака)
shl dx, 1;
sal dx, 1;
sal[x],2; x=x*4
eq ==
ne! =
lt <
le <=
gt >
ge > =
L1 equ 10010011
...
mov al, L1
ім'я групи.
1. Команди передачі даних - команди цієї групи пересилають дані з одного місця
комп'ютера в інше: між регістрами, між регістрами і пам'яттю, між регістром або
пам'яттю і стеком.
2. Арифметичні команди - ці команди застосовуються для виконання арифметичних
операцій над знаковими або без знаковими числами.
3. Команди перетворення даних - команди цієї групи застосовуються для
перетворення типів даних. Більшість з них працює зі знаковими числами, а одна
придатна і для беззнакових чисел.
4. Логічні команди - команди цієї групи застосовуються для виконання булевих
операцій і забезпечують роботу з двійковими полями в байтах, словах і подвійних
словах.