トップページ⇒tech
54コメント18KB

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

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
みなさまおはようございます。
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
0002デフォルトの名無しさんNGNG
ナニ━━━(゚∀゚)━━━!!?
これなに?
00031NGNG
世の中に数あるCPUのうちのひとつ、MIPSのエミュレータです。
学生さんの中にはこれでアセンブラの勉強をした方も多いのでは
ないでしょうか。

0004デフォルトの名無しさんNGNG
コンピュータの構成と設計 上下

http://www.amazon.co.jp/exec/obidos/ASIN/482228056X/
http://www.amazon.co.jp/exec/obidos/ASIN/4822280578/
0005デフォルトの名無しさんNGNG
イーゴス
0006デフォルトの名無しさんNGNG
            /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
           /   このスレは無事に  /
           /  終了いたしました    /
          / ありがとうございました  /
          /                /
         /    モナーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ^∀^) /                /(^∀^ )
 (    )つ               ⊂(    )
 | | |                   | | |
 (__)_)                  (_(__)
00071NGNG
みなさまおはようございます。再開します。

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

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

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

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

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

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

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

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

mfc
nop
ビット操作
mtc
0013デフォルトの名無しさんNGNG
以前パタヘネ+ SPIM で勉強していた時のこと。

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

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

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

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

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

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

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

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

お騒がせしました。
00181NGNG
うう、パタ&ヘネを読む、みたいなのをこのスレでやろうと
思ってたのに忙しくてカキコできない・・・
00191NGNG
カラさげ
0020 NGNG
 
0021デフォルトの名無しさんNGNG
>>1
どこ大学の何学科の学生?
昔早稲田の情報科で同じことをやった。
0022デフォルトの名無しさんNGNG
いわゆるからあげ
0023デフォルトの名無しさんNGNG
からあげすんな。
0024Java厨あるいはマイクロプログラム万世NGNG
Mic1も面白そうだよ
http://www.ontko.com/mic1/

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

SPIMと違ってあんま役立たないけど
0025デフォルトの名無しさんNGNG
>>21
情報系の学部学科で、いくつかSPIM使っているところを知ってるよ。
0026デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=spim+site:ac.jp&hl=ja
0027デフォルトの名無しさんNGNG
そうですね
0028デフォルトの名無しさんNGNG
HSP !!
0029デフォルトの名無しさんNGNG
B N F !
0030デフォルトの名無しさんNGNG
C 以外は糞!!
0031デフォルトの名無しさんNGNG
誘導に乗ってやってまいりました
ハイレジスタとローレジスタってどうちがうのですか?

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


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

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

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

hi, loレジスタとのやりとりは
mthi, mtlo, mfhi, mflo命令を使う。
0035デフォルトの名無しさんNGNG
ごめんなさい、
ハイレジスタは汎用レジスタではない、ということなんでしょうか?
確かに、かなり使用が制限されているイメージがあります
0036西門 ◆J1DLkSnXwI NGNG
>>35
汎用レジスタは$0〜$31の32本だけ。
0037デフォルトの名無しさんNGNG
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なんでしょうか・・

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

>CPUスペックで汎用レジスタ32本っていうと、なんかサバ読んでるかんじ
まあね。でもおかげで色々べんりだからいいじゃないか。
$0がアレじゃなかったら、命令や命令フォーマットを増やす必要があっただろう。
VAXみたいに、レジスタが16本しかないくせに、PCもFPもSPも汎用レジスタなんて
やつよりましだろう。
0042デフォルトの名無しさんNGNG
みなさん、エンディアンはビッグとリトルどっちが好きですか。
0043デフォルトの名無しさんNGNG
リトルに決まってるだろう。合理的だからな。
0044デフォルトの名無しさんNGNG
ビッグだろ。数字は普通右から埋まるもんだ。
0045デフォルトの名無しさんNGNG
漏れもビッグ派だった。
でも、バイト単位で処理する時は、リトルの方がオフセット計算が楽、
0046デフォルトの名無しさんNGNG
ビッグのほうが「分りやすいからスキ」とか思ってる奴はド素人。
256^nの桁がnバイト目に来るのが合理的。
こうしておけば、同時に
(65536^n)の桁が2バイト整数nワード目
(2^32^n)の桁が4バイト整数nワード目
…
でもある。
0047デフォルトの名無しさんNGNG
今ならビッグだろう。
ネットワークが絡むことが多くなってるしな。
0048デフォルトの名無しさんNGNG
>>47
Haa??
0049デフォルトの名無しさんNGNG
>>47
最近出たネットワークプロセッサも全部Littleなんすけど…
0050デフォルトの名無しさんNGNG
>>49
CPUの話じゃなくて、ネットワークエンディアンのことだろ?
0051デフォルトの名無しさんNGNG
>>50
ここはプロセッサ(のシミュレータ)のスレなんすけど…
005247NGNG
(50は漏れじゃないけど)

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

>42の質問が
このスレタイのMIPSシミュレータに限る ということならどっちでもいい。
0053デフォルトの名無しさんNGNG
>>52
だから、別に容易にならないって。
それが分ってるから>>49なのよ。
005452NGNG
>>53
(´・ω・`)そなんだぁ
■ このスレッドは過去ログ倉庫に格納されています