SMRLW


シンボルのアドレスにミラー先までのオフセットを加算し,さらに整数値を加算した結果の32ビット値の下位16ビット値を求めます。

[機能]

項がリロケータブルなシンボルに整数値を加算する式である場合,項の値ではなくシンボルのみに着目して,シンボルがミラー元領域の範囲内にある場合は,シンボルのアドレスにミラー先までのオフセットを加算し,さらに整数値を加算した結果の32ビット値の下位16ビット値を返します。

リロケータブルなシンボルがミラー元領域の範囲外にある場合は,リンク時にエラーとなります。

項がアブソリュート項である場合はLOWWと同じ値を,項がリロケータブルなシンボル参照のみの場合はMIRLWと同じ値を返します。

 

項として,アセンブラでの演算後に以下の形式となるもののみを許し,それ以外の場合はエラーとなります(Aはアブソリュート・シンボル,Rはリロケータブル・シンボル,Cは整定数)。

MIRLW,MIRHWも同様です。

-

SMRLW(C) : LOWWと同等

-

SMRLW(A) : LOWWと同等

-

SMRLW(R) : Rをミラー元か否かの判断対象とする

-

SMRLW(R + C) : Rをミラー元か否かの判断対象とする

-

SMRLW(R − A + C) : Rをミラー元か否かの判断対象とする

[使用例]

MOVW    AX, #SMRLW(GSYM + 0x1000)       ; (1)

GSYMは外部参照名です。

(1)

リロケータブルなシンボルGSYMのアドレスがミラー元領域の範囲内にある場合,ミラー先アドレスに変換し,その結果に0x1000を加算した値の下位16ビット値をAXレジスタにロードします。