- 2.5 論理演算
- 論理演算:語の中身をいじる。
- 左シフト: sll: nシフトするのは2^nをかけるのといっしょ。
- 右シフト: srl
- ビット単位のAND: and, andi
- ビット単位のOR: or, ori
- ビット単位のNOT: nor
- 左シフト: sll: nシフトするのは2^nをかけるのといっしょ。
- shamtはshift amountのこと。
- 2.6 条件判定用の命令
- 条件判定能力:「入力データと計算によって得られた値とに基づいて、別の命令を実行させること」
- コンピュータ言語においては、if文と、goto文&ラベル。
- ラベルの定義は、文頭で、"〜:"とする。〜は文字列。
- 「アセンブラはこのようにラベルを使用することにより、コンパイラやアセンブリ言語プログラマが、分岐先アドレスの計算にわずらわされずに済むようにしている」
- beq: branch if equal
- bne: branch if not equal
- j: jump
- jはJ形式というあたらしい形。
- (6 26)
- jはJ形式というあたらしい形。
- beq: branch if equal
- 基本ブロック: 分岐が末尾にのみある命令の塊(列)のことを基本ブロックという。コンパイルする上で重要。末尾再帰とかもこれに絡むのかな?
- 「コンパイルの最初の段階の作業の1つはプログラムを基本ブロックに分解することである。」
- 大小の比較をする命令もある。
- slt: set on less than
- slti: set on less than immediate
- slt: set on less than
- $zeroは常に0であり、レジスタ番号の割り当ても0である。
- case文/switch文のような処理を記述する方法は2つある。
- ひとつはif-then-else文をつなげていく方法。
- もうひとつはジャンプ・アドレス表を使用する方法。
- ジャンプ・アドレス表は、ラベルに対応するアドレスを表す語の配列。
- これを使うために、ジャンプ・レジスタ命令がある。(jr)
- jはラベルが対象だったが、jrはレジスタ(に格納されているアドレス)が対象。
- 遅延分岐?
- 条件判定能力:「入力データと計算によって得られた値とに基づいて、別の命令を実行させること」
- 論理演算:語の中身をいじる。
一旦ここまで。
0 件のコメント:
コメントを投稿