【MIPSマシン】SPIM 【エミュレータ】

このエントリーをはてなブックマークに追加
1
みなさまおはようございます。
MIPSマシンエミュレータのSPIMについて語りましょう。

関連サイト
公式サイト。Larusは現在MSにいるようです。
http://www.cs.wisc.edu/~larus/spim.html
SPIMマニュアルの日本語訳
http://kakugawa.aial.hiroshima-u.ac.jp/Lect2002/prog/spim/spim.html

ソース
http://www.cs.wisc.edu/~larus/SPIM/spim.tar.gz
Windows 実行形式
http://www.cs.wisc.edu/~larus/SPIM/pcspim.zip

参考図書
「コンピュータの構成と設計」いわゆるパターソン&へネシー。
http://www.amazon.co.jp/exec/obidos/ASIN/482228056X/249-4660146-5829925
2デフォルトの名無しさん:02/08/05 14:44
ナニ━━━(゚∀゚)━━━!!?
これなに?
3:02/08/05 14:54
世の中に数あるCPUのうちのひとつ、MIPSのエミュレータです。
学生さんの中にはこれでアセンブラの勉強をした方も多いのでは
ないでしょうか。

4デフォルトの名無しさん:02/08/05 15:22
イーゴス
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無事に  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /    モナーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ^∀^) /                /(^∀^ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)
7:02/08/07 14:11
みなさまおはようございます。再開します。

この板にはSPIMでアセンブラの勉強をしたかたはいらっしゃらない
のでしょうか。比較的ポピュラーなアプリだと思っていましたが、そ
うでもないようですね。

CやC++を扱ううえで、アセンブラはさけて通ることのできない領域
です。MIPS CPUはx86などと違い単純な命令セットをそなえたCPUで
すので、理解がはやいと思います。現在プログラマ初級者の方や、
「なぜコンピュータは計算できるのか?」といった根本的な疑問を
もっている方には是非SPIMで遊んでみると面白いとおもいます。

関連スレ
アセンブラヽ(`Д´)ノモルァ
http://pc3.2ch.net/test/read.cgi/tech/1016991911/
8デフォルトの名無しさん:02/08/07 14:12
>>7
> CやC++を扱ううえで、アセンブラはさけて通ることのできない領域

本気でいってんのか?馬鹿じゃねーの?
3Dゲームとか組み込み系とかじゃないの?
脳内最適化するのは。
C コンパイラにMIPSのアセンブラソースを出力させたとき、
自分が速いと思っていた書き方が逆に足かせになっていたので、
これからは読み易さ重視で書こうと思った。

しばらくして、今度はIA-32を出力させた。
これjからはアセンブラソースがどう出力されるかは
考えないようにしようと思った。
11:02/08/07 16:44
>>8
私も、最適化はもう完全にコンパイラの仕事だと思っています。
ただ、CやC++のポインタの理解にはアセンブラ、というかレジ
スタとメモリ構造の理解が必要不可欠だと思います。

もちろん何も考えなくてもコンパイルすると実行形式になるので
すがね。一応お勉強のためのソフトですから。

# もっとも完全にSPIMをマスターしても、次はシステムコール、
# つまりOSのお勉強がまっているのですが。
12デフォルトの名無しさん:02/08/07 18:16
以前、知り合いから、MIPSは割り込み許可/禁止の命令がないから
どうしてもクリティカルなタイミングが存在してしまうと聞いた。
そんなんで大丈夫なのかとは思ったが、
取りあえず問題なく動作していたようだった。

この辺、実際にはどうなんでしょう?
許可/禁止の処理はこんなんだったはず。

mfc
nop
ビット操作
mtc
以前パタヘネ+ SPIM で勉強していた時のこと。

パタヘネの本に、
「MIPS の PC 相対アドレシングではアドレスを PC+4 からの相対位置で表す」
と書いてあったと思うのだけど、
SPIM のレジスタウィンドウを見ると、どうも SPIM では PC+4 ではなく PC
からの相対位置でアドレシングを行っているような気がしました。

その時は「まー細かいことだし別にいいか」と思って深く考えなかったのだけど、実際のところどうなんですか?単なる俺の勘違い?
14:02/08/08 04:21
>>12
MIPSのコプロセッサに割り込み許可ビットはあるよ。MIPS用のリアル
タイムOSがあるぐらいだからそのへんは大丈夫では?(と思う)

>>13
手元のパタヘネ第2版を見ると、「分岐先は分岐命令の近くにある公
算が大きいからMIPSでは(PC+4)を基準にする」と書いてある。でもエ
ミュレータであるSPIMは分かりやすさのためにそうしないだけなんじ
ゃない?

# ム板にある以上、あんまり本当のMIPS(VRシリーズとか)のスレには
# したくないです……。
1512:02/08/08 14:48
>>14
コプロセッサにある割り込み許可ビットを1命令で操作できないってこと。
読んで、ビット操作して、書き込むというように3命令以上必要なので、
読んだ直後に例外が発生する可能性がでてくる。
例外内でコプロセッサの他のビットを操作した場合、
例外から戻ってきたときに、上書きしてしまい、例外内での操作が反映されなくなる。

単純に考えるとこうなるんだけど、ある決まり事があって、
それに従えばこういう問題を回避できたりするのかなとか考えてた。

組み込み屋なんで、VRシリーズとかいわれても、わからなったりします。
(ワークステーションに使われてたんでしたっけ。)
組み込み関係の話は不可ですか?
(とはいえあまりネタもないんですが)
>>15
割り込みが発生した直後に、

- カーネルモード
- 割り込み禁止

に設定されるから、割り込みが処理されずにネストする可能性は無いと
思うけど。
1712:02/08/08 15:04
>>15
よくよく考えたらというか、いきなり思いついたというか
例外が発生したときにコプロセッサの内容の一部も保存するから問題ないんだね。

お騒がせしました。
18:02/08/13 09:56
うう、パタ&ヘネを読む、みたいなのをこのスレでやろうと
思ってたのに忙しくてカキコできない・・・
19:02/09/14 20:28
カラさげ
20 :02/09/28 23:51
 
>>1
どこ大学の何学科の学生?
昔早稲田の情報科で同じことをやった。
22デフォルトの名無しさん:02/10/12 13:34
いわゆるからあげ
からあげすんな。
Mic1も面白そうだよ
http://www.ontko.com/mic1/

参考図書「構造化コンピュータ構成」
http://www.amazon.co.jp/exec/obidos/ASIN/4894712245/250-6579255-2641056

SPIMと違ってあんま役立たないけど
>>21
情報系の学部学科で、いくつかSPIM使っているところを知ってるよ。
そうですね
HSP !!
B N F !
C 以外は糞!!
31デフォルトの名無しさん:02/11/26 20:25
誘導に乗ってやってまいりました
ハイレジスタとローレジスタってどうちがうのですか?

ネットで調べてもサイトがあまりひっかかってこなくて困っています


32西門 ◆J1DLkSnXwI :02/11/26 21:02
32bit * 32bitの乗算命令を実行すると、結果の64bitのうち
上位32bitがはいるのはHi, 下位32bitが入るのがlo

また、割算命令を実行すると、商がloに、剰余がhiに入る。
33デフォルトの名無しさん:02/11/26 21:24
31>32
そういえばハイレジスタ、ローレジスタというとそういう風にみるのでしたね・・

私の開発環境ではサムでプログラムを組むのですが
ハイレジスタにmovでデータを転送しようとすると
コンパイラに怒られます
でもローレジスタの場合は怒られないのです
この違いはどういう理由によるものなのでしょうか?
ただの仕様、と片付けてしまっていいんでしょうか?
34西門 ◆J1DLkSnXwI :02/11/26 21:28
汎用レジスタとは違うので、汎用レジスタのオペランドと
同じようには使えない。

hi, loレジスタとのやりとりは
mthi, mtlo, mfhi, mflo命令を使う。
35デフォルトの名無しさん:02/11/26 21:58
ごめんなさい、
ハイレジスタは汎用レジスタではない、ということなんでしょうか?
確かに、かなり使用が制限されているイメージがあります
36西門 ◆J1DLkSnXwI :02/11/26 22:01
>>35
汎用レジスタは$0〜$31の32本だけ。
37デフォルトの名無しさん:02/11/27 19:38
http://www.mit.edu/afs/sipb/contrib/doc/specs/ic/cpu/arm/thumbquickref.pdf
の命令表に
Rd Rs Hd Hs というような英文字がありまして前二つは
ディスティネーションレジスタ、ソースレジスタ、だと思ったのですが
HdとHsのHの意味がわかりません・・

しかも表をみると
RがlowレジスタでHがhighレジスタ、という風にもよめます。
なんでRがlowなんでしょうか・・

教えてください・・
38西門 ◆J1DLkSnXwI :02/11/27 19:41
>>37禿しくスレ違い。
君が見てるのはMIPSとは無関係なCPUの命令表。
>>37
なんでこれ俺も持っているんだろう(´Д`)
>>36
なんで$0は用途が決まっているのに"汎用レジスタ"っていうんだろう。
CPUスペックで汎用レジスタ32本っていうと、なんかサバ読んでるかんじ。
>>40
>なんで$0は用途が決まっているのに"汎用レジスタ"っていうんだろう。
他の汎用レジスタと同じようにオペランドに指定できるから。

>CPUスペックで汎用レジスタ32本っていうと、なんかサバ読んでるかんじ
まあね。でもおかげで色々べんりだからいいじゃないか。
$0がアレじゃなかったら、命令や命令フォーマットを増やす必要があっただろう。
VAXみたいに、レジスタが16本しかないくせに、PCもFPもSPも汎用レジスタなんて
やつよりましだろう。
みなさん、エンディアンはビッグとリトルどっちが好きですか。
リトルに決まってるだろう。合理的だからな。
ビッグだろ。数字は普通右から埋まるもんだ。
漏れもビッグ派だった。
でも、バイト単位で処理する時は、リトルの方がオフセット計算が楽、
ビッグのほうが「分りやすいからスキ」とか思ってる奴はド素人。
256^nの桁がnバイト目に来るのが合理的。
こうしておけば、同時に
(65536^n)の桁が2バイト整数nワード目
(2^32^n)の桁が4バイト整数nワード目

でもある。
47デフォルトの名無しさん:02/11/29 23:52
今ならビッグだろう。
ネットワークが絡むことが多くなってるしな。
>>47
Haa??
>>47
最近出たネットワークプロセッサも全部Littleなんすけど…
>>49
CPUの話じゃなくて、ネットワークエンディアンのことだろ?
>>50
ここはプロセッサ(のシミュレータ)のスレなんすけど…
5247:02/11/30 19:15
(50は漏れじゃないけど)

>>47, 51
プログラムで扱うデータがネットワークバイトオーダのものも多くなってるので
CPUもそれに合わせてくれると(プログラムが)容易になる と言いたいのだよもん。

>42の質問が
このスレタイのMIPSシミュレータに限る ということならどっちでもいい。
>>52
だから、別に容易にならないって。
それが分ってるから>>49なのよ。
5452
>>53
(´・ω・`)そなんだぁ