- •Теоретичні відомості
- •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 ).
- •Команди обробки символьних рядків
Завдання для самостійної роботи
1. Задано вміст регістрів AL , BL і DL . Знайти вміст регістрів після виконання групи команд :
xor AL,BL
and BL,DL
text AL,DL
not AL
or DL,AL.
де
|
AL |
BL |
DL |
1 |
00110011b |
10010111b |
11010110b |
2 |
10110011b |
11010111b |
11010110b |
3 |
10110011b |
10010111b |
11010110b |
4 |
10101011b |
10010111b |
11010110b |
5 |
10111000b |
01010101b |
01010110b |
6 |
01110011b |
10110111b |
11010110b |
7 |
10110011b |
10000111b |
11010000b |
8 |
00110011b |
10010111b |
01010110b |
9 |
10110010b |
10010101b |
11110100b |
10 |
01110111b |
10010110b |
10010110b |
11 |
00111011b |
10011011b |
11110110b |
12 |
10110101b |
11011110b |
11011110b |
13 |
10110111b |
10011111b |
11011110b |
14 |
10101111b |
10010111b |
11011010b |
15 |
10111100b |
01011101b |
01010110b |
16 |
01110111b |
10110111b |
11011010b |
17 |
10110110b |
10010111b |
11010100b |
18 |
00111001b |
10110111b |
01010110b |
19 |
10110110b |
10110101b |
01110101b |
20 |
01110111b |
10110110b |
10010111b |
2. Написати процедуру для обчислення виразу без використання операцій множення та ділення :
|
Вираз |
Змінні |
1 |
a=a*2+(c/8+(a*8+b/4+c)*2-9)/2+c |
a=2ah b=33 c=4ch d=43h |
2 |
a=b/8+(d*16-(d*256-(a*2+c)*4)/2)-a |
a=6ch b=72h c=32h d=19 |
3 |
a=b/32-(c*16+2*(а*2+d/8-1))+c*128 |
a=71 b=2ah c=4bh d=68h |
4 |
a=(b*4-b*2-(c*4+(d+7)/4)/8+d*256-a |
a=31h b=73 c=14 d=67 |
5 |
a=b/4-d*8+(а*512-d*128)/2+(b+с)*2 |
a=13h b=24 c=1eh d=5bh |
6 |
a=b*512+c/4-(8*a+32*b)/1024+8*d |
a=37h b=39 c=6bh d=2eh |
7 |
a=(a*64+(d*1024-(b+c)*2)/32-c)/2+b |
a=34h b=93 c=3eh d=97 |
8 |
a=a*8+c*2+(d*32-(6+(a+c)*2)/4)*2+b |
a=31h b=64 c=56 d=15h |
9 |
a=a*1024-(b+(c+1)*8+d/4)*8+c/16 |
a=4ch b=44 c=85 d=2ch |
10 |
a=b*512-(d*32+(b+1+c)/4)-d/4-c*4 |
a=30 b=3eh c=2ah d=22 |
11 |
a=(a*4+b*32-(d*8+1)/4-c+1)/4+b*4-c |
a=1dh b=38h c=74 d=3ah |
12 |
a=(b*128-d*64+(25-(b+c)/32)-a*16)/2 |
a=57h b=31h c=46 d=3fh |
13 |
a=b*16+(c*128+(d-1)/2+a*32)/256 |
a=1bh b=5eh c=2ah d=15h |
14 |
a=(a*64-b*16-(d+b*32)/8+c*16)/256 |
a=70h b=83 c=50 d=16h |
15 |
a=b*32-(c/8+d*4+9-b*128)/256-a*16 |
a=73 b=95 c=89 d=24h |
16 |
a=a*1024-(c*32+(d+1)/8-a/4)+b*8)/2 |
a=36h b=39 c=43 d=33 |
17 |
a=b*512-c*8+(7+(b-c)/8-d/4)/2-a*16 |
a=25h b=3eh c=29 d=82 |
18 |
a=b*16+c*8-(c+a)/2-(b*64+d+7)/128 |
a=30h b=62h c=24 d=17 |
19 |
a=a*256+((b+d*2-1)/4-(b+c)/2)*2-c |
a=10 b=21h c=18h d=86 |
20 |
a=(b+а)*64+c*32-(a/2+d*128)/256 |
a=33h b=54 c=83 d=38h |
3. Задано без знакова змінна a розміром в байт. Написати процедуру яка обчислює :
суму чисел записаних в старші та молодші тетраді;
суму чисел записаних з 1 по 6 біт;
суму чисел записаних з 0 по 5 біт;
різницю між числом в старші та молодші тетраді;
різницю між числом в бітах 0 по 5 та числом в бітах 3 по 7;
кількість бітів із значенням 0;
кількість бітів із значенням 1;
різницю між кількість бітів із значенням 1 та 0;
різницю між числом в молодші та молодші тетраді;
побітову логічну суму в старші та молодші тетраді;
побітову логічну суму за модулем 2 в старші та молодші тетраді;
побітовий логічний добуток старші та молодші тетраді;
побітовий логічний добуток бітів з 1 до 3 та 5 до 7;
побітову логічну суму бітів з 0 до 2 та 5 до 7;
побітову логічну суму за модулем 2 бітів з 2 до 5 та 4 до 7;
кількість бітів із значенням 1 в розрядах від 1 до 6;
кількість бітів із значенням 0 в розрядах від 2 до 5;
суму числа записаного у молодшій тетраді та інвертованого числа записаного у старші тетраді;
різницю числа записаного у молодшій тетраді та інвертованого числа записаного у старші тетраді;
суму інвертованого числа записаного у молодшій тетраді та інвертованого числа записаного у старші тетраді;
Додатково.
4. Написати процедуру кодування символьної рядка, помінявши місцями старшу та молодшу тетраду кожного байта.
Лабораторна робота № . 6
Тема: Програмування мовою асемблера цілочислових виразів.
Мета. Вивчення команд множення та ділення цілочислових даних. Програмування арифметичних виразів.
План заняття :
1. Знакове та беззнакове множення (MUL, IMUL).
2. Знакове та беззнакове ділення (DIV, IDIV).
3. Команди розширення знаку (CBW,CWD).
4.Команди зміни ознак (CLC, STC, CMC, CLD, STD, CLI, STI).
Теоретичні відомості