- •Теоретичні відомості
- •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. Написати програму обчислення виразу :
|
Вираз |
Змінні |
1 |
f=(d*c-1)/(c*a-10)+a*b/c+a*c%d+b/d |
a=6fh b=14 c=-93 d=46h |
2 |
f=a-b*(c+(d/a)*b%(c%d-a)/b)+c/d |
a=58h b=45h c=-66h d=-5fh |
3 |
f=(a-b+(c+(d-a*b/c*d)/a/b)*c)/d |
a=61 b=19 c=15 d=-44h |
4 |
f=a-(b/(c*d/a%(b+c*d))/a+b)+c%d |
a=45 b=70 c=-75 d=2eh |
5 |
f=a-b/c+((d/a+(b/c)*d%a+b*c)+d) |
a=35 b=31 c=1bh d=59 |
6 |
f=a-b*((c+d/a+(b+c)*d+a)%b)-c-d |
a=60 b=71 c=51h d=-19h |
7 |
f=a-b*(c%(d+(a-b)/c)+d/a)*b*c/d |
a=47 b=41 c=-1fh d=18 |
8 |
f=a*(b/c-(d*(a)-b)+c/d/a-b+c+d) |
a=70 b=31 c=-6ah d=-2bh |
9 |
f=a+(b-c%(d-(a/b-c)*d-a)+b*c)+d |
a=11h b=30 c=47 d=51 |
10 |
f=(a*(b+c))*d/(a+b/c+d*a%b-c)-d |
a=53h b=1fh c=34 d=-39 |
11 |
f=(a-b-(c+d)*(a+b)/c%d+a)*b/c+d |
a=72 b=79 c=-15 d=89 |
12 |
f=a-b+(c-d%(a-b)/(c+d)%a-b+c)*d |
a=53h b=3eh c=-72 d=-73 |
13 |
f=a/(b+c-(d-a/b+(c*d)+a))*b-c%d |
a=28h b=55 c=67h d=42 |
14 |
f=(a+b*(c-(d+a)/b)%c+d*a-b+c)/d |
a=4fh b=35 c=-18h d=-69 |
15 |
f=a/b*c+((d/(a*b+c-d*a+b)-c))-d |
a=91 b=31h c=54h d=-88 |
16 |
f=a-b*c*d/((a-b)-(c/d+a/b)%c-d) |
a=94 b=38 c=59h d=57 |
17 |
f=a-b%c*(d+((a+b))/c+d)+a-b/c/d |
a=5ah b=66 c=-61h d=-6ch |
18 |
f=(a-b-c*((d-a)/b)%c+d)*a+b/c+d |
a=4fh b=36 c=74 d=39h |
19 |
f=a%(b+c%d+(a-(b/c))+d+a*b)/c+d |
a=6eh b=33 c=-98 d=53 |
20 |
f=a-(b/(c*d+(a/b)/c/d)%a+b+c)*d |
a=46h b=64 c=60 d=-32 |
Заняття №7 Обробка символьних рядків використанням ланцюжкових команд.
Мета. Вивчення можливостей роботи з символьними рядками з використанням використовуючи ланцюжкові команди.
План заняття :
Особливості команд обробки рядків.
Напрямок обробки символьних рядків. Ознака DF. Команди зміни ознаки ( CLD, STD ).
Префікси повторення( REP, REPE, REPZ, REPNE, REPZE ).
Команди обробки символьних рядків ( MOVS, CMPS, SCAS, LODS, STOS).
Теоретичні відомості
Особливості команд обробки рядків.
На практиці буває необхідно переслати або порівняти декілька раз підряд дані розміром байт, слово або подвійне слово. Для таких кодування дій, які повторяються призначені спеціальні ланцюжкові команди.
Кожна ланцюжкова команда за одну ітерацію може обробляти структурний елемент розміром у байт, слово або подвійне слово.
Операнди приймач та джерело, якщо визначені синтаксисом команди, знаходяться в пам’яті, і адресуються відповідним чином. Так адреса джерела — за допомогою пари регістрів DS:ESI/SI (DS – за замовчуванням, допускається заміна сегмента), а адреса приймача — за допомогою пари регістрів ES:EDI/DI (заміна сегмента не допускається). До виконання ланцюжкової команди адреси елементів попередньо повинні бути завантажені у відповідні регістри.
У залежності від стану ознаки DF( DF– ознака напрямку обробки ланцюжка) змінюється значення регістрів ESI/SI і/або EDI/DI:
якщо DF=0, то збільшити вміст цих регістрів на довжину структурного елемента послідовності;
якщо DF=1, то зменшити вміст цих регістрів на довжину структурного елемента послідовності.
Для організації багаторазового повторення ланцюжкових команд використовуються префікси повторення REP, REPE, REPNE,REPZ та REPNZ.