next up previous
: [SPIM] I 形式 : マイクロプロセッサ演習 : MIPS のアセンブリ言語の機械語への翻訳

[SPIM] R 形式 (レジスタ・アドレシング)

and, sub, slt 等の命令は、図 1 に示すような R 形式で表される。 この形式では 32 ビットを 6 つに分割し、 以下のように命令コードやオペランドに割り当てる。

図 1: R 形式
\begin{figure}\begin{center}\epsfxsize =7cm \epsfbox{r.eps}\end{center}\end{figure}

このように、命令の数字列をビット数の分割法で分類したものを 命令形式と呼ぶ。 すでに見たように、図 1 は R 形式である。 また、引数の表現形式 (アドレシング) で分類することもできる。 その場合、この形式は引数が全てレジスタであるため、 レジスタ・アドレシングと呼ばれる。

なお、各レジスタに 5 ビットが割り当てられているが、 $2^5=32$ であるため、32 個のレジスタを 表すのに必要十分であることに注意しよう。

図 2: 命令「add $t0, $s0, $s1」を機械語に変換した様子。かっこ内の数字は 2 進数を 10 進数に変換したもの。
\begin{figure}\begin{center}\epsfxsize =7cm \epsfbox{add.eps}\end{center}\end{figure}

例として「add $t0, $s0, $s1」という命令を機械語に変換した 様子を図 2 に示す。 足される数 $s0, $s1 と結果 $t0 の順番が変わっているが、 基本的に命令が素直に数字に変換されていることがわかるだろう。 なお、レジスタの数字での表現は付録 A を参照。

また、このように命令を数値で表すと「(有限な) レジスタ」、 「(非常に大きな) メモリ」を持った現在のコンピュータが、 チューリング・マシンの良い近似になっていることがわかる (付録 B)。

問題

  1. data07.zip をダウンロードせよ。中の AddSub.asm を実行して中身を理解せよ。
  2. このプログラム中に、図 2 と同じ命令 (add $\cdots$) がある。 この命令に対応する機械語が、確かに図2 と同じになることを 確認せよ。(ヒント:Windows 版 SPIM のテキストウインドウで、上記命令に 対応する機械語が 0x02114020 であることを見つける ( main はメモリアドレス 0x00400020 から始まることに注意)。 この 16 進数の機械語を 2 進数に変換し (付録 C 参照)、 R 形式のビットごとに区切ってやればよい。
  3. 上記プログラムには引き算の命令
    「sub $t1, $s0, $s1」も含まれている。 この命令の機械語を 2 進数で求め、命令コード sub に対応する op フィールドと funct フィールドの値を求めよ。 また、教科書などで命令 sub の op コードを調べて正しい結果が得られているか 確かめよ。


平成16年11月29日