構文 OFFSET <アドレス式> OFFSET {<セグメント名>|<SEG 式>}
ラベルにこの演算子を付加することにより、ラベルのオフセットをイミディエイトオペランドとして参照できます。
例 MOV AX, STR ; 間接参照 MOV AX, [STR] ; 間接参照 MOV AX, OFFSET STR ; 即値(イミディエイト)
OFFSET 演算子の機能は、パラメータにアドレス式を指定するか、セグメント(セグメント名または演算子 SEG による式)を指定するかで違います。
アドレス式を指定した場合、OFFSET 演算子は、そのアドレスのセグメント先頭からのオフセットを返します。セグメントオーバーライド演算子によってアドレス式にフレームを指定しておけば、オフセットはそのフレームから計算されます。そうでなければ、オフセットはそのアドレスの所属するセグメントの先頭から計算されます。
セグメントを指定した場合、OFFSET 演算子は、このファイル内でそのセグメントに対してこれまで生成されたコードとデータの総バイト数を返します。
メモ 簡略化セグメントディレクティブを使用して定義したセグメントについては、そのセグメントがグループに所属しているならば、オフセットの計算はそのグループから行います(セグメントの先頭からではありません)。ただしフレームが明示的に指定されている場合は、オフセットの計算は指定のフレームを基準とします。
適用可能な式
OFFSET 演算子は、アドレス式、セグメント名、演算子 SEG による式に適用できます。
例 MOV AX, OFFSET STR MOV AX, OFFSET (STR+10h) ; = (OFFSET STR) + 10h MOV AX, OFFSET DGROUP:STR ; フレームを指定しています MOV AX, OFFSET CSEG MOV AX, OFFSET (SEG STR)