Студопедия

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника



Ішпрограммалар(Процедуралар).




Процедур көбінесе ішпрограмма (subprogram) деп аталады. Ішпрограмма – бір рет сипатталған (жазылған), дербес мағынасы бар және керек болған жағдайда программаның кез келген жерінен белгілі бір мәселені шешу үшін қайта-қайта шақырып жұмыс істетуге болатын командалар жиынтығы. Ассемблер тілінде процедураларды сипаттау үшін PROC/ENDP директивалары және RET командасы пайдаланылады.

Процедураларды программада мына жерлерде орналастыруға болады:

- программаның басында (бірінші орындалатын команданың алдында);

- программаның соңында (операциялық жүйеге басқаруды қайтаратын команданың соңында);

- аралық вариант. Процедураның денесі программаның немесе басқа бір процедураның ішінде орналасуы мүмкін (осындай жағдайда процедураны jmp шартсыз басқару тізгінін ауыстыру командасының көмегімен айналып кету керек).

Процедураның орындалуын қамтамасыз ететін командалар үш функцияны орындауы қажет:

1. IP команда көрсеткішінің сақталуын, яғни қайта оралу адресін қамтамасыз етеді;

2. Процедураның орындалуын бастау.

3. IP команда көрсеткішінің сақталған мазмұнын программаға қайтаруын және осы орыннан программаның жалғастыруын қамтамасыз етеді.

Бұл барлық функциялар екі командамен орындалады, яғни CALL процедураны шақыру және RET-процедурадан қайта оралу.

CALL командасы оралу адресін есте сақтау және басақаруды процедураға беру функцияларын атқарады. Ол 16 биттік болатын оралу адресін стекке орналастырады, егер процедура NEAR атрибутымен анықталған болса және 32биттік, егер ол FAR атрибутымен анықталған болса. NEAR атрибуты бар процедуралар өздерi тұрған сегменттен қана шақырылуы мүмкiн, ал FAR атрибутты процедуралар басқа сегменттен де шақырыла бередi.CALL командасының пішіміндегі «процедура_аты»-шақырылатын процедураның аты. Егер «процедура_аты» -ында NEARатрибуты бар болса, онда CALL командасы келесi команда адресін стекке орналастырады. Егер «процедура_аты»- FAR атрибутына ие болса, онда CALL командасы CS командалар сегмент регистрiнінің ішіндегісін стекке, содан кейін адрестің ығысу аралығын орналастырады.



CALL командасының қайта оралу адресін сақтағаннан кейiн «процедура_аты» тамға адресінің ығысу аралығын IP командалар көрсеткiшiне жүктейдi. Егер процедура FARатрибутына ие болса, онда CALL командасы «процедура_аты» тамғасының CS регистрiне блок номерiн де жүктейдi.

RET командасы процедурадан, осы процедураны шақырған программаға қайта оралуын орындайды. Ол процедураның соңғы командасы болуы керек, бірақ процедураның соңында тұруы мiндеттi емес, ол тек соңынан атқарылады. RET командасы стектен қайта оралу адресін табады.Егер процедура NEAR атрибутына ие болса, онда RET командасы стектен бiр сөз алып, оны IP командалар көрсеткiшiне жүктейдi. Егер процедура FAR атрибутына ие болса, RET командасы стектен екі сөз алады: IPкомандалар көрсеткiшiне жүктеу үшiн алдымен адрестің ығысу аралығын, содан кейiн блок номерiн CS командалар сегмент регистрiне жүктеуді.



Процедураны регистр немесе жады ұяшығы арқылы жанама шақыруға да болады. Процедураны жанама шақырғанда IP –дің мәні деректер сегментінен алынады. Егер жады үяшықтарын адрестеу үшiн ВР регистрi пайдаланса, онда IP мәнiн стек сегментiнен алады. NEAR атрибутты процедураны регистр арқылы шақыруға болады, мысалы:

CALL BX

BXбазалық регистрi процедура адресінің CSсегмент регистрiне қатысты ығысу аралығын ұстайды. Команданы орындағанда BX регистрi мазмұнын IP командалар көрсеткiшiне көшiредi, содан кейiн CS:IP регистрлер жұбымен адрестелетін командаға басқаруды жеткізеді.

NEAR атрибутты процедураны сөз өлшемiндегi айнымалыны пайдаланып жанама шақыруға болады.

FARатрибутты процедураны, екі сөз өлшемдегi айнымалыны пайдаланып жанама шақыруға болады.

Процедураның өзi басқа процедураларды шақыра алады. Бір процедурадан екіншісін шақыру процедураның қабаттасуы деп аталады. Процедура қабаттасудың бiрнеше деңгейi болуы мүмкiн. Олай болса СALL командасы стекке екі немесе төрт (64 Кбайт) адрес байтын сиғызса, қабаттасу деңгейi стек сегментi өлшемiмен шектеледі.

 

Негізгі әдебиет:

1[96-99];

4[121-123];

7[283-291].

Қосымша әдебиет:

1[311-318];[331-346].

Бақылау сұрақтары

1.Макроанықтама қалай сипатталады?

2.Макрокоманда деген не?

3. Макроанықтаманы программада орналастырудың үш варианты?

4.Сырттық сілтеме жалғаноператорлары?

5. Макроанықтаманың процедурадан (ішпрограммадан) ерекшілігі?

13 дәрістің тақырыбы:


Дата добавления: 2015-01-05; просмотров: 21; Нарушение авторских прав







lektsii.com - Лекции.Ком - 2014-2021 год. (0.01 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты