OISC

OISC(One-instruction Set Computer)とは



OISC(One-instruction set computer)は、その名の通り、命令がたった一つしかないコンピュータです。これは、従来のコンピュータが持つ多様な命令セットとは対照的です。一見すると非常に非効率に思えるかもしれませんが、高度なメモリマッピング技術を駆使することで、複雑な演算処理も実現できます。そのため、一部の実装では、唯一の命令として Subleq(subtract and branch if less or equal to zero、減算と0以下なら分岐) が採用されています。

OISCは、別名でURISC(Ultimate RISC、究極のRISC と呼ばれることもあります。これは、RISC(Reduced Instruction Set Computer)の概念を極限まで推し進めたものと解釈できます。また、いくつかのOISCをベースにしたプログラミング言語は、チューリング完全であることが証明されており、理論的にはあらゆる計算が可能です。

OISCの利用



OISCは、命令が一つしかないという特性上、実用的なコンピュータとして利用されることは稀です。しかし、その特異な構造は、プログラミングの概念を深く理解するための教材として、また、難解プログラミング言語 の世界で独自の存在感を放っています。

OISCを使ったプログラミングは、初期設定やメモリマッピングが非常に重要になります。限られた命令をどのように組み合わせ、効率的な処理を実現するかを考えることは、プログラミングの根本を理解する上で役立ちます。

Subleq命令の詳細



Subleqは、OISCの中でも特に一般的な命令です。通常、Subleqは3つのパラメータを持ち、以下のような構文で表現されます。

`Subleq a, b, c`

この命令は、以下の処理を行います。

1. bからaを減算 し、その結果をbに格納します。
2. 減算の結果が0以下の場合、制御をアドレスcに移します
3. 減算の結果が0より大きい場合は、次の命令に進みます。(この場合は次の命令がないため終了)

Subleqの動作例



以下にSubleqの簡単な動作例を示します。メモリ上のアドレスを、そのアドレスに格納されている値と共に示します。

アドレス
- -
0 7
1 7
2 4
3 3
7 1

この状態で、`subleq 0 1 7` が実行された場合:

1. アドレス1の値(7)からアドレス0の値(7)を減算し、結果(0)をアドレス1に格納します。
2. 減算結果が0なので、制御をアドレス7に移します。
3. アドレス7には値が格納されているだけで命令がないため、処理は終了します。

次に、アドレスを以下のように変更し、`subleq 2 3 7` を実行した場合:

アドレス
- -
0 7
1 0
2 4
3 3
7 1

1. アドレス3の値(3)からアドレス2の値(4)を減算し、結果(-1)をアドレス3に格納します。
2. 減算結果が0より小さいので、制御をアドレス7に移します。
3. アドレス7には値が格納されているだけで命令がないため、処理は終了します。

Subleqのソースコード



Subleqのソースコードを書く際には、可読性を向上させるために、構文を少し変更することがあります。例えば、数値の代わりに変数名を使用したり、コメントを記述したりすることが一般的です。

OISCのマシンアーキテクチャ例



OISCのアーキテクチャには、以下のようなものが存在します。

BitBitJump:ビット単位で処理を行うOISC。
ByteByteJump:バイト単位で処理を行うOISC。
Blues Machine:複雑なメモリマッピングを利用するOISC。
DJN: 1つの命令で乗算、加算、ジャンプなどの処理を行うことができるOISC。

これらのアーキテクチャは、それぞれ異なる特性を持っており、OISCの多様性を表しています。

関連項目



難解プログラミング言語:OISCは、難解プログラミング言語のベースとして利用されることがあります。

外部リンク



Esolang wikiにおける、OISCの記事
* Esolang wikiにおける、Subleqの記事

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。