next up previous
: [SPIM] if-else 文 : マイクロプロセッサ演習 : マイクロプロセッサ演習


[SPIM] if 文

C 言語における if 文は図 1 のように実現される。
図 1: C 言語における if 文
\begin{figure}{\tt
\hspace*{1cm}if(条件)\{\\
\hspace*{1cm}\hspace*{1cm} 命令;\\
\hspace*{1cm}\}
}\end{figure}
``条件" が成立する時だけ、if(条件){ } の中の命令が実行される。 これは MIPS のアセンブリ言語では図 2 のように実現される。

図 2: MIPS のアセンブリ言語における if 文
\begin{figure}\begin{center}\epsfxsize =8cm \epsfbox{if.eps}\end{center}\end{figure}

前回の while 文もそうであったが、MIPS のアセンブリ言語には if 文に直接 対応するものがあるわけではなく、条件命令や分岐命令 (beqbnesltj など) とラベルを 組み合わせることで if 文を実現している。 なお、図中の ``ENDIF" は単なるラベルであり、好きな名前をつけて構わない。

本章で実際に if 文を書いてもらう。 いつもどおり、data05.zip をダウンロードしよう。 この中に、今日の演習で使うプログラムの雛形が入っている。 If.asm がこの問題で作成してもらうプログラムの雛型である。

メモリ上に array[0]、array[1] が確保されており、ともに 2 が代入されている。 また、msg というラベルで ``equal." という文字列が格納されている。

このファイルに追加する形で、 「array[0] $=$ array[1] ならば msg をコンソールに出力。array[0] $\ne$ array[1] なら何もしない。」 というプログラムを作成せよ。 なお、msg を画面に出力するには、

\begin{figure}\hspace*{1cm}
\begin{tabular}{ll}
li & \$v0, 4 \\
la & \$a0, msg\\
syscall &
\end{tabular}\end{figure}

を記述すること。

また、array[0] と array[1] の値をいろいろ変えて保存&実行し、 分岐が正しく行なわれることを確認せよ。


平成16年11月8日