コンピュータプログラムでは、サブルーチンを定常的に使う。
実は、このプロシジャーコールをどうやって、サポートしているかを理解することはややこしく、「コンピュータに詳しい人とそうでない人」を分ける。
残念ながら、この授業では取り扱わないが、「コンピュータに詳しい人」になりたい方はぜひ、自習してください。このTEXTは非常にわかり易くかかれています。
オペランドとは
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 |
1)演習問題3.1
2)演習問題3.4
1)演習問題3.2
2)演習問題3.3
3)P135ページの例題の解答は間違っている、正しくやり直せ!
以上