Составление и оформление программ на ассемблере

Логические сегменты отражают разработку програм­мы в виде отличающихся друг от друга областей кода (соб­ственно программы), данных и стека.

Каждый логический (программный) сегмент должен начинаться с директивы SEGMENT (сегмент) и заканчиваться директивой ENDS (конец сег­мента):

<имя> SEGMENT [<список атрибутов>]

……

<имя> ENDS

Логические сегменты как средство языка ассемблера взаимосвязаны с физическими сегментами, представляю­щими собой особенности архитектуры микропроцессора.

Каждый логический сегмент в ассемблерной программе определяет наименованную область памяти, которая адресу­ется с неизменным содержимым одного из сегментных ре­гистров.

Пример:

DATA SEGMENT

key db?

ind dw 10

addr dd?

poly dw 1

DATA ENDS

Необходимая ассемблеру информация о содержимом сегментных регистров сообщается в директиве ASSUME, имеющей следующий формат:

ASSUME <SR: базовое значение>, [<SR: базовое значение>]...

Поле SR содержит имя одного из сегментных регистров (CS, DS, SS, ES), а базовое значение указывает начало об­ласти памяти, адресуемой через сегментный регистр.

Одним из наиболее часто используемых типов базового значения является имя сегмента, например:

ASSUME DS: DATA

До использования сегментного регистра в формировании физических адресов памяти он должен быть инициализиро­ван. База, соответствующая логическому сегменту, пред­ставлена именем сегмента. Следовательно, при инициали­зации сегментного регистра DS, определяющего основную область данных, используется имя основного сегмента дан­ных, например:

сегмент DATA яв­ляется в программе основной областью данных, тогда до лю­бых обращений к переменным необходимо инициализиро­вать сегментный регистр DS:

mov ax,DATA; инициализация регистра ds

mov ds,ax; через регистр ax

Пример объявления стекового сегмента:

sSTACK SEGMENT stack

db 100 dup(?)

sSTACK ENDS

Вызов процедуры (переход с возвратом):

CALL <имя процедуры>

Возврат из процедуры (return):

RET

Для организации процедур в языке ассемблера предназначены директивы PROC и ENDP. Директива PROC отмечает точку входа процедуры, а директива ENDP - окончание процедуры. Формат этих директив имеет следующий вид:

<имя> PROC <тип>

тело процедуры

<имя> ENDP

Справа от ключевого слова PROC указывает­ся тип процедуры NEAR или FAR (по умолчанию прини­мается тип NEAR).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: