регістра CS, так і значення регістра IP. Такий перехід називався дальнім і здійснювався довше.
Прапори стану (біти 0, 2, 4, 6, 7 і 11) відображають результат виконання арифметичних інструкцій, таких як ADD, SUB, MUL, DIV.
Прапор переносу CF встановлюється при перенесенні з старшого значущого біта/позику в старший значущий біт і показує наявність переповнення в беззнакову целочисленной арифметиці. Також використовується в довгій арифметиці.
Прапор парності PF встановлюється, якщо молодший значущий байт результату містить парне число одиничних бітів. Спочатку цей прапор був орієнтований на використання в комунікаційних програмах:
при передачі даних по лініях зв'язку для контролю міг також передаватися біт парності та інструкції для перевірки прапора парності полегшували перевірку цілісності даних.
Допоміжний прапор переносу AF встановлюється при перенесенні з біта третій результату/позику в третій біт результату. Цей прапор орієнтований на використання в двійковій-десяткового (binary coded decimal, BCD) арифметиці.
Прапор нуля ZF встановлюється, якщо результат дорівнює нулю.
Прапор знака SF дорівнює значенню старшого значущого біта результату, який є знаковим бітом в знаковій арифметиці.
Прапор переповнення OF встановлюється, якщо цілочисельний результат занадто довгий для розміщення в цільовому операнде (регістрі або комірці пам'яті). Цей прапор показує наявність переповнення в знаковій целочисленной арифметиці.
. 1 ПАКЕТ MASM. СТРУКТУРА ПРОГРАМИ
У макроассемблер MASM включені директиви, що спрощують визначення сегментів програми і, крім того, що припускають ті ж угоди, які використовуються в мовах високого рівня Microsoft. Спрощені директиви визначення сегментів генерують необхідний код, вказуючи при цьому атрибути сегментів і порядок їх розташування в пам'яті. Скрізь в цій книзі ми будемо використовувати саме спрощені директиви визначення сегментів, найбільш важливі з яких перераховані далі:
. DATA (. Data) - визначає початок ініціалізованих сегмента даних з ім'ям _DATA і за наявності попереднього сегмента завершує його. Цій директиві повинна передувати директива. MODEL.
Сегмент, визначений з атрибутом. DATA,
повинен містити тільки початкові дані, тобто мають початкові значення, наприклад,
. dataDW 11DB Text string
byte1 DB?
. DATA? (. Data?) - Визначає сегмент даних, в якому розташовуються неініціалізовані дані. При наявності попереднього сегмента новий сегмент завершує його. Неініціалізовані дані можуть оголошуватися в сегменті. DATA? за допомогою оператора? Перевагою директиви. DATA? є те, що при її використанні зменшується розмір виконуваного файлу і, крім того,
забезпечується краща сумісність з іншими мовами. Цій директиві повинна передувати директива. MODEL. Ось приклад використання діректіви.DATA?
. data?
. CONST (. Const) - визначає початок сегмента даних, в якому визначено константи. При наявності попереднього сегмента новий сегмент завершує його. З метою сумісності з іншими мовами дані повинні бути в форматі, сумісному з прийнятими в мовах високого рівня угодами. Сегмент, визначений директивою. CONST, має атрибут тільки для читання. Цій директиві повинна передувати директива. MODEL.
. STACK (. Stack) [розмір] - визначає початок сегмента стека з вказаним розміром пам'яті, який повинен бути виділений під область стека. Якщо параметр не вказаний, розмір стека передбачається рівним 1 Кбайт. При наявності попереднього сегмента новий сегмент завершує його. Цій директиві повинна передувати директива. MODEL.
. CODE (. Code) [ім'я] - визначає сегмент програмного коду і закінчує попередній сегмент, якщо такий є. Необов'язковий параметр ім'я заміщає ім'я _TEXT, задане за замовчуванням. Якщо ім'я не визначено, асемблер створює сегмент з ім'ям _TEXT для моделей пам'яті tiny, small, compact і flat або сегмент з ім'ям ім'я модуля TEXT для моделей пам'яті medium, large і huge. Цій директиві повинна передувати директива. MODEL, яка вказує модель пам'яті, використовувану програмою.
. MODEL (. Model) модель_памяті [, соглашеніе_о_визовах] [, тіп_ОС] [, параметр стека] - визначає модель пам'яті, використовувану програмою. Директива повинна знаходитися перед будь-який з директив оголошення сегментів. Вона пов'язує певним чином різні сегменти програми, які визначаються її параметрами tiny, small, compact, medium, large, huge або flat. Параметр модель пам'яті є обов'язковою.