Subsections
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にすることができる.たとえば,Aの内容を
#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
2006-01-22