データのストアを行います。(Store)
[指定形式]
st.b reg2, disp[reg1]
st.h reg2, disp[reg1]
st.w reg2, disp[reg1]
注 | st.dwについてはst23を参照してください。 |
dispに指定できるものを,次に示します。
[機能]
st.b,st.h,st.w命令は,第1オペランドに指定したレジスタの下位1バイト分,下位1ハーフワード分,および1ワード分のデータを取り込み,第2オペランドに指定したアドレスにストアします。
[詳細説明]
- | dispに次のものを指定した場合,アセンブラでは,機械語命令のst命令注が1つ生成されます。なお,例中の“st”はst.b,st.h,st.wのいずれかになります。 |
st reg2, disp16[reg1]
|
st disp16[reg1], reg2
|
(b) | sdata/sbss属性セクションに定義を持つラベルの$labelを持つ相対値式 |
st reg2, $label[reg1]
|
st $label[reg1], reg2
|
(c) | !label,または%labelを持つ絶対値式 |
st reg2, !label[reg1]
|
st !label[reg1], reg2
|
st reg2, %label[reg1]
|
st %label[reg1], reg2
|
st reg2, disp16[reg1]
|
st disp16[reg1], reg2
|
注 | 機械語命令のst命令は,ディスプレースメントに-32768〜+32767(0xFFFF8000〜0x7FFF)の範囲のイミーディエトをとります。 |
- | dispに次のものを指定した場合,アセンブラでは,命令展開が行われ,複数個の機械語命令が生成されます。 |
(a) | -32768〜+32767の範囲を越え-4194304〜+4194303の範囲の絶対値式 |
st reg2, disp23[reg1]
|
st reg2, disp23[reg1
|
(b) | -4194304〜+4194303の範囲を越える絶対値式 |
st reg2, disp[reg1]
|
movhi HIGHW1(disp), reg1, r1
st LOWW(disp)[r1], reg2
|
(c) | #label,またはlabelを持つ相対値式,およびsdata/sbss属性セクションに定義を持たないラベルの$labelを持つ相対値式 |
st reg2, #label[reg1]
|
movhi HIGHW1(#label), reg1, r1
st LOWW(#label)[r1], reg2
|
st reg2, label[reg1]
|
movhi HIGHW1(label), reg1, r1
st LOWW(label)[r1], reg2
|
st reg2, $label[reg1]
|
movhi HIGHW1($label), reg1, r1
st 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をもつst命令を指定したい場合は,st23命令を指定してください。 |
[フラグ]
[注意事項]
- | st.h,およびst.wのdispに2の倍数でない値を指定した場合,アセンブラでは,dispに対して2でアライメントしたコードが生成され,次のメッセージが出力されます。 |
W0550019:オペランドに指定した値は2の倍数である必要があります。
|