В 2 Сегмент с описанием подпрограмм NxtWin SetWin PrevWin
Пример В.2. Сегмент с описанием подпрограмм NxtWin, SetWin, PrevWin
subr SEGMENT word public 'subr1 ; начало сегмента
ASSUME cs:subr, ds:@data ; установка соответствия ; .386 ; тип микропроцессора
; Далее располагается текст примера В.1, содержащий
; описание подпрограмм NxtWin, SetWin и PrevWin subr ENDS ; конец сегмента
Первая директива примера В.2 открывает описание сегмента. В данном случае его параметры можно было не указывать, они приведены просто для иллюстрации. Параметр word обозначает, что сегмент располагается в памяти, начиная с четного адреса. Параметр public является признаком общедоступного сегмента. Заключенное в кавычки название сегмента передается компоновщику и становится общедоступным.
Замечание
Замечание
Обратите внимание на то, что между параметрами директивы SEGMENT отсутствуют запятые!
Директива ASSUME нужна для того, чтобы Макроассемблер мог определить, что будет находиться в сегментных регистрах cs и ds при выполнении подпрограмм. Без этого невозможна компиляция команд. С регистром cs всегда связывается имя сегмента, в котором расположена директива ASSUME. С регистром ds связывается имя сегмента данных, который описан вне данного модуля. Имя, с которым ассоциируется ds, зависит от способа описания сегмента данных в основном тексте программы. В примере В.2 предполагается, что сегмент данных был описан с помощью специальной директивы .data (см. раздел в приложении Б).
Если вы забудете указать директиву ASSUME, то при компиляции Макроассемблер может выдавать аварийные сообщения, смысл которых заключается в том, что не определен один из сегментных регистров. Чтобы лучше понять назначение директивы, уберите ее из текста и посмотрите, что из этого получится. В частности, результат зависит от версии MASM.
В примере В.2 строка, содержащая третью директиву, начинается с символа "точка с запятой". Подпрограммы Nxtwin, setwin и Prevwin составлены с использованием набора команд микропроцессора Intel 8086, поэтому в данном случае директива .386 не нужна. Однако большинство описанных в книге примеров рассчитано на возможности микропроцессора Intel 80386, и для их компиляции данная директива необходима.