2008年6月8日日曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その3)

こつこつ。


  • 2.5 論理演算

    • 論理演算:語の中身をいじる。

      • 左シフト: sll: nシフトするのは2^nをかけるのといっしょ。
      • 右シフト: srl
      • ビット単位のAND: and, andi
      • ビット単位のOR: or, ori
      • ビット単位のNOT: nor

    • shamtはshift amountのこと。

    • 2.6 条件判定用の命令

      • 条件判定能力:「入力データと計算によって得られた値とに基づいて、別の命令を実行させること」
      • コンピュータ言語においては、if文と、goto文&ラベル。
      • ラベルの定義は、文頭で、"〜:"とする。〜は文字列。
      • 「アセンブラはこのようにラベルを使用することにより、コンパイラやアセンブリ言語プログラマが、分岐先アドレスの計算にわずらわされずに済むようにしている」

        • beq: branch if equal
        • bne: branch if not equal
        • j: jump

          • jはJ形式というあたらしい形。
          • (6 26)


      • 基本ブロック: 分岐が末尾にのみある命令の塊(列)のことを基本ブロックという。コンパイルする上で重要。末尾再帰とかもこれに絡むのかな?
      • 「コンパイルの最初の段階の作業の1つはプログラムを基本ブロックに分解することである。」
      • 大小の比較をする命令もある。

        • slt: set on less than
        • slti: set on less than immediate

      • $zeroは常に0であり、レジスタ番号の割り当ても0である。

      • case文/switch文のような処理を記述する方法は2つある。
      • ひとつはif-then-else文をつなげていく方法。
      • もうひとつはジャンプ・アドレス表を使用する方法。
      • ジャンプ・アドレス表は、ラベルに対応するアドレスを表す語の配列。
      • これを使うために、ジャンプ・レジスタ命令がある。(jr)
      • jはラベルが対象だったが、jrはレジスタ(に格納されているアドレス)が対象。
      • 遅延分岐?




一旦ここまで。

0 件のコメント: