push, pushm, pop, popm


-

push,pushm,pop,popm命令は,デバイスには存在しない疑似命令です。

スタック領域へのレジスタのプッシュ,ポップを行います。

 

-

asrhでは,次の形式で指定します。

-

push reg1

-

pushm reg1, reg2, ..., regN

-

pop reg1

-

popm reg1, reg2, ..., regN

 

-

それぞれ次のように命令展開が行われ,複数個の機械語命令が生成されます。

指定形式

アセンブル結果

push    reg1
add     -4, sp
st.w    reg1, 0[sp]
pushm   reg1, reg2, …, regN
addi    -4 * N, sp, sp
st.w    regN, 4 * (N - 1)[sp]
  :
st.w    reg2, 4 * 1[sp]
st.w    reg1, 4 * 0[sp]
pop     reg1
ld.w    0[sp], reg1
add     4, sp
popm    reg1, reg2, …, regN
ld.w    4 * 0[sp], reg1
ld.w    4 * 1[sp], reg2
  :
ld.w    4 * (N - 1)[sp], regN
addi    4 * N, sp, sp

注意

add/addi命令を使用するため,PSWの内容が不定になります。
デバイスが提供しているpushsp,popsp命令の使用を推奨します。