 
 
 
 
 
   
 ,
,  ,
,  ,
,  の値に応じて、
それぞれ命令0、命令1、命令2、
 の値に応じて、
それぞれ命令0、命令1、命令2、 が実行さる。
 が実行さる。
これを MIPS のアセンブリ言語で実現するには 図 6 のようにする。
基本的には while 文、if 文、if-else 文と同様に、条件判定と分岐命令を 組み合わせることで実現するが、switch 文の場合 「ジャンプ・アドレス表」という概念が必要になるので 図 7 を用いてそれを解説する。図 7 は switch 文を使ったプログラムを 実行したときのメモリ上のデータの状態の一例である。 メモリには「テキスト領域」と「データ領域」が あり、テキスト領域には、実際のプログラムの命令列が、 データ領域には、プログラムで用いられるデータがそれぞれ 格納される。 前回までのメモリの模式図には、データ領域のみが書かれていたことに 注意しよう。
さて、例えばプログラムを CASE0 に分岐させたい時はどうすればよいだろうか。
テキスト領域を見ると、CASE0 はメモリアドレス  0x00400088 に対応している。
だから、もしレジスタ $t0 に 0x00400088 が代入されていれば、
 jr $t0
という命令で CASE0 に分岐することができる。
同様に CASE1、 CASE2、 CASE3 はそれぞれ 0x0040009c、0x004000b9、0x004000c4 のアドレスに対応している。 これらのアドレスを表のように並べたものを、 ジャンプ・アドレス表という。 図中では case[0]、case[1]、case[2]、case[3] に 各ラベルのアドレスが書かれており、これがジャンプ・アドレス表である。 この表から、ジャンプすべきアドレスをレジスタに読み出して jr 命令 を実行すれば、switch 文が実現されることになる。
本章では、実際に switch 文を自分で記述してもらう。 プログラムの雛型は Switch.asm である。
メモリ上に  という変数が確保されており、
まず、その値が
 という変数が確保されており、
まず、その値が  または
 または  ならば、EXIT に分岐させ、
その後、
 ならば、EXIT に分岐させ、
その後、 であればそれぞれ CASE0、CASE1、CASE2、CASE3 
に分岐させる。
 であればそれぞれ CASE0、CASE1、CASE2、CASE3 
に分岐させる。
分岐させた後は画面に文字列を表示させるのだが、 この部分はすでに書かれている。 また、ジャンプアドレス表も既に作成されているので、 分岐構造の部分のみを記述すること。
記述ができたら、 の値をいろいろ変え、正しく分岐が行なわれている
ことを確かめて欲しい。
 の値をいろいろ変え、正しく分岐が行なわれている
ことを確かめて欲しい。
なお、この問題は授業のプリントや
教科書に基づいているので、そちらがヒントになるかもしれない。