ld


データのロードを行います。(Load)

[指定形式]

-

ld.b disp[reg1], reg2

-

ld.h disp[reg1], reg2

-

ld.w disp[reg1], reg2

-

ld.bu disp[reg1], reg2

-

ld.hu disp[reg1], reg2

ld.dwについてはld23を参照してください。

 

dispに指定可能なものを以下に示します。

-

32ビット幅までの値を持つ絶対値式

-

相対値式

-

上記のものにLOWWを適用したもの

[機能]

ld.b,ld.h,ld.w,ld.bu,ld.hu命令は,第1オペランドに指定したアドレスから1バイト分,1ハーフワード分,および1ワード分のデータを取り込み,第2オペランドに指定したレジスタにロードします。

[詳細説明]

-

dispに次のものを指定した場合,アセンブラでは,機械語命令のld命令が1つ生成されます。なお,例中の“ld”はld.b,ld.h,ld.w,ld.bu,ld.huのいずれかになります。

(a)

-32768〜+32767の範囲の絶対値式

ld      disp16[reg1], reg2
ld      disp16[reg1], reg2

(b)

sdata/sbss属性セクションに定義を持つラベルの$labelを持つ相対値式

ld      $label[reg1], reg2
ld      $label[reg1], reg2

(c)

!label,または%labelを持つ相対値式

ld      !label[reg1], reg2
ld      !label[reg1], reg2
ld      %label[reg1], reg2
ld      %label[reg1], reg2

(d)

LOWWを適用したもの

ld      disp16[reg1], reg2
ld      disp16[reg1], reg2

機械語命令のld命令は,ディスプレースメントに-32768〜+32767(0xFFFF8000〜0x7FFF)の範囲のイミーディエトをとります。

 

-

dispに次のものを指定した場合,アセンブラでは,命令展開が行われ,複数個の機械語命令が生成されます。

(a)

-32768〜+32767の範囲の範囲を越え-4194304〜4194303の範囲の絶対値式

ld      disp23[reg1], reg2
ld      disp23[reg1], reg2

(b)

-4194304〜+4194303の範囲を越える絶対値式

ld      disp[reg1], reg2
movhi   HIGHW1(disp), reg1, r1
ld      LOWW(disp)[r1], reg2

(c)

#label,またはlabelを持つ相対値式,およびsdata/sbss属性セクションに定義を持つラベルの$labelを持つ相対値式

ld      #label[reg1], reg2
movhi   HIGHW1(#label), reg1, r1
ld      LOWW(#label)[r1], reg2
ld      label[reg1], reg2
movhi   HIGHW1(label), reg1, r1
ld      LOWW(label)[r1], reg2
ld      $label[reg1], reg2
movhi   HIGHW1($label), reg1, r1
ld      LOWW($label)[r1], reg2

 

-

dispを省略した場合,アセンブラでは,0を指定したものとみなされます。

-

dispに絶対値式,!labelを持つ相対値式,#labelを持つ相対値式,または#labelを持つ相対値式にLOWWを適用したものを指定した場合,その後ろの[reg1]の部分が省略できます。ただし,省略した場合,アセンブラでは,[r0]が指定されたものとみなされます。

-

dispに$labelを持つ相対値式,または$labelを持つ相対値式にLOWWを適用したものを指定した場合,その後ろの[reg1]の部分が省略できます。ただし,省略した場合アセンブラでは,[gp]が指定されたものとみなされます。

-

dispに%labelを持つ相対値式を指定した場合,その後ろの[reg1]の部分を省略できます。だだし、省略した場合アセンブラでは,[ep]が指定されたものとみなされます。

-

23ビット幅のdispをもつld命令を指定したい場合は,ld23命令を指定してください。

[フラグ]

CY

OV

S

Z

SAT

[注意事項]

-

ld.b,およびld.hは,1バイト分,および1ハーフワード分のデータを符号拡張し,1ワード分のデータとしてレジスタにロードされます。

-

ld.h,ld.w,ld.huのdispに2の倍数でない値を指定した場合,アセンブラでは,dispに対して,2でアライメントしたコードが生成され,次のメッセージが出力されます。

W0550019:オペランドに指定した値は2の倍数である必要があります。

 

-

ld.bu,およびld.hu命令に対し,第2オペランドにr0を指定した場合,次のメッセージが出力され,アセンブルが中止されます。

E0550240 : RH850コア指定時には、デスティネーション・オペランドにr0を指定することはできません。