Сегментті анықтайтын директивалар
Программа бөлек сегмент түрінде жасалады және оның ішінде мәліметтер, стек, шартбелгілер және қосымша сегменттері кіреді. Сегментті сипаттаған кезде басы SEGMENT нұсқауымен, ал соңы ENDS нұсқауымен белгіленеді. Сегмент келесі форматта сипатталады:
Аты SEGMENT [теңестіру_түрі] [біріктіру_түрі] [класс]
. . .
Аты ENDS
Теңестіру_түрі сегмент басының шекарасын табады және келесі тағайындаудың бірін алуы мүмкін:
BYTE - сегмент кез келген адрестен басталады.
WORD - сегмент бөлінетін адрестен басталады, екіге бөлінетін (ххх0b)
DWORD - сегмент бөлінетін адрестен басталады, төртке бөлінетін (хх00b)
PAPA - сегмент параграф адресінің шекарасынан басталады, 16 бөлінетін (ххх0h), үнсіздікпен қолданылады.
PAGE - сегмент 256-байттық бет адресінің шекарасынан басталады, 256 бөлінетін (хх00h)
MEMPAGE - сегмент адрестен басталады, 4 Кбайтқа бөлінетін (х000h)
Біріктіру түрі берілген сегмент қарастыру кезінде басқа сегменттермен біріктіруін анықтайды. Келесі біріктіру түрлері қолданылады:
PRІVАТЕ – сегмент берілген модулден тыс басқа атпен берілген басқа сегмент топтарымен бірікпейді, үнсіздікпен қолданылады.
PUBLІC – бір атпен берілген сегменттерді біріктіреді, біріктірген сегменттің ұзындығы біріктірілген сегменттердің қосылған ұзындығына тең.
COMMON – бір атпен берілген сегменттерді бір адреске біріктіреді. Бұл атпен берілген сегменттер бірін –бірі жабады және жадыны бірге қолданады, біріктірген сегменттің ұзындығы қосылған сегменттердің ең үлкен ұзындығына тең
STACK – стек сегментін анықтау. Жөндегішті бір атпен берілген сегменттерді қосуға мәжбүр етеді және бұл сегменттердің адресін SS регистріне сәйкес анықтайды. Сегменттің ұзындығы біріктірілетін сегменттердің қосындысына тең.
MEMORY - кодтар сегментінен кейін орналасқан деректер сегментін шақырады. Сегменттің өлшемі COMMON біріктіруіне ұқсас анықталады.
АТ_ПАРАГРАФ - берілген операнд бекітілген адрестер бойынша таңбалар мен айнымалыларды анықтауды қамтамасыз етеді.
Мысалы, экрандық видеобуфер адресін анықтау үшін:
VІDEO-RAM SEGMENT AT OB800h қолданылады.
Класс. апострофқа алынған, берілген операнд компоновка кезінде топтау үшін қолданылады. «Класс» операнды ретінде 'STACK','CODE','DATA' аталымдарын пайдалануға болады
Сегмент өлшемінің типі. i80386 және одан жоғарғы микропроцессорлар сегменттері 16 немесе 32-разрядтық болады. Бұл негізінен біріншіден сегмент өлшеміне және оның ішіндегі физикалық адрестің қалыптастырылу тәртібіне әсер етеді. Сегмент өлшемдерінің келесі типтері қолданылады:
USE16 — бұл сегмент 16-разрядтық адресацияны қолданатындығын білдіреді. Физикалық адресті қалыптастыру кезінде 16-разрядтық ығысу қолданылады. Сәйкесінше, мұндай сегмент 64 Кбайт кодтар сегментінен немесе деректер сегментінен тұрады;
USE32 — бұл сегмент 32-разрядтық адресацияны қолданатындығын білдіреді. Физикалық адресті қалыптастыру кезінде 32-разрядтық ығысу қолданылады. Сәйкесінше, мұндай сегмент 4 Гбайт кодтар сегментінен немесе деректер сегментінен тұрады;
Сегментті анықтаудың қысқышы директивалары
.CODE [аты]Код сегментінің басы немесе жалғасуы
.DATAИнициализацияланған деректер сегментінің басы немесе жалғасы. Сондай-ақ
near типіндегі деректерді анықтау үшін қолданылады.
.CONSTМодульдің тұрақты деректерінің (тұрақтыларының) сегментінің басы немесе
жалғасы
.DATA?Инициализацияланбаған деректер сегментінің басы немесе жалғасы. Сондай-
ақ near типіндегі деректерді анықтау үшін қолданылады.
.STACK[өлшемі]Модул стек сегментінің басы немесе жалғасы. Параметр [өлшем] стек
өлшемін береді
.FARDATA[аты]Инициализацияланған far типтегі деректер сегментінің басы немесе жалғасы
Дата добавления: 2015-10-26; просмотров: 1107;