Для получения сегмента и смещения адресного выражения вы мо- жете использовать операции 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 это имеет мес- то при использовании упрощенных сегментных директив. В противном случае адреса вычисляются относительно сегмента, в котором нахо- дится объект, а не какой-либо группы.