3 論理演算命令

CASL IIの場合、論理積と論理和、排他的論理和の論理演算命令が用意されている。COMET IIは、1語である16ビットの各ビット毎の論理演算を行う。論理演算については、2年生の ブール代数で学習したが、忘れた人もいると思うので、表に載せておく。

  • 4. 論理積(AND)
  • 5. 論理和(OR)
  • 6. 排他的論理和(XOR)
  • 表 4: 論理積(AND)
    $ A$ $ B$ $ A\cdot B$
    0 0 0
    0 1 0
    1 0 0
    1 1 1
    表 5: 論理和(OR)
    $ A$ $ B$ $ A+B$
    0 0 0
    0 1 1
    1 0 1
    1 1 1
    表 6: 排他的論理和(XOR)
    $ A$ $ B$ $ A \oplus B$
    0 0 0
    0 1 1
    1 0 1
    1 1 0

    3.1 論理積(AND)

    3.1.1 内容

    命令語 AND: AND (and:かつ)
    役割 ビット毎の論理積を計算する。
    書式 教科書(p.51)の通り。
    機能 教科書(p.51)の通り。
    フラグレジスタ 教科書(p.51)の通り。
     

    3.1.2 使用例

          AND  GR0,GR1      ;GR0←(GR0の各ビット).AND.(GR1の各ビット)
          AND  GR0,A        ;GR0←(GR0の各ビット).AND.(アドレスAの内容の各ビット)
          AND  GR0,A,GR1    ;GR0←GR0.AND.(アドレス[A+GR1]の内容)
          AND  GR0,=5       ;GR0←GR0.AND.(0000000000000101)
    

    AND命令の使われ方として多いのは、マスク処理への応用である。たとえ ば、GR0の最下位のビットが0か1かを調べる場合である。この場合、 AAの内容を、#0001として、

    	AND  GR0,AA    ;AA=#0001
    
    を実行する。すると、もしGR1の最下位ビット(第0ビット)が0の場合、フラグ レジスタのZF=1になる。このような使われ方は非常に多い。この処理に は、第0ビット以外は関係ないので、隠している。このことをマスクと言う。 このようにして特定のビットを調べることができる。次に述べるORの命 令でも、これと似た処理ができそうに思えるが、大変面倒である。なぜか考え てみよ。

    この応用として、特定のビットを0にすることができる。たとえば、AAの 内容を#5555として、

    	AND  GR0,A    ;#5555
    
    を実行する。すると、GR1の奇数番目のビットが0に設定される。

    3.2 論理和(OR)

    3.2.1 内容

    命令語 OR: OR (or:または)
    役割 ビット毎の論理和を計算する。
    書式 教科書(p.53)の通り。
    機能 教科書(p.53)の通り。
    フラグレジスタ 教科書(p.51)の通り。
     

    3.2.2 使用例

          OR   GR0,GR1      ;GR0←(GR0の各ビット).OR.(GR1の各ビット)
          OR   GR0,A        ;GR0←(GR0の各ビット).OR.(アドレスAの内容の各ビット)
          OR   GR0,A,GR1    ;GR0←GR0.OR.(アドレス[A+GR1]の内容)
          OR   GR0,=5       ;GR0←GR0.OR.(0000000000000101)
    

    ANDとは反対に、OR命令は、特定のビットを1にすることができる。 たとえば、AAの内容を#5555として、

    	OR   GR0,AA   ;AA=#5555
    
    を実行する。すると、GR1の偶数番目のビットが1に設定される。

    3.3 排他的論理和(XOR)

    3.3.1 内容

    命令語 XOR: eXclusive OR (exclusive:排他的な or:または)
    役割 ビット毎の排他的論理和を計算する。
    書式 教科書(p.54)の通り。
    機能 教科書(p.54)の通り。
    フラグレジスタ 教科書(p.51)の通り。
     

    3.3.2 使用例

          XOR  GR0,GR1      ;GR0←(GR0の各ビット).XOR.(GR1の各ビット)
          XOR  GR0,A        ;GR0←(GR0の各ビット).XOR.(アドレスAの内容の各ビット)
          XOR  GR0,A,GR1    ;GR0←GR0.XOR.(アドレス[A+GR1]の内容)
          XOR  GR0,=5       ;GR0←GR0.XOR.(0000000000000101)
    

    XOR命令は、ビットを反転することができる。すなわち、論理否定(NOT) の動作をすることができる。これは、AAの内容を#FFFFとして、

    	XOR  GR0,AA   ;AA=#FFFF
    
    を実行する。すると、GR1のすべてのビットが反転される。

    特定のビットを反転することも可能である。たとえば、AAの内容を #5555として、

    	XOR  GR0,AA   ;AA=#5555
    
    を実行する。すると、GR1の偶数番目のビットが反転される。
    ホームページ: Yamamoto's laboratory
    著者: 山本昌志
    Yamamoto Masashi
    平成16年9月7日


    no counter