Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Асемблер ВІДПОВІДІ!!!.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
123.78 Кб
Скачать

13. Передача параметрів через стек

При вході в процедуру виконується стандартна послідовність команд:

PUSH EBP

MOV EBP, ESP

SUB ESP, N, N - кількість байт для локальних змінних.

Адреса першого параметра визначається як [EBP +8 Н]. Адреса першої локальної змінної, якщо вона зарезервовано, визначається як [ЕВР-4] (мається на увазі змінна типу DWORD). На Асемблері не дуже зручно використовувати локальні змінні, і ми не будемо резервувати для них місце

В кінці процедури йдуть команди:

MOV ESP, EBP

POP EBP

RET M

Тут M - об'єм, взятий у стека для передачі параметрів.

Хотілося б зупинитися ще на одному питанні, пов'язаних зі структурою процедури та п виклику.

Існують два основні підходи. Умовно перший підхід можна назвати Сі-підходом, а другий - Паскаль-підходом.

Перший підхід передбачає, що процедура "не знає", скільки параметрів знаходиться в стеку. Природно, у цьому випадку звільнення стека від параметрів має відбуватися після команди виклику процедури, наприклад, за допомогою команди POP або команди ADD ESP, N (N - кількість байт в параметрах).

Другий підхід заснований на тому, що кількість параметрів фіксовано, а стек можна звільнити у самій процедурі. Це досягається виконанням команди RET N (N - кількість байт в параметрах). Як Ви вже, мабуть, здогадалися, виклик функцій АРІ здійснюється по другій схемі.

14. Використання ресурсів при роботі з діалоговими вікнами.

Діалогові вікна. Діалогові вікна є найбільш складними елементами ресурсів. На відміну від ресурсів, які ми до сих пір розглядали, для діалогу не задає ідентифікатор. Звернення до діалогу відбувається по його імені (рядку).

#define WS_SYSMENU 0x00080000L

#define WS JvlINIMIZEBOX 0x00020000L

#define WS_MAXIMIZEBOX 0x00010000L

DIAL1 DIALOG 0, 0, 240, 120

STYLE WS SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX Caption "Приклад діалогового вікна"

FONT 8, "Arial”

{

}

Як бачимо, визначення діалогу починається з рядка, що містить ключове слово DIALOG. В цьому ж рядку далі вказується положення і розмір діалогового вікна. Далі йдуть рядки, що містять інші властивості вікна. Нарешті йдуть фігурні дужки. У даному випадку вони порожні. Це означає, що на вікні немає ніяких керуючих елементів. Тип вікна, а також інших елементів визначається константами, які ми помістили на початку файлу.

15.Використання ресурсів при роботі з меню.

Меню. Меню також може бути задано у файлі ресурсів. Як і діалогове вікно, у програмі воно визначається по імені (рядку). Меню можна задати і у звичайному вікні, і в діалоговому вікні. Для звичайного вікна при реєстрації класу слід просто замінити рядок

MOV DWORD PTR [WC.CLMENNAME], 0

на

MOV DWORD PTR [WC.CLMENNAME], OFFSET MENS

Тут Mens - ім'я, під яким меню розташовується в файлі ресурсів. Меню на діалогове вікно встановлюється іншим способом, який, зрозуміло, підходить і для звичайного вікна. На початку меню завантажується за допомогою функції LoadMenu, а потім встановлюється функцією SetMenu.

Розглянемо структуру файл>' ресурсів, що містить визначення меню.

MENUP MENU

{

POPUP "& Перший пункт"

{

MENUITEM "& Перший", І MENUITEM "В & якому", 2 POPUP "Підмен & ю"

{

MENUITEM "Десятий пунк & т", 6

}

}

POPUP "& Другий пункт"

{

MENUITEM "Треті & й", З MENUITEM "Четверт & ий", 4 }

MENUITEM "Ви & хід", 5

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]