- •Теоретичні відомості
- •1. Структура простої програми мовою асемблера. Формат кодування програми.
- •2. Основні директиви : segment , end, ends, proc, endp, assume.
- •3. Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.
- •4. Трансляція програми. Опції компіляції та загальна характеристика.
- •6. Застосування програми налагодження для пошуку помилок.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •Теоретичні відомості
- •1. Директиви визначення даних.
- •2. Директива повторення dup.
- •3. Сталі.
- •5. Представлення в пам’яті цілих чисел.
- •6. Команда пересилки даних mov.
- •7. Команди двійкового додавання та віднімання.
- •Команда зміни знаку операнда neg
- •8. Обчислення цілих арифметичних виразів.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •1. Команда безумовного переходу jmp. Типи адресів переходу short,near та far.
- •2. Команди організації циклів ( loop,loopn,loopnz). Команда loop. Керування циклом за ecx/cx.
- •Керування циклом за ecx/cx із врахуванням ознаки zf
- •3. Команди умовних переходів.
- •5. Команда lea
- •Команда роботи зі стеком push та pop
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Логічні операції та операції зсувів.
- •2. Команди логічних операцій (and, test, or, xor, not).
- •3. Команди зсувів та циклічних зсувів.
- •Команди зсувів (sal, sar, shl,shr)
- •Команда зсуву логічного операнда вправо – shr
- •3.2 Команди циклічних зсувів (rol, ror ,rcl, rcr). Циклічний зсув операнда вліво - rol
- •Циклічний зсув операнда вправо ror
- •Циклічний зсув операнда вліво через ознаку переносу - rcl
- •Циклічний зсув операнда вправо через ознаку переносу – rcr
- •Бітові маски.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •1. Множення цілих чисел
- •2. Ділення цілих чисел
- •3. Перетворення в регістрах
- •Алгоритм введення–виведення цілих чисел
- •Виведення цілих чисел.
- •Введення цілих чисел.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •Особливості команд обробки рядків.
- •Ознака df. Команди зміни ознаки ( cld, std ).
- •Префікси повторення( rep, repe, repz, repne, repze ).
- •Команди обробки символьних рядків
2. Директива повторення dup.
Директива повторення має вигляд:
Кількість_повторень DUP ( вираз ).
де Кількість_повторень – додатна ціла стала.
Директиву DUP в мові програмування асемблера використовують для побудови масивові та інших структурованих даних. Масив – це впорядкована послідовність однотипних даних, які розташовані в пам’яті. За кількістю розмінностей розрізняють одновимірні масиви, двовимірні масиви і т. д. Розглянемо приклади опису масивів:
mas dw 10 dup(10) ; одновимірний масив (вектор)
vec dd 20 dup(10) ;
matr dw 10 dup( 10 dup(?)) ; двохвимірний масив(матриця)
tenzr dw 5 dup( 5 dup(5 dup(?))) ; тривимірний масив
3. Сталі.
Числові сталі можуть записуватися у десятковому, двійковому, шістнадцядковому та вісімковому форматах та у форматі з плаваючою крапкою.
Десяткові сталі визначаються цифрами від 0 до 9 і позначаються необов’язковою останньою буквою D. Шістнадцяткові сталі визначаються цифрами від 0 до 9 та буквами від А(або а ) до F( або f) і позначаються обов’язковою останньою буквою H або h. Двійкові сталі визначаються цифрами 0 і 1 та позначаються обов’язковою останньою буквою B або b. Вісімкові сталі визначаються цифрами від 0 і 7 та позначаються обов’язковою останньою буквою О,o,Q або q.
Сталі у форматі з плаваючою крапкою визначаються цифрами від 0 до 9, знаками ’+’ , ’-’ та символами ‘.’, ‘E’ , ’e’.
Символьні рядок використовується для визначення текстових даних, які можуть складатися з будь-яких ASCII символів. Символьний рядок визначається апострофами, наприклад ‘Комп’’ютерна графіка ‘, або подвійними лапками, наприклад "Комп’ютерна графіка". Причому, якщо в рядку використовується один із знаків, то рядок повинен визначатися іншим. Символьні рядки визначаються тільки у директиві DB.
Розглянемо приклад визначення змінних
a db 21
b dw ?
c db 21,21d,21o,21h,?,?,101100b
st db ‘ I am string’,’$’
mas db 10dup(?), 15dup( 20, 20dup(1))
v1 dt 1.672
4. Директиви визначення сталих EQU та =.
Директиви EQU і = використовуються для присвоєння значення сталого виразу ідентифікатору, але вони не визначають елемент даних. Визначені ідентифікатори можна використовувати для підстановок в командах асемблера та директивах визначення даних.
Приклад 1. Застосування директив.
D10 equ 10
H10 = 10h
mas db H10 dup ( ?, D10 ), D10 dup( H10)
5. Представлення в пам’яті цілих чисел.
Елемент даних в пам’яті, як правило займає декілька байтів. При програмуванні мовою асемблера, важливо знати, яким чином елементи даних представляється у пам’яті.
Ціле число може займати будь-яке число байтів, але система команд мови асемблера(система машинних команд) підтримує числа розміром у байт, слово, подвійне слово та елемент даних у 8 байт. Цілі числа мають дві форми представлення: цілі числа без знаку та цілі числа зі знаком. Числа зі знаком використовуються для представлення додатних та від’ємних чисел, а беззнакові тільки додатних чисел. У представленні беззнакового числа всі біти інформаційні(рис.1), а представленні знакового старший біт відводиться для знаку(рис. 2). Вважається, що біт 0 – молодший біт. Для зручності вважають, що біт 0 розташований крайнім справа. Старший біт – 7 (15, 31 або 63) – біт, тобто крайній зліва біт, відповідно до елементів даних розміром байт, слово, подвійне слово та 8 байт. Для знакових чисел значення 0 старшого біту (біту знаку) визначає додатне число, а значення 1 визначає від’ємне число.
Інформаційне поле |
|||||||||
31 |
30 |
29 |
28 |
… |
4 |
3 |
2 |
1 |
0 |
Старший |
Біти |
Молодший |
Рис.1 Форма представлення 32-бітового беззнакового числа
Знак |
Інформаційне поле |
||||||||
31 |
30 |
29 |
28 |
… |
4 |
3 |
2 |
1 |
0 |
Старший |
Біти |
Молодший |
Рис.2 Форма представлення 32-бітового знакового числа
Беззнакові цілі числа записуються в двійкові системі числення, займаючи всі розряди осередку даних. Наприклад, десяткове число 91, яке двійковій системі числення має представлення 1011011 записується: в байт у вигляді рисунок 3 (у шістнадцятковій формі – 5Bh), в слово у вигляді – рисунок 4(у шістнадцятковій формі – 005Bh) та в подвійне слово у вигляді – рисунок 5 (у шістнадцятковій формі – 0000005Bh).
Біти |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
|
5 |
В |
Рис.3 Форма представлення 8-бітового беззнакового числа 91.
-
Біти
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Число
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
1
Рис.4 Форма представлення 16-бітового беззнакового числа 91.
-
Біти
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
Число
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Біти
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Число
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
1
Рис.5 Форма представлення 32-бітового беззнакового числа 91.
Знакові цілі числа записуються в двійкові системі числення, займаючи всі розряди осередку даних, крім знакового біту. Додатні знакові представляються, як без знакові у межах інформаційного поля. Від’ємні цілі числа представляються у доповнюючому коді, в якому враховано розмір осередку даних(байт, слово, подвійне слово або 8 байтів). Алгоритм перетворення від’ємного числа наступний:
Беремо модуль від’ємного числа, доповняємо ведучими незначущими двійковими нулями до розміру осередку даних(десяткове число перетворюємо двійкове);
Здійснюємо двійкову порозрядну інверсію(тобто нуль перетворюється в одинцю, а одиниця – нуль);
До отриманого коду добавляємо 1.
Приклад. Десяткове число –91(мінус 91).
Модуль число 91, яке двійковій системі числення має представлення 1011011 записується: в байт у вигляді рисунок 3 (у шістнадцятковій формі – 5Bh), в слово у вигляді – рисунок 4(у шістнадцятковій формі – 005Bh) та в подвійне слово у вигляді – рисунок 5 (у шістнадцятковій формі – 0000005Bh).
Здійснюємо інверсію. Для даних розміром у байта рисунок 7 (у шістнадцятковій формі – А4h), для даних розміром у слово – рисунок 8(у шістнадцятковій формі – FFА4h) та даних розміром у подвійне слово – рисунок 9 (у шістнадцятковій формі – FFFFFFА4h).
Біти |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
Рис.7 Форма представлення 8-бітової інверсії числа 91.
Біти |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
Рис.8 Форма представлення 16-бітової інверсії числа 91.
Біти |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Біти |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
Рис.9 Форма представлення 32-бітової інверсії числа 91.
Додаємо одиницю, отримаємо представлення від’ємного числа –91 у доповнюючому коді. Для даних розміром у байт рисунок 10 (у шістнадцятковій формі – А5h), для даних розміром у слово – рисунок 11(у шістнадцятковій формі – FFА5h) та даних розміром у подвійне слово – рисунок 12 (у шістнадцятковій формі – FFFFFFА5h).
Біти |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
Рис.10 Форма 8-бітового доповнюючого коду числа -91.
Біти |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
Рис.11 Форма представлення 16-бітового доповнюючого коду числа -91.
Біти |
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
19 |
18 |
17 |
16 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Біти |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Число |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1
|
0 |
1 |
0 |
0 |
1 |
0 |
1 |
Рис.12 Форма представлення 32-бітового доповнюючого коду числа -91.
Таким же чином цілі дані зберігаються у регістрах загального призначення.
Приклад. Число 91 в регістрі АХ.
-
Біти
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
АХ
0
0
0
0
0
0
0
0
0
1
0
1
1
0
1
1
00
5B
AH
AL
Рис.13. Форма представлення числа 91в регістрі АХ.
Приклад. Число -91 в регістрі АХ.
-
Біти
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
АХ
1
1
1
1
1
1
1
1
1
0
1
0
0
1
0
1
FF
A5
AH
AL
Рис.14. Форма представлення числа –91 в регістрі АХ.
На відміну від представлення в регістрах цілі числа, що займають осередок даних розміром у слово, подвійне слово та 8 байт зберігаються в оперативній пам'яті в "переверненому" вигляді у порядку зростання адрес в оперативні пам’яті. Тобто код числа представляється по–байтово, таким чином, що спочатку йдуть байти з молодшими бітами у порядку зростання. Слово представляється таким чином, що молодші (праві) 8 бітів числа розміщаються в першому байті слова, а старші 8 бітів - у другому байті у порядку зростання адрес в оперативні пам’яті. Наприклад, те ж число 91 (=005Bh) розміром у слово зберігається в пам'яті так:
-
5В
00
А, число –91 у розміром елемента даних слово зберігається в пам'яті так:
-
А5
FF
Подвійне слово представляється так - у першому його байті розміщаються молодші 8 бітів числа, у другому байті - попередні 8 бітів і т.д. Наприклад, число 305419896 (=12345678h ) зберігається в пам'яті так:
-
78
56
34
12
А, число –91 у розміром елемента даних подвійне слово зберігається в пам'яті так:
-
A5
FF
FF
FF
Іншими словами, у першому слові подвійного слова розміщаються молодші (праві) 16 бітів числа, а в другому слові - старші 16 бітів, причому в кожнім з цих двох слів у свою чергу використовується "перевернене" представлення.
Таке незвичайне представлення чисел пояснюється тим, що в перших моделях даної серії процесорів одноразово можна було зчитати з пам'яті тільки один байт і що всі арифметичні операції над багатозначними числами починаються з дій над молодшими цифрами, тому з пам'яті в першу чергу треба зчитувати молодші цифри.