マシンの言葉（２）

# 命令：マシンの言葉（２）

## （３．６）コンピュータ･ハードウエアでのプロシジャー･コールのサポート

コンピュータプログラムでは、サブルーチンを定常的に使う。

## （３．８）ＭＩＰＳのその他のアドレシング方式

オペランドとは

add $s1, $s2, $s3　　# $s2 と $s3 の和を $s1 に収める

の $s1, $s2, $s3すなわち、レジスタを示していた。

ＭＩＰＳアーキテクチャでは、もう２つのオペランドのアクセス（読み書きしに行くこと）方法がある。

（１）定数すなわち即値のオペランド　（即値とは、即（すぐさま）利用できる目的とする数）

プログラム中では、配列の次を示すために、ある定数を加算したり、ループの繰り返し回数など、定数が良く用いられる。ＧＣＣなるＣコンパイラでは５２％、ＳＰＩＣＥなる回路シミュレータでは６９％であった。

すなわち、定数を使いやすくすれば、全体を高速化できる。

設計原則４：一般的な場合を高速化せよ

即値とは命令の中に入れた定数で、命令を読み出せば、即、その定数が利用できるので、即値という。
英語では
Immediate と呼ぶ。

例題Ｐ１３２

$sp　に　４　を加える場合、addi　なる命令　add immediate を用いる。

addi $sp, $sp, 4 　　　# $sp <= $sp + 4;

slti $t0, $s0, 10 　　　# $s2 < 10の時に、$t0 <= 1　とする

lui $s0, 61 　　　　　　# $s0
の上位１６ビットを１０進数の６１＝"００００００００００１１１１０１”とする

例題Ｐ１３３

（２）分岐とジャンプにおけるアドレシング

ｊ 10000 　　　　　# 40000　番地にジャンプ

bne $s0, $s1, Exit 　　　　# PC+4+4*Exit　番地にジャンプ

PC（プログラムカウンター）とは何か？

#### アドレスについて

通常メモリは各バイト（8ビット）ごとに、アドレスが与えられている。
MIPSの命令はすべて32ビット長すなわち、4バイトの大きさを持つ
したがって、命令コードは０番地、４番地、８番地のように４番地おきに指定される。

したがって、"beq R1, R2, 25"や"j
2500"のように命令のアドレスを指定する数値は４分の１の大きさの値を使用している。これにより広い範囲のアドレス空間を指定できる。

サポート命令

区分 命令 例 意味 備考
算術演算 add add R1,R2,R3 R1 <= R2 + R3 加算
subtract sub R1,R2,R3 R1 <= R2 - R3 減算
論理演算 and and R1,R2,R3 R1 <= R2 and R3 各ビットごとにＡＮＤ
or or R1,R2,R3 R1 <= R2 or R3 各ビットごとにＯＲ
データ転送 load word lw R1, 100(R2) R1 <= メモリ[R2+100] メモリからレジスタへの転送
store word sw R1, 100(R2) メモリ[R2+100] <= R1 レジスタからメモリへの転送
条件分岐 branch on equal beq R1,R2,25 if (R1=R2) go to PC+4+100 等しい時にPC相対分岐
set on less than slt R1,R2,R3 if (R2<R3) R1<=1 else R1<=0
無条件ジャンプ jump j 2500 go to 10000 絶対アドレスジャンプ

#### 命令フォーマット

命令の機械語フォーマットを説明する。この例では、各フィールドの値は10進法で示してある。
ＭＩＰＳの命令はすべて32ビット長

命令 フォーマット名 例 備考
6ビット 5ビット 5ビット 5ビット 5ビット 6ビット
add Ｒ形式 0 2 3 1 0 32 add R1, R2, R3
sub 0 2 3 1 0 34 sub R1, R2, R3
and 0 2 3 1 0 36 and R1, R2, R3
or 0 2 3 1 0 37 or R1, R2, R3
slt 0 2 3 1 0 42 slt R1, R2, R3
lw Ｉ形式 35 2 1 100 lw R1, 100(R2)
sw 43 2 1 100 sw R1, 100(R2)
beq 4 1 2 25 beq R1, R2, 25
j Ｊ形式 2 2500 j 2500

フォーマット名 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット 備考
Ｒ形式 op ｒｓ rt rd - func
Ｉ形式 op rs rt address
Ｊ形式 op address

opフィールドとfuncフィールドで操作を指定する。
ｒｓはソースレジスタ、rtも通常はソースレジスタ、rdはデスティネーションレジスタ

### クイズ３　：　学籍番号　名前　日付　を書いて　提出すること！

１）演習問題３．１

２）演習問題３．４

### 宿題３　：　学籍番号　名前　日付　を書いて　提出すること！

１）演習問題３．２

２）演習問題３．３