命令:マシンの言葉(2)


(3.6)コンピュータ・ハードウエアでのプロシジャー・コールのサポート

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

実は、このプロシジャーコールをどうやって、サポートしているかを理解することはややこしく、「コンピュータに詳しい人とそうでない人」を分ける。

残念ながら、この授業では取り扱わないが、「コンピュータに詳しい人」になりたい方はぜひ、自習してください。このTEXTは非常にわかり易くかかれています。

 

(3.8)MIPSのその他のアドレシング方式

オペランドとは

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

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

 

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

プログラム中では、配列の次を示すために、ある定数を加算したり、ループの繰り返し回数など、定数が良く用いられる。GCCなるCコンパイラでは52%、SPICEなる回路シミュレータでは69%であった。

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

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

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

例題P132

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

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

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

lui $s0, 61       # $s0 の上位16ビットを10進数の61="0000000000111101”とする

例題P133

 

(2)分岐とジャンプにおけるアドレシング

j 10000      # 40000 番地にジャンプ

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

PC(プログラムカウンター)とは何か?


アドレスについて


サポート命令

区分 命令 意味 備考
算術演算 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 各ビットごとにAND
or or R1,R2,R3 R1 <= R2 or R3 各ビットごとにOR
データ転送 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 絶対アドレスジャンプ

命令フォーマット

命令 フォーマット名 備考
6ビット 5ビット 5ビット 5ビット 5ビット 6ビット
add R形式 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 I形式 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 J形式 2 2500 j 2500

 

フォーマット名 6ビット 5ビット 5ビット 5ビット 5ビット 6ビット 備考
R形式 op rs rt rd - func  
I形式 op rs rt address  
J形式 op address  

 


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

1)演習問題3.1

2)演習問題3.4

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

1)演習問題3.2

2)演習問題3.3

3)P135ページの例題の解答は間違っている、正しくやり直せ!

以上