ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ






2018-06-20

CASL2の論理演算のやり方と命令







コンピュータの計算において四則演算の他に重要なものに「論理演算」があります。


論理演算は、2進数を用いるコンピュータにとっては欠かせない演算手段ですが、四則演算とは少し性質が異なります。


今回は、論理演算のやり方とその命令について見てみたいと思います。














論理積(AND)



1か0で表された数字A、Bの値が両方1であるときに答え(出力)が1になる計算です。


論理積は「AND演算」とも呼ばれ、「A AND B」や「A ・ B」という式で表します。


論理積のイメージは、スイッチ2つをONにしないと点灯しない(スイッチ1つだけONでは点灯しない)電球と同じです。



【真理値表】
入力出力
ABF
000
010
100
111


上記の表は真理値表と呼ばれ、論理積の2つの入力に対する出力がどうなっているのか、条件を示したものです。


すなわち、論理積の出力を求めたいときは、この真理値表に従って答えを導き出せばいいということになります。


上記の真理値表に従い、入力AとBの両方が1のときに出力Fが1になり、それ以外の入力のときは出力が0になる、ということが読み取れます。


具体的にどのような計算なのか、問題を見てみましょう。



例1: (0000)2 AND (0001)2 の計算

 0000
AND)0001
 0000


入力A、Bの両方が1で、出力Fが1になります。


したがって、答え:(0000)2になります。



論理積命令



名称オペコード第1オペランド第2オペランド第3オペランド
ANDANDレジスタ
レジスタ
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にすれば点灯する電球と同じです。



【真理値表】
入力出力
ABF
000
011
101
111


上記の真理値に従い、入力A、Bのどちらか一方が1であれば、出力Fが1になります。


具体的にどのような計算なのか、問題を見てみましょう。



例2: (0000)2 OR (0001)2 の計算

 0000
OR)0001
 0001


入力A、Bいずれかが1なら、出力Fは1になります。A、B両方が0で、初めて出力0になります。


したがって、答え:(0001)2になります。





論理和命令



名称オペコード第1オペランド第2オペランド第3オペランド
ORORレジスタ
レジスタ
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のとき消灯し、異なる場合に点灯する電球です。



【真理値表】
入力出力
ABF
000
011
101
110


上記真理値を見ると、入力A、Bの値が異なる場合だけ、出力Fが1になっています。


A、Bの両方が同じ値のとき出力が無いため、「同じは嫌よ」と覚えておいてください。



例3: (1000)2 XOR (1001)2 の計算

 1000
XOR)1001
 0001


入力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」という式で表します。



【真理値表】
入力出力
AF
10
01


例4: (1000)2の計算

1000 --ビット反転--> 0111


したがって、答え:(0111)2になります。



論理否定命令



実はCASL2には論理否定(NOT)演算用の命令はありません。


それではどうすればいいのか?


CASL2で論理否定の代わりに以下のような方法を取れます。



例5: (1000)2を論理否定したい場合

 1000
XOR)1111
 0111


このように、同じ桁数のオール1のビット列と対象の数の排他的論理和演算を行うことで実現できます。





最後に



論理演算は、四則演算とは少し勝手が違うため、初めは戸惑うかもしれません。


しかし、プログラミングを行う上では必須になる計算方法であるため、少しずつ覚えていってください。


続きはまた次回にご期待を!














プロフィール

ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ