命令:マシンの言葉


(3.1)はじめに

命令(Instruction): コンピュータの言葉

命令セット(Instruction set): コンピュータの語彙(言葉の集まり、全体)

ここでは、MIPS Computer社の命令セットを取り扱う。MIPS命令セットは、ソニーPlayStation、任天堂Nintendo64、シリコン・グラフィックス社のワークステーションで用いられている。

 

(3.2)コンピュータ・ハードウエアの演算

add a, b, c  #bとcの和をaに収める
add a, a, d  #結果として、b+c+dの和を、aに収める
add a, a, e  #結果として、b+c+d+eの和を、aに収める

設計原則1:単純性は規則性につながる

sub a, b, c  #b-cをaに収める

例題P98-1

例題P98-2

(3.3)コンピュータ・ハードウエアのオペランド

int a, b, mem[100], *p;

レジスタの数に限りがある理由は、

設計原則2:小さければ小さいほど高速になる

図:後半の授業で取り扱う小規模MIPSの図

 

例題P100

さて、レジスタに入らない変数はどうするのか?

(答え)メモリに蓄える。しかし、算術演算はレジスタに対してしか行えない。
ということで、メモリとレジスタ間のデータ転送命令が必要となる。

メモリ内のワードにアクセスするには、命令中でメモリのアドレスを指定しなければならない。

例題P101

ハードウエアとソフトウエアのインターフェース

例題P103-1

例題P103−2

(3.4)コンピュータ内での命令の表現

レジスタ名 $zero     $t0 $t1 ... $t7 $s0 $s1 ... $s7    
レジスタ番号 0 ... 8 9 ... 15 16 17 ... 23 ...

例題P106

例題P108

(3.5)条件判定用の命令

beq $s1, $s2, L1  # $s1と$s2が等しければ、L1のラベルの命令へプログラム実行を分岐

bne $s1, $s2, L1  # $s1と$s2が等しくなければ、L1ラベルの命令へプログラム実行を分岐

j L2         # 無条件にL2ラベルの命令へプログラム実行を分岐

slt $t0, $s0, $s1  # $s0 < $s1ならば、$t1を1にする

例題P112

例題P113

例題P116


クイズ2 : 学籍番号 名前 日付 を書いて 提出すること!

1)変数hがレジスタ$s2、配列Aのベースアドレスがレジスタ$s3に対応するとして、下記のCコードをコンパイルした結果のアセンブリコードはどうなるか?

A[1] = h + A[0];
A[2] = h + A[1];

2)P108の例題を参照して、下記のアセンブリコードを機械語に変更せよ

lw $t1, 1200($t2)
add $t3, $s2, $t1
sw $t3, 1200($t2)

宿題2 : 学籍番号 名前 日付 を書いて 提出すること!

1)演習問題3.9

2)演習問題3.11

以上