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

Получение сегмента и смещения адресного выражения


Для получения сегмента и смещения адресного выражения вы мо- жете использовать операции SEG и OFFSET. Операция SEG возвращает сегментную часть адресного выражения. Она имеет следующий син- таксис:

SEG выражение

Приведем пример исходного кода:

DATASEG temp DW 0 CODESEG mov ax,SEG temp mov ds,ax ASSUME ds:SEG temp

Операция OFFSET возвращает смещение адресного выражения и имеет следующий синтаксис:

OFFSET выражение

Заметим, что когда вы используете операцию смещения, убеди- тесь, что выражение ссылается на корректный сегмент. Например, если вы используете режим MASM и не используете упрощенные дирек- тивы, выражение:

OFFSET BUFFER ; буфер - это адрес в памяти

что не тоже самое, что:

OFFSET DGROUP:BUFFER ; Dgroup - это группа, содержащая ; сегмент, который содержит BUFFER

(если содержащий BUFFER сегмент не является первым сегментом группы).

Если вы не переопределяете сегмент с помощью операции :, в режиме Ideal адреса автоматически вычисляются относительно любой группы, которой принадлежит сегмент. В режиме MASM это имеет мес- то при использовании упрощенных сегментных директив. В противном случае адреса вычисляются относительно сегмента, в котором нахо- дится объект, а не какой-либо группы.



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