На главную Назад
Добро пожаловать, уважаемый посетитель!

Решить проблемуадресации сегментов поможет ассемблер.В одной из

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

составляющие еесегменты. Кроме тогоспециальные команды сообщают

ассемблеру,какие сегментыс какимрегистром связаны.Благодаря

этому ассемблер может, когда требуется, определить какой сегментный

префикс нуженв коде команды.Если программист задаетссылку, не

связаннуюс регистромDS,нодоступную черездругой сегментный

регистр,тоассемблерсамсформируетправильныйпрефикс.Это

позволяет программисту работать непосредственно с данными и текстом

программы, оставив ассемблеру работу по осуществлению адресации.

Объявление сегментов позволяет ассемблеру следить за тем, какие

сегменты доступны через сегментныерегистры и определять возможные

ошибки. Например,в программе могутпоявиться переменные, которые

недоступны из-за того, что насегмент этой переменной не указывает

ни одиниз сегментных регистров.Ассемблер квалифицирует этокак

Microsoft (R) Macro Assembler Version 5.001/1/80 03:53:05

Фиг. 3.9СегментыPage 1-1

 

PAGE,132

TITLEФиг. 3.9Сегменты

 

0000DATASEGMENT

000001VAR1DB1; Переменная в сегменте DATA

0001DATAENDS

 

0000BUFFERSEGMENT

000002VAR2DB2; Переменная в сегменте BUFFER

0001BUFFERENDS

 

0000CODESEGMENT

000003VAR3DB3; Переменная в сегменте CODE

 

ASSUMECS:CODE, DS:DATA, ES:BUFFER

 

0001FE 06 0000 R INCVAR1; Переменная из сегмента DATA

000526: FE 06 0000 RINCVAR2; Переменная из сегмента BUFFER

000A2E: FE 06 0000 RINCVAR3; Переменная из сегмента CODE

 

000FCODEENDS

END

 

Фиг. 3.9 Сегменты

ошибку.Она возникаетиз-за того,что впрограмме не обеспечена

адресуемость.Этоограничение,нолучшеобнаружитьошибку при

ассемблировании, чем во время работы программы.

Оператор SEGMENT определяет всесегменты, давая каждому из них

имя.Программа наФиг. 3.9демонстрирует определениенескольких

сегментов.В качествеимени сегментаможет использоватьсялюбое

допустимое имя переменной. Утверждение SEGMENT сообщает ассемблеру,

чтовсе следующиекоманды и данные во времявыполнения программы

будутнаходиться вэтом сегменте.Оператор ENDSуказывает конец

текущего сегмента. В этомутверждении тоже указывается имя сегмен-

та. Каждому утверждениюSEGMENT должно соответствовать утверждение

ENDS. В противном случае ассемблер запутается и выдаст сообщение об

ошибке.


 

Mail.ru