Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M1_8spPm.doc
Скачиваний:
1
Добавлен:
18.09.2019
Размер:
97.79 Кб
Скачать
  1. Організація програмних модулів на мові асемблера та у вигляді вставок

В програмних модулях та звертаннях до підпрограм треба забезпечити коректну передачу аргументів і результатів за концепціями даних мов високого рівня. При передачі даних за значенням більшість примірників даних передаються повними значеннями, а при передачі за посиланнями до функцій передаються адреси даних.

Команди передачі управління змінюють вміст регістрів CS та IP, в результаті чого процесор переходить на но­ву послідовність команд. Ці команди поділяються на 5 груп: команд умовної і безумовної передачі управління, умовних установок, викликів процедур і переривань.

При вставках на мові Асемблера всі функції з передачі управління та даних між програмами покладаються на транслятор з мови високого рівня.

  1. Організація передачі аргументів і результатів процедур і функцій

Для створення на мові Асемблера програмних модулів, сумісних з будь-якою заданою мовою високого рівня важливо додержуватись угод про зв’язки, прийнятих при реалізації цієї мови для конкретної цільової мови або конкретного режиму заданого цільового процесора. Угоди про зв’язки включають складний комплекс правил, що стосуються прологів та епілогів процедур і функцій та послідовностей виклику функцій:

- стандарту розміщення іменованих констант і змінних, в тому числі глобальних, локальних, та інших, у пам’яті;

- стандарту використання регістрів і пам’яті цільового процесора реалізації мови;

- стандарту передачі аргументів та результатів процедур і функцій;

- стандарту передачі управління при звертанні до функцій і процедур та поверненні з них.

Прологи та епілоги функцій визначаються режимами процесорів, режимами виконання програм (налагодження або заключний продукт) та механізмами передачі даних та управління. Звичайно розрізнюють два стилі передачі аргументів в підпрограми: стиль мови Pascal, в якому аргументи записуються до стеку в послідовності, вказаній у виклику, та стиль мови С, в якому аргументи записуються до стеку в зворотній послідовності. Таким чином, в режимі "Disassembly" для стилю мови Pascal та мови С ми можемо побачити поряд з викликом функцій послідовності команд push в різному порядку, а після повернення для стилю мови С - команду add sp,n, де n – кількість байтів у частині стека, що звільнюється. За базовими угодами про зв’язки будуються прологи та епілоги функцій. Прологи забезпечують доступ до аргументів і локальних даних, а епілоги – доступ до результатів процедур і функцій. Команда ret n разом з виходом з підпрограми звільняє стек від аргументів.

int cmpKey(struct recrd* el, struct keyStr kArg)

{ int i=cmpStr((unsigned char*)el->key.str,

(unsigned char*)kArg.str);

if(i)return i;

return el->key.nMod - kArg.nMod;

}

Системні програми в процесі свого виконання використовують власну вбудовану інформаційну базу (IБ), а також будують ІБ задачі про текст на заданій вхідній мові.

При вставках на мові Асемблера текст коду включається в блоки вигляду:

// порівняння за відношенням порядку

char cmpKys(struct keyStr *k0, struct keyStr *kArg)

{_asm{

push esi

pop esi

}

}

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