
- •"Програмне забезпечення автоматизованих систем"
- •1. Оперативна пам'ять
- •2. Регістри
- •3. Прапори
- •1. Переходи
- •2. Безумовні переходи
- •3. Умовні переходи
- •4. Команди керування циклом
- •1. Подання даних арифметичні операції
- •2. Цілі числа без знака
- •3. Цілі числа зі знаком
- •4. Особливості виконання арифметичних операцій
- •5. Подання символів і рядків
- •6. Подання адрес
- •7. Директиви визначення даних
- •1. Структура команд. Виконавчі адреси
- •2. Формати команд
- •3. Запис команд в masm
- •1. Сегменти пам’яті, сегментні регістри
- •2. Сегментні регістри по домовленості
- •3. Сегментування, базування й індексування адрес
- •4. Програмні сегменти. Директива assume
- •5. Початкове завантаження сегментних регістрів
- •6. Посилання вперед
- •1. Строкові операції
- •1. Стек
- •2. Основні стекові команди
- •1. Організація процедур та переривань
- •2. Передача параметрів процедурам через регістри, через стек, через таблиці, через глобальні області
- •3. Передача параметрів по ссылке
- •4. Передача параметрів по повернутому значенню
- •5. Передача параметрів в стеку
- •6. Локальні змінні
- •1. Процеси і потоки
- •1.1 Розподіл часу між потоками
- •1.2 Динамічна зміна рівня пріоритету потоку
- •2. Робота із процесами й потоками в Win32 api
- •1. Адресний простір процесу
- •2. Керування віртуальною пам'яттю. Vmm
- •3. Файли даних, що проектуються на згадку
- •4. Взаємодія процесів через загальну область даних. Когерентність
- •5. Купи
- •1. Визначення вікна. Компоненти й параметри вікон
- •2. Клас вікна
- •3. Ієрархія вікон
- •1. Обмін даними між процесами
- •2. Вилучений виклик процедур (rpc - Remote Procedure Call)
- •3. Синхронізація потоків
- •1. Загальний порядок обробки виключень
- •2. Фільтри й оброблювачі виключень
- •1. Загальна структура системного реєстру
- •2. Робота додатків із системним реєстром
- •1. Файлові структури
- •2. Робота з томами й каталогами
- •3. Синхронна робота з файлами
- •4. Асинхронна робота з файлами
- •1. Системні файли ntfs
- •2. Master File Table (mft)
- •3. Цілісність даних і здатність до самовідновлення.
- •4. Організація й керування дисками
3. Умовні переходи
Практично у всіх командах умовного переходу перевіряється значення того або іншого прапора (наприклад, прапора нуля ZF) і, якщо він має певне значення, виконується перехід за адресою, зазначеному в команді. Значення прапора повинне бути встановлене попередньою командою, наприклад, командою порівняння
CMP op1,op2,
яка обчислює різницю op1-op2, однак результат нікуди не записує, а тільки міняє прапори, на які й буде реагувати команда умовного переходу.
В MASM команди умовного переходу мають наступну форму: Jxx op,
де xx - одна або кілька букв, у скороченому виді відображаюча провіряєма умова (звичайно в припущенні, що перед цією командою находиться команда порівняння). Приклади деяких мнемонік:
JE - перехід "по дорівнює" (jump if equal);
JL - перехід "по менше" (jump if less);
JNL - перехід "по неменше" (jump if not less).
Особливістю всіх машинних команд умовного переходу є те, що вони реалізують внутрісегментний відносний короткий перехід, т.е. додають до лічильника команд IP свій операнд, розглянутий як знакове число від -128 до 127. В MASM цей операнд завжди повинен записуватися як мітка, що асемблер замінить на відповідне зрушення.
Така особливість команд умовного переходу викликає незручність при переходах на "далекі" команди. Наприклад, якщо треба зробити перехід при A<B на команду, позначену міткою L і розташовану далеко від команди переходу, то доводиться використати команду довгого безумовного переходу:
MOV AX,A
CMP AX,B ;порівняння A й B
JNL M ;не менше -і> M (обхід команди JMP)
JMP L ;менше -і> L (довгий перехід)
M: ...
4. Команди керування циклом
У ПК є кілька команд, що спрощують програмування циклів з заздалегідь відомим числом повторень. Застосування цих команд вимагає, щоб до початку циклу в регістр CX було занесене число кроків циклу. Самі команди розміщаються наприкінці циклу, вони зменшують значення CX на 1 і, якщо CX ще не дорівнює 0, передають керування на початок циклу. Наприклад, знайти S - суму елементів масиву X з 10 чисел-слів можна так:
MOV AX,0; початкове значення суми (накопичується в AX)
MOV SI,0; початкове значення індексного регістра
MOV CX,10; число повторень циклу
L: ADD AX,X[SI] ;AX:=AX+X[i]
ADD SI,2; SI:=SI+2
LOOP L ; CX:=CX-1; if CX<>0 then goto L
MOV S,AX; S:=AX
Крім команди LOOP є ще дві "циклічні" команди - LOOPZ й LOOPNZ (вони мають синонимічні назви LOOPE й LOOPNE), яких крім регістра CX перевіряють ще й прапор нуля ZF; наприклад, команда LOOPZ "виходить" із циклу, якщо CX=0 або ZF=1. Цю команду можна, наприклад, використати при пошуку в масиві першого нульового елемента, де повинне бути передбачено дві умови виходу із циклу: або буде знайдений нулевий елемент (ZF=1, якщо перед LOOPZ поставити команду порівняння наступного елемента з 0), або буде вичерпаний весь масив (CX=0)
Відзначимо, що всі ці "циклічні" команди реалізують короткий відносний перехід, як і команди умовного переходу, тому їх можна використати тільки для циклів з невеликим числом команд.
В MASM є ще дві команди переходу - CALL (перехід з поверненням) і RET (повернення з підпрограми).
Лекція 3-4
Тема: Типи даних у процесорі. Представлення цілих чисел. Знакові та беззнакові числа. Представлення символів та рядків. Кодування чисел. Арифметичні операції. Особливості виконання арифметичних операцій. Двоїчні арифметики. Представлення адрес. Директиви визначення даних