Re: 詳しくはないですが



[ このメッセージへの返事 ] [ 返事を書く ] [ home.html ]



投稿者: BOK @ kyt015.osk.threewebnet.or.jp on 97/9/21 03:25:35

In Reply to: アセンブラに詳しい方教えてください

posted by 68user @ oryo.inforyoma.or.jp on 97/9/20 19:44:29

たまたま手元に
R3000のクロスアセンブラが
あったので実験してみました。
(注 レジスタをr+数字で書いています)

このアセンブラでは、
オフセットが 7FFFh 以上なら
(符号付き16bitオフセットなので)
r1をつかってアドレス計算し、
(r1)を読んでくるようなコード(3命令)を
生成しました。

---------------------------------------------------------
lw r18,80101111h(r19) ;3C01801F 02610821 8C321111
が、
lui r1,8010h ;3C01801F
addu r1, r19, r1 ;02610821
lw r18,1111h(r1) ;8C321111
こんなかんじ。
(変換の仕方は定数によって
 いろいろあるようです。)
----------------------------------------------------------




マクロ命令を使用しないようにオプション指定を
したその場合はエラーが出ました。

私の持っている資料によれば、
lwは擬似命令ではないのですが、
このアセンブラは賢くできているようです。
(私は最適化し難いので、OFFにして使ってますが。)

結論としては、
1、Astart に 2^16 以上の値を入れることはできない。
2、lw は疑似命令である。
どちらになるかはアセンブラ次第ということでしょう。
(MIPSのアセンブラは1のような気がします。根拠無し。)


追記
 movem.l d0-d7/a0-a5,-(sp) さんの
 おっしゃっている使い方が一般的だと思います。