ld, st


-

デバイスのld,st命令には次のものがあり,それぞれdisp16,disp23のオペランドを持ちます。

-

(1) LD.B, LD.BU, LD.H, LD.HU, LD.W

-

(2) ST.B, ST.H, ST.W

 

asrhでは,これらの命令に対してdisp23を明示的に指定したい場合,次のニモニックを指定する必要があります。

-

(1) ld23.b, ld23.bu, ld23.h, ld23.hu, ld23.w

-

(2) st23.b, st23.h, st23.w

 

-

また,デバイスのld,st命令には次のものがあります。

-

(3) LD.DW

-

(4) ST.DW

 

これらの命令に対しては,asrhでは,次のどちらの形式も指定できます。意味は同じです。

-

(3) ld.dw, ld23.dw

-

(4) st.dw, st23.dw

 

-

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

(a)

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

ld.w    disp[reg1], reg2
ld.w    disp23[reg1], reg2

(b)

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

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

(c)

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

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

 

-

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

-

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

-

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

-

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