CASL IIの場合、論理積と論理和、排他的論理和の論理演算命令が用意されている。COMET
IIは、1語である16ビットの各ビット毎の論理演算を行う。論理演算については、2年生の
ブール代数で学習したが、忘れた人もいると思うので、表に載せておく。
命令語 |
AND:
AND
(and:かつ) |
役割 |
ビット毎の論理積を計算する。 |
書式 |
教科書(p.51)の通り。 |
機能 |
教科書(p.51)の通り。 |
フラグレジスタ |
教科書(p.51)の通り。 |
|
|
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に設定される。
命令語 |
OR:
OR
(or:または) |
役割 |
ビット毎の論理和を計算する。 |
書式 |
教科書(p.53)の通り。 |
機能 |
教科書(p.53)の通り。 |
フラグレジスタ |
教科書(p.51)の通り。 |
|
|
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に設定される。
命令語 |
XOR:
eXclusive OR
(exclusive:排他的な or:または) |
役割 |
ビット毎の排他的論理和を計算する。 |
書式 |
教科書(p.54)の通り。 |
機能 |
教科書(p.54)の通り。 |
フラグレジスタ |
教科書(p.51)の通り。 |
|
|
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日