コンピュータの計算において四則演算の他に重要なものに
「論理演算」があります。
論理演算は、2進数を用いるコンピュータにとっては欠かせない演算手段ですが、四則演算とは少し性質が異なります。
今回は、論理演算のやり方とその命令について見てみたいと思います。
論理積(AND)
1か0で表された数字A、Bの値が両方1であるときに答え(出力)が1になる計算です。
論理積は「AND演算」とも呼ばれ、「A AND B」や「A ・ B」という式で表します。
論理積のイメージは、
スイッチ2つをONにしないと点灯しない(スイッチ1つだけONでは点灯しない)電球と同じです。
【真理値表】
上記の表は
真理値表と呼ばれ、論理積の2つの入力に対する出力がどうなっているのか、条件を示したものです。
すなわち、論理積の出力を求めたいときは、この真理値表に従って答えを導き出せばいいということになります。
上記の真理値表に従い、入力AとBの両方が
1のときに出力Fが
1になり、それ以外の入力のときは出力が0になる、ということが読み取れます。
具体的にどのような計算なのか、問題を見てみましょう。
例1: (0000)2 AND (0001)2 の計算
入力A、Bの両方が1で、出力Fが1になります。
したがって、
答え:(0000)2になります。
論理積命令
名称 | オペコード | 第1オペランド | 第2オペランド | 第3オペランド
|
AND | AND | レジスタ | レジスタ or アドレス | ---
|
レジスタ | アドレス | レジスタ
|
使用例1: AND GR0, A
汎用レジスタ
GR0のデータとメモリ
A番地のデータを論理積演算して、汎用レジスタ
GR0に転送せよ。
使用例2: AND GR0, 1
汎用レジスタ
GR0のデータとメモリ
1番地のデータを論理積演算して、汎用レジスタ
GR0に転送せよ。
使用例3: AND GR0, 1, GR1
汎用レジスタ
GR0のデータとメモリ
汎用レジスタGR1のデータ+1番地のデータを論理積演算して、汎用レジスタ
GR0に転送せよ。
使用例4: AND GR0, GR1
汎用レジスタ
GR0のデータと汎用レジスタ
GR1のデータを論理積演算して、汎用レジスタ
GR0に転送せよ。
論理和(OR)
1か0で表せれた数字A、Bの値のどちらか一方が、1であるときに答え(出力)が1になる計算です。
論理和は「OR演算」とも呼ばれ、「A OR B」や「A + B」という式で表します。
論理和のイメージは、
スイッチ2つある内のどちらかをONにすれば点灯する電球と同じです。
【真理値表】
上記の真理値に従い、入力A、Bのどちらか一方が
1であれば、出力Fが
1になります。
具体的にどのような計算なのか、問題を見てみましょう。
例2: (0000)2 OR (0001)2 の計算
入力A、Bいずれかが1なら、出力Fは1になります。A、B両方が0で、初めて出力0になります。
したがって、
答え:(0001)2になります。
論理和命令
名称 | オペコード | 第1オペランド | 第2オペランド | 第3オペランド
|
OR | OR | レジスタ | レジスタ or アドレス | ---
|
レジスタ | アドレス | レジスタ
|
使用例1: OR GR0, A
汎用レジスタ
GR0のデータとメモリ
A番地のデータを論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例2: OR GR0, 1
汎用レジスタ
GR0のデータとメモリ
1番地のデータを論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例3: OR GR0, 1, GR1
汎用レジスタ
GR0のデータとメモリ
汎用レジスタGR1のデータ+1番地のデータを論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例4: OR GR0, GR1
汎用レジスタ
GR0のデータと汎用レジスタ
GR1のデータを論理和演算して、汎用レジスタ
GR0に転送せよ。
排他的論理和(XOR)
1か0で表せれた数字A、Bの値が異なる場合に、答え(出力)が1になる計算です。
排他的論理和は「XOR(EX-OR)演算」とも呼ばれ、「A XOR B」や「A
+ B」という式で表します。
イメージとしては、
スイッチが2つある内、両方ONかOFFのとき消灯し、異なる場合に点灯する電球です。
【真理値表】
上記真理値を見ると、入力A、Bの値が異なる場合だけ、出力Fが
1になっています。
A、Bの両方が同じ値のとき出力が無いため、
「同じは嫌よ」と覚えておいてください。
例3: (1000)2 XOR (1001)2 の計算
入力A、Bが違うとき、出力Fは1になります。
したがって、
答え:(0001)2になります。
排他的論理和命令
名称 | オペコード | 第1オペランド | 第2オペランド | 第3オペランド
|
eXclusive OR | XOR | レジスタ | レジスタ or アドレス | ---
|
レジスタ | アドレス | レジスタ
|
使用例1: XOR GR0, A
汎用レジスタ
GR0のデータとメモリ
A番地のデータを排他的論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例2: XOR GR0, 1
汎用レジスタ
GR0のデータとメモリ
1番地のデータを排他的論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例3: XOR GR0, 1, GR1
汎用レジスタ
GR0のデータとメモリ
汎用レジスタGR1のデータ+1番地のデータを排他的論理和演算して、汎用レジスタ
GR0に転送せよ。
使用例4: XOR GR0, GR1
汎用レジスタ
GR0のデータと汎用レジスタ
GR1のデータを排他的論理和演算して、汎用レジスタ
GR0に転送せよ。
論理否定(NOT)
入力Aの反対のビット列が出力Fになります。
論理否定は「NOT演算」とも呼ばれ、「
A」という式で表します。
【真理値表】
例4: (1000)2の計算
1000 --ビット反転--> 0111
したがって、
答え:(0111)2になります。
論理否定命令
実はCASL2には論理否定(NOT)演算用の命令はありません。
それではどうすればいいのか?
CASL2で論理否定の代わりに以下のような方法を取れます。
例5: (1000)2を論理否定したい場合
このように、
同じ桁数のオール1のビット列と対象の数の排他的論理和演算を行うことで実現できます。
最後に
論理演算は、四則演算とは少し勝手が違うため、初めは戸惑うかもしれません。
しかし、プログラミングを行う上では必須になる計算方法であるため、少しずつ覚えていってください。
続きはまた次回にご期待を!