Процедури в assembler

У цій невеликій статті познайомимося з процедурами в Assembler, так як їх розуміння і грамотне використання відкриває великі можливості перед програмістом. Приклад програми буде спрямовано на те, щоб ви краще могли зрозуміти як їх використовувати.

прості процедури

Почнемо з простої процедури, яка складає 2 числа:

Початок практично стандартне, крім одного рядка: «option casemap: none». Цей рядок вказує Assembler, щоб він розрізняв регістри, так як за замовчуванням він їх не розрізняє.

Далі перейдемо до найцікавішого, а саме процедурі Summa: як ви помітили, ця процедура описується в самої останньої частини коду перед завершенням програми і саме опис завершується командою endp.

Думаю, саму процедуру пояснювати немає сенсу, але варто пояснити, що в нашій програмі зустрічається 2 слова ret. Так ось, той ret, який входить в опис, виконають лише вихід в основну програму, а ret в основній програмі, якраз виходить вже з самої програми.
Також зауважте, що виклик процедури Assembler проводиться за допомогою команди Call.

Процедури Assembler з параметрами

Ну начебто все просто і легко, розібралися з процедурами, але все ж це не так!
Оскільки ми з вами пізнаємо все більше і більше, думаю варто дізнатися, що все таки командою ret завершуватися не завжди правильно, тому для цього існує своя процедура Assembler, яка крім того, що завершує дію, ще й звільняє ресурси. Ця процедура ExitProcess.
Процедура, яка приймає 1 параметр. А для того, щоб використовувати процедури з параметром слід спочатку поставити прототип цієї процедури. Прототип задається за допомогою слова «proto». потім йдуть параметри.

Прототип пишеться до всіх процедур з параметрами, і насправді, до нашої процедурі ми теж могли б використовувати прототип з 2 параметрами. Це записалося б наступним чином:

До речі, хто не знає, DWORD це всього лише тип даних в Assembler, який займає 4 байта, ми також могли використовувати BYTE (1 байт) або WORD (2 байта).
А викликати нашу процедуру могли б так:

Тепер, думаю, можемо підвести підсумки:

Процедури без параметрів вимагають опису (також в самому коді), їх виклик можна проводити за допомогою команди Call

На цьому я з вами прощаюся, до наступної статті!

Поділитися посиланням:

Схожі статті