Subsections

5 論理演算命令

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

    5.1 論理積(AND)

    5.1.1 内容

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

    5.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にすることができる.たとえば,Aの内容を #5555として,

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

    5.2 論理和(OR)

    5.2.1 内容

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

    5.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に設定される.

    5.3 排他的論理和(XOR)

    5.3.1 内容

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

    5.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
    2006-01-22


    no counter