[ このメッセージへの返事 ]
[ 返事を書く ]
[ 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) さんの
おっしゃっている使い方が一般的だと思います。
|