
- •"Програмне забезпечення автоматизованих систем"
- •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. Організація процедур та переривань
Процедурою в асемблері є те що в інших мовах програмування називають підпрограмами, функціями процедурами і т.д. Асемблер не накладає на процедури ні яких обмежень, на будь-яку адресу програми можна передати управління командою CALL, і подальше виконання програми передасться вказаної процедури. Виконання тієї чи іншої процедури буде продовжуватись до першого входження команди RET. Така свобода вираження команд може легко призвести до важко читаних програм. У зв’язку з цим у асемблер були включені директиви логічного оформлення процедур.
Мітка proc мова тип USES регістри ;TASM. Або
Мітка proc тип мова USES регістри ;MASM/WASM ret
Мітка endp
Всі операнди PROC необов’язкові.
Тип може приймати значення NEAR та FAR, і якщо він вказаний всі команди RET в тілі процедури будуть замінені відповідно RETN та RETF. По замовчуванню розуміють, що процедура має тип NEAR в моделях пам’яті TINY, SMALL, COMPACT.
PROC дозволяє рахувати параметри, які передаються викликаючого програмою. В цьому випадку необхідно вказати мову високого рівня, так як різні мови високого рівня використовують різні способи передачі параметрів.
USES – список регістрів, значення яких змінює процедура. Асемблер розміщує на початок процедури набір команд PUSH, а перед командою RET – набір команд POP, так що значення перерахованих регістрів будуть відновлені.
2. Передача параметрів процедурам через регістри, через стек, через таблиці, через глобальні області
Процедури можуть отримувати і не отримувати параметри із визваної процедури і можуть повертати або не повертати відповіді.
На мові асемблера параметри для процедур можна передавати за допомогою шести способів:
По значенню
По сильці
По повернутому значенню
По результату
По імені
Ускладненим розрахуванням
Параметри можна передавати в одному із п’яти місць:
В регістрах
В глобальних перемінних
В стеку
У потоці коду
В блоку параметрів
Розглянемо деякі способи передачі параметрів для процедур
Передача параметрів по значенню
Процедурі передається значення параметру. При цьому значення параметру фактично копіюється, і процедура використовує його копію, так що модифікація вихідного параметру неможлива. Цей механізм використовується для передачі таких параметрів як байти або слова.
Приклад: (параметри передаються в регістрах)
Mov ax, word ptr value ; Сделать копию значения
Call procedure ; Вызвать процедуру
3. Передача параметрів по ссылке
Процедурі передається не значення змінної, а її адреса, по якої процедура сама прочитає значення параметру. Такий механізм зручний для передачі великих масивів даних, і в тих випадках коли процедура повинна модифікувати параметри.
Приклад:
Mov ax, offset value
Call procedure
4. Передача параметрів по повернутому значенню
Цей механізм з’єднує передачу по значенню та передачу по ссылке. Процедурі передають адресу змінної, а процедура робить локальну копію параметру і потім працює з нею.
Приклад:
Mov global_variable, offset value
Call procedure
[…….]
procedure proc near
mov dx, global_variable
mov ax, word ptr [dx]
mov word ptr [dx], ax
procedure endp