投稿

ラベル(アッセンブリ言語)が付いた投稿を表示しています

RSフリップフロップ回路をラダー言語とアセンブリ言語の2通りで表現する

 以下に、**RSフリップフロップ回路**をラダー言語(ラダー図)とアセンブリ言語(x86)の2通りで実装する方法を詳細に解説します。RSフリップフロップは、Set(設定)とReset(リセット)入力で状態を保持する基本メモリ回路です。 --- ### 1. ラダー言語(ラダー図)での実装 #### 標準的な自己保持回路 ``` |-----|-----[SET]-----( )--| |  S  |             Q      | |-----|-----[RST]-----( )--| |  R  |             !Q     | ``` **真理値表**: | S | R | Q | !Q | |---|---|---|----| | 1 | 0 | 1 | 0  | | 0 | 1 | 0 | 1  | | 0 | 0 | 保持 | 保持 | | 1 | 1 | 禁止状態 | #### 機種依存実装(三菱PLC例) ``` |--[SET Q]--|  (S入力) |--[RST Q]--|  (R入力) ``` --- ### 2. x86アセンブリ言語での実装 #### メモリマップドI/O版 ```assembly section .data     S    db 0       ; Set入力     R    db 0       ; Reset入力     Q    db 0       ; 出力Q     notQ db 1       ; 反転出力!Q section .text     global _start _st...

ステップ入力をラダー言語とアッセンブリ言語で書く

 以下に、**ステップ入力**(順次動作制御)をラダー言語(ラダー図)とアセンブリ言語(x86)で実装する方法を解説します。ステップ入力は、工程ごとに順番に動作を進める制御方式で、生産ラインや自動装置でよく使われます。 --- ### 1. ラダー言語でのステップ制御(3工程の例) #### ラダー図構成 ``` |-----|-----[MOV K1 S0]--|  (初期化: S0=1) | START |                | |-------|----------------| | S0    |-----[MOV K1 S1]--| (工程1開始) |       |-----[MOV K0 S0]--| (S0オフ) |-------|----------------| | S1    |-----(工程1動作)--| |       |-----[TMR T1 5s]--| |       |-----[MOV K1 S2]--| (工程2へ) |       |-----[MOV K0 S1]--| (S1オフ) |-------|----------------| | S2    |-----(工程2動作)--| |       |-----[TMR T2 3s]--| |       |-----[MOV K1 S0]--| (先頭に戻る) |       |-----[MOV K0 S2]--| (S2オフ) ``` **動作説明**:   1. `START`信号で初期化(`S0=1`)   2. `S0`がON → 工程1開始(`S1=1`)、`S0`オフ   3. 工程1完了後、`S2`へ移行   4. 最終工程後、最...

XOR回路をラダー言語とアッセンブリ言語で書く

 以下に、**XOR回路(排他的論理和)**をラダー言語(ラダー図)とアセンブリ言語(x86)で記述した例を説明します。XORは「入力が異なるときに真」となる特性を持ち、制御システムで頻繁に利用されます。 --- ### 1. ラダー言語(ラダー図)でのXOR回路 #### 方法1: 基本ロジックの組み合わせ ``` |-----| |/|---( )--|     (A AND NOT B) |  A  | | B |  OUT1 | |-----| |-----|      | |/|---|-----|      | | A |  |  B |       | |-----|-------( )--|     (NOT A AND B)           OUT2 | |-----|-------( )--| |OUT1 |  OUT2  OUT |  (OUT1 OR OUT2) ``` **動作**:   1. `(A AND NOT B)` と `(NOT A AND B)` を並列実行   2. 両方の結果をORで統合 #### 方法2: 機種依存のXOR命令(一部PLC) ``` |--[XOR A B]--( )--| |            OUT   | ``` (※三菱電機PLCなどでは`XOR`命令が直接利用可能) --- ### 2. x86アセンブリ言語でのXOR回路 #### 基本実装(メモリ変数使用) ```assembly section .data     A   db  1       ; 入力A (1=ON, 0=OFF)     B   db  0  ...

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...

NAND回路をラダー言語とアッセンブリ言語で書く

 以下に、**NAND回路**をラダー言語(ラダー図)とアセンブリ言語(x86)で記述した例を説明します。NANDはANDの否定であり、デジタル回路の基本ゲートの1つです。 --- ### 1. ラダー言語(ラダー図)でのNAND回路 #### 方法1: AND + NOTの組み合わせ ``` |-----| |-----|-------|/|-------( )--| |  A  | |  B  |  NOT  |     OUT     | ``` **動作**:   1. `A` AND `B` を計算   2. その結果をNOT(否定)して `OUT` に出力 #### 方法2: 接点の否定利用(PLC機種依存) ``` |/|---| |/|---( )--| | A |   | B |  OUT  | ``` **動作**:   - `A` と `B` が**両方ONでない場合**に `OUT` がON(NANDの定義通り) --- ### 2. x86アセンブリ言語でのNAND回路 #### 基本実装(メモリ変数使用) ```assembly section .data     A   db  1       ; 入力A (1=ON, 0=OFF)     B   db  1       ; 入力B (1=ON, 0=OFF)     OUT db  0       ; 出力OUT section .text     global _start _start:     ; NAND演算: NOT (A AND B)     mov  al, [A]     and  al, [B]...

OR回路をラダー言語とアッセンブリ言語で書く

 以下に、**OR回路**をラダー言語(ラダー図)とアセンブリ言語(x86)で記述した例を説明します。AND回路との違いに注目してください。 --- ### 1. ラダー言語(ラダー図)でのOR回路 #### 例: 2入力OR回路(A OR B → OUT) ``` |-----|-------( )--| |  A  |   OUT     | |-----|           | |  B  |           | ``` **動作条件**:   - 入力 `A` **または** 入力 `B` のいずれかがON(接点閉)のとき、出力 `OUT` がON(コイル励磁)します。 --- ### 2. x86アセンブリ言語でのOR回路 #### 例: メモリ変数を使った実装 ```assembly section .data     A   db  1       ; 入力A (1=ON, 0=OFF)     B   db  0       ; 入力B (1=ON, 0=OFF)     OUT db  0       ; 出力OUT (初期値0) section .text     global _start _start:     ; OR演算の実行     mov  al, [A]    ; AL = Aの値     or   al, [B]    ; AL = A OR B     mov  [OUT], al  ; OUT = 結果     ; プログラム終了 ...

AND回路をラダー言語とアッセンブリ言語で書く

 以下に、**AND回路**をラダー言語(ラダー図)とアセンブリ言語(x86)で記述した例を説明します。 --- ### 1. ラダー言語(ラダー図)でのAND回路 #### 例: 2入力AND回路(A AND B → OUT) ``` |-----| |-----|-------( )--| |  A  | |  B  |   OUT     | ``` **動作条件**:   - 入力 `A` **かつ** 入力 `B` がON(接点閉)のとき、出力 `OUT` がON(コイル励磁)します。 --- ### 2. x86アセンブリ言語でのAND回路 #### 例: メモリ上の変数でAND演算 ```assembly section .data     A   db  1       ; 入力A (1=ON, 0=OFF)     B   db  1       ; 入力B (1=ON, 0=OFF)     OUT db  0       ; 出力OUT (初期値0) section .text     global _start _start:     ; AND演算の実行     mov  al, [A]    ; AL = Aの値     and  al, [B]    ; AL = A AND B     mov  [OUT], al  ; OUT = 結果     ; プログラム終了     mov  eax, 1     ; システムコール番号 (exit)     int  0x80  ...

ラダー言語をアッセンブリ言語に置き換える

以下に、簡単なラダー言語(ラダー図)の例と、それをx86アセンブリ言語に変換した例を説明します。 ### ラダー図の例 ``` |-----| |-----|-------( )--| |  A  | |  B  |   OUT     | ``` **意味**:   入力条件 `A`(スイッチなど)と `B` が両方とも `ON` の場合、出力 `OUT`(リレーなど)をアクティブにする(AND 論理)。 --- ### x86アセンブリ言語への変換例 ```assembly section .data     A db 1      ; 入力A (1=ON, 0=OFF)     B db 1      ; 入力B (1=ON, 0=OFF)     OUT db 0    ; 出力OUT section .text     global _start _start:     ; A と B の状態をチェック     mov al, [A]     ; ALレジスタにAの値をロード     and al, [B]     ; A AND B を計算     ; 結果をOUTに保存     mov [OUT], al   ; 結果をOUTに書き込み     ; システムコールで終了     mov eax, 1     int 0x80 ``` --- ### 動作説明 1. **データセクション**:    - `A`, `B`: 入力状態(1=ON, 0=OFF)    - `OUT`: 出力結果(初期値0) 2. **ロジック処理**:    - `A` と `B` の値を `AND` 演算で比較 ...