
- •"Програмне забезпечення автоматизованих систем"
- •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. Організація й керування дисками
1. Подання даних арифметичні операції
Тут розглядається машинне подання цілих чисел, рядків й адрес. Подання двоїчно-десяткових чисел, використовуваних досить рідко, не розглядається. Що стосується речовинних чисел, то в ПК немає команд речовинної арифметики (операції над цими числами реалізуються програмним шляхом або виконуються співпроцесором) і тому немає стандартного подання речовинних чисел. Крім того, розглядаються деякі особливості виконання арифметичних операцій.
Шістнадцятирічні числа записуються з буквою h на кінці, двійкові числа - з буквою b (так прийняте в MASM).
Подання цілих чисел. У загальному випадку під ціле число можна відвести будь-яке число байтів, однак система команд ПК підтримує тільки числа розміром у байт й слово й частково підтримує числа розміром у подвійне слово. Саме ці формати й будуть розглянуті.
У ПК робиться розходження між цілими числами без знака (невід’ємними) і зі знаком. Це порозумівається тим, що в осередках одного й того ж розміру можна представити більший діапазон без знакових чисел, чим ненегативних знакових чисел, і якщо відомо заздалегідь, що деяка числова величина є ненегативної, те вигідніше розглядувати її як беззнакову, чим як знакову.
2. Цілі числа без знака
Ці числа можуть бути представлені у вигляді байта, слова або подвійного слова - залежно від їхнього розміру. У вигляді байта представляються цілі від 0 до 255 (=2^8-1), у вигляді слова - цілі від 0 до 65535 (=2^16-1), в виді подвійного слова - цілі від 0 до 4 294 967 295 (=2^32-1). Числа записуються у двійковій системі числення, займаючи всі розряди осередку.
Наприклад, число 130 записується у вигляді байта 10000010b (82h).
Числа розміром у слово зберігаються в пам'яті в "переверненому" виді: молодші (праві) 8 бітів числа розміщаються в першому байті слова, а старші 8 бітів - у другому байті (в 16-ричной системі: дві праві цифри - у першому байті, дві ліві цифри - у другому байті).
Наприклад, число 130 (=0082h) у вигляді слова зберігається в пам'яті так:
-і-і-і-і-і-
| 82 | 00 |
-і-і-і-і-і-
(Відзначимо, однак, що в регістрах числа зберігаються в нормальному виді:
-і-і-і-і-і-
AX | 00 | 82 |
-і-і-і-і-і-
AH AL )
"Перевернене" подання використається й при зберіганні в пам'яті цілих чисел розміром у подвійне слово: у першому його байті розміщаються молодші 8 бітів числа, у другому байті - попередні 8 бітів і т.д. Наприклад, число 12345678h зберігається в пам'яті так:
-і-і-і-і-і-і-і-і-і-і-
| 78 | 56 | 34 | 12 |
-і-і-і-і-і-і-і-і-і-і-
Інакше кажучи, у першому слові подвійного слова розміщаються молодші(праві) 16 бітів числа, а в другому слові - старші 16 бітів, причому у кожному із цих двох слів у свою чергу використається "перевернене" подання.
Таке незвичайне подання чисел порозумівається тим, що в перших моделях ПК за раз можна було вважати з пам'яті тільки один байт і що всі арифметичні операції над багатозначними числами починаються з дій над молодшими цифрами, тому з пам'яті в першу чергу треба зчитувати молодші цифри, якщо відразу не можна вважати всі цифри. З огляду на це, у перших ПК і стали розміщати молодші цифри числа перед старшими цифрами, а заради наступності таке подання чисел зберегли в
наступних моделях ПК. Звичайно, "перевернене" подання незручно для людей, однак при використанні мови асемблера ця незручність не почувається: в MASM всі числа записуються в нормальному, неперевернутому виді.