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

 

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

Каждый логический (программный) сегмент должен начинаться с директивы 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).

 








Дата добавления: 2015-10-09; просмотров: 453;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.