Turbo Assembler 3.0. Руководство пользователя

Использование корректировок сегментов


Турбо Паскаль генерирует файлы .EXE, которые могут загру- жаться в память компьютера РС по любому доступному адресу. Пос- кольку в программе заранее неизвестно, куда будет загружен данный сегмент программы, компоновщик указывает загрузчику DOS.EXE, что нужно при загрузке скорректировать в программе все ссылки на сег- менты. После выполнения этих корректировок все ссылки на сегменты (такие, как CODE или DATA) будут содержать корректные значения.

Ваша программа на Турбо Ассемблере может использовать это средство для получения адресов объектов во время выполнения. Предположим, например, что в вашей программе требуется изменить значение регистра DS, но вы не хотите сохранять в цикле исходное содержимое стека или перемещать эти значения во временную об- ласть. Вместо этого вы можете использовать операцию Турбо Ассем- блера SEG:

. . . mov ax,SEG DATA ; получить фактический ; адрес глобального значения ; DS Турбо Паскаля mov ds,ax ; поместить его в DS для ; использования Турбо ; Паскалем . . .

Когда ваша программа будет загружаться, DOS поместит коррек- тное значение SEG DATA прямо в поле промежуточного операнда инст- рукции MOV. Это наиболее быстрый путь перезагрузки сегментного регистра.

Данный метод нужно также использовать, чтобы программы обс- луживания прерываний сохраняли информацию в глобальном сегменте данных Турбо Паскаля. Регистр DS не обязательно во время прерыва- ния содержит значение DS Турбо Паскаля, но для получения доступа к переменным и типизованным константам Турбо Паскаля можно ис- пользовать указанную выше последовательность.



Содержание раздела