: [SPIM] I 形式
: マイクロプロセッサ演習
: MIPS のアセンブリ言語の機械語への翻訳
and, sub, slt 等の命令は、図 1 に示すような
R 形式で表される。
この形式では 32 ビットを 6 つに分割し、
以下のように命令コードやオペランドに割り当てる。
図 1:
R 形式
|
- op: 命令操作コード。 6 ビット。
- rs: 第 1 のソースオペランドのレジスタ。 5 ビット。
- rt: 第 2 のソースオペランドのレジスタ。 5 ビット。
- rd: デスティネーション・オペランド (結果出力) のレジスタ。5 ビット。
- shamt: シフト量。これまでの範囲では扱われず、0 である。 5 ビット。
- funct: 機能。命令操作フィールド (op) のバリエーションを表す。6 ビット。
このように、命令の数字列をビット数の分割法で分類したものを
命令形式と呼ぶ。
すでに見たように、図 1 は R 形式である。
また、引数の表現形式 (アドレシング) で分類することもできる。
その場合、この形式は引数が全てレジスタであるため、
レジスタ・アドレシングと呼ばれる。
なお、各レジスタに 5 ビットが割り当てられているが、
であるため、32 個のレジスタを
表すのに必要十分であることに注意しよう。
図 2:
命令「add $t0, $s0, $s1」を機械語に変換した様子。かっこ内の数字は 2 進数を 10 進数に変換したもの。
|
例として「add $t0, $s0, $s1」という命令を機械語に変換した
様子を図 2 に示す。
足される数 $s0, $s1 と結果 $t0 の順番が変わっているが、
基本的に命令が素直に数字に変換されていることがわかるだろう。
なお、レジスタの数字での表現は付録 A を参照。
また、このように命令を数値で表すと「(有限な) レジスタ」、
「(非常に大きな) メモリ」を持った現在のコンピュータが、
チューリング・マシンの良い近似になっていることがわかる
(付録 B)。
問題
- data07.zip をダウンロードせよ。中の AddSub.asm
を実行して中身を理解せよ。
- このプログラム中に、図 2 と同じ命令 (add ) がある。
この命令に対応する機械語が、確かに図2 と同じになることを
確認せよ。(ヒント:Windows 版 SPIM のテキストウインドウで、上記命令に
対応する機械語が
0x02114020 であることを見つける
( main はメモリアドレス 0x00400020 から始まることに注意)。
この 16 進数の機械語を 2 進数に変換し (付録 C 参照)、
R 形式のビットごとに区切ってやればよい。
- 上記プログラムには引き算の命令
「sub $t1, $s0, $s1」も含まれている。
この命令の機械語を 2 進数で求め、命令コード sub に対応する
op フィールドと funct フィールドの値を求めよ。
また、教科書などで命令 sub の op コードを調べて正しい結果が得られているか
確かめよ。
平成16年11月29日