「assembler」の編集履歴(バックアップ)一覧はこちら
「assembler」(2007/03/13 (火) 16:59:18) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
li rd Imm -> llo rd Lo(Imm);
lhi rd Hi(Imm)
ll rd label -> llo rd Lo(Address);
lhi rd Hi(Address)
のように追加しました。
ラベルに対して、一様その位置は19ビット幅で保存しておきます。
jump命令などでは、それを直接使えるのです。
Loは下位の16ビットを、Hiは上位3ビットを取り出します。
オペコードテーブルを適当に変換しました。
一様全部通ったみたいです。
シミュレータは全体の構造ができて、命令一個ずつ実装しています。
小数点の命令群、今日発生したロード命令などがまだ残っています。
時間かけて申し訳ないですが、後一日で出来上がるように頑張ります。
-------------------------------------------------------------
アセンブラをアップします。
使い方:
Cygwin環境で
入力ファイル input.txtを用意する。
出力が output.txtファイルになる。
$ make
gcc -o asl main.c asl.c parser.c utils.c -Wall -g
$ ./asl
.....
$ hexedit output.txt
バイナリファイルを見るのに、特定のeditorがいる。
hexeditorを薦めする。
instructionsをバイナリで出し終わったら、0を32bitで出し、
次に浮動小数点テーブルを出す。
アセンブリにtab,、空白、コメントOK。
但し、コメント行のはじまる文字は "." としないといけない。
知らないラベルが来たら、その位置を仮に0にしてはき、実行を続ける。
lwsとswsが誕生したから、lwとswはスタックポインタ以外のレジスタだけ取り扱ってますので、
lwとswを元に戻しました。
アセンブラはリンクレジスタなどの初期値を明記しなければならないようですが、
位置とかまだはっきり分かってないので、まだ書き込んでいません(すぐできる)
一様アップしておきます。
今日はもう限界なんで、しかもだれも来ていないから、帰ります。
明日の午前中に来ます。