NOR回路をラダー言語とアッセンブリ言語で書く
以下に、**NOR回路**をラダー言語(ラダー図)とアセンブリ言語(x86)で記述した例を説明します。NORは「ORの否定」であり、NANDと同様に万能論理ゲートとして機能します。
---
### 1. ラダー言語(ラダー図)でのNOR回路
#### 方法1: OR + NOTの組み合わせ
```
|-----|-------|/|-------( )--|
| A | NOT OUT |
|-----| |
| B | |
```
**動作**:
1. `A` OR `B` を計算
2. その結果をNOT(否定)して `OUT` に出力
#### 方法2: 否定接点を利用(PLC機種依存)
```
|/|---|/|---( )--|
| A | | B | OUT |
```
**動作**:
- `A` と `B` が**両方OFFの場合のみ** `OUT` がON(NORの定義通り)
---
### 2. x86アセンブリ言語でのNOR回路
#### 基本実装(メモリ変数使用)
```assembly
section .data
A db 0 ; 入力A (1=ON, 0=OFF)
B db 0 ; 入力B (1=ON, 0=OFF)
OUT db 0 ; 出力OUT
section .text
global _start
_start:
; NOR演算: NOT (A OR B)
mov al, [A]
or al, [B] ; AL = A OR B
xor al, 1 ; AL = NOT (A OR B) (ビット反転)
mov [OUT], al ; OUTに結果を保存
; プログラム終了
mov eax, 1
int 0x80
```
#### 物理I/O版(PLC風リアルタイム制御)
```assembly
section .text
global _start
_start:
; ポートから入力読み取り
in al, 0x20 ; A
and al, 0x01
in bl, 0x21 ; B
and bl, 0x01
; NOR演算
or al, bl ; A OR B
xor al, 1 ; NOTを適用
out 0x22, al ; 結果を出力
jmp _start ; PLCのように無限ループ
```
---
### 3. 動作の真理値表
| A | B | A OR B | OUT (NOR) |
|---|---|-------|----------|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 |
---
### 4. ラダー図とアセンブリの対応ポイント
| ラダー要素 | アセンブリ対応 |
|---------------------|---------------------------|
| 並列接点(OR部分) | `or` 命令 |
| NOT演算 | `xor al, 1`(ビット反転) |
| 出力コイル | `mov [OUT], al` |
---
### 5. 最適化されたアセンブリ実装
条件分岐を利用した高速化:
```assembly
_start:
mov al, [A]
or al, [B] ; A OR B
jnz set_zero ; 結果が0でない場合ジャンプ
mov al, 1 ; OUT=1 (NORが真)
jmp save
set_zero:
mov al, 0 ; OUT=0
save:
mov [OUT], al
```
---
### 6. 重要な注意点
1. **PLCの論理評価順序**:
ラダー図では上から下へ順次評価されるため、NORの実装方法によって動作が異なる場合があります。
2. **アセンブリのビット操作**:
- 物理I/Oでは`and al, 0x01`でマスク処理が必要(PLCは1ビット単位)
- `not`命令は全ビット反転のため、`xor al, 1`が安全
3. **NORの特性**:
```
NOT (A OR B) = NOT A AND NOT B
```
この性質を利用すれば、否定接点のみでラダー図を構成可能です。
---
### 7. 応用例(他の論理ゲートの構築)
NORも**万能論理ゲート**です。例としてNOTゲートの作成:
```assembly
; NOT X = X NOR X
mov al, [X]
or al, al ; AL = X OR X
xor al, 1 ; AL = NOT X
```
#### ANDゲートの構成(ド・モルガンの法則利用):
```
A AND B = NOT ((NOT A) OR (NOT B))
```
対応するアセンブリ:
```assembly
mov al, [A]
xor al, 1 ; NOT A
mov bl, [B]
xor bl, 1 ; NOT B
or al, bl ; (NOT A) OR (NOT B)
xor al, 1 ; NOT → AND完成
```
---
NOR回路は組み合わせ次第で任意の論理回路を構築できるため、PLCや低レベル制御プログラムで重要な役割を果たします。ハードウェア記述言語(HDL)やFPGA設計でも同様の原理が適用されます。
コメント
コメントを投稿