シミュレーション結果で、Iop3とIs3とId3に入力されているチョコマカした数字が、OPUに実行させてるプログラム。
OPUはメモリもプログラムカウンタも無いから、実行すべき命令をシミュレータの入力パターンとして書くんだよw
んで、このプログラムを理解するにゃ、まずOPUが実行可能な命令セット(インストラクションセット)を知らねばなるまい。
OPUの命令セットは、Iop3、Is3、Id3の3つの3bit長数値で表現されます。
Iop3入力は、OPUどにんな演算をさせるのかを指定する3bitの入力です。
Iop3の値で、入力ポートから値を読むか、レジスタ間演算をするのか、等等を指定します。
Iop3で指定した演算するとき、何と何を演算するのかを指定するのが、Is3入力とId3入力。
sとdはソースとデスティネーションって意味で、ソースってのはデータの供給元、デスティネーションってのは演算結果の行き先。
さくっと言うと、「Is3で指定したレジスタの値とId3で指定したレジスタの値を、Iop3で指定したように演算して、Id3で指定したレジスタに格納する」ってのが、OPUの動作の基本。 ま、Iop3で指定する命令によってちとづつ違うけどね。
で、下の表がOPUの命令セット一覧、本邦初一挙公開。
命令(Iop3) |
命令の意味 |
動作の説明 |
0 |
データコピー |
Reg(S) ⇒ Reg(D) |
1 |
定数代入 |
定数(S) ⇒ Reg(D) |
2 |
データ入力 |
In(S) ⇒ Red(D) |
3 |
なんもしない |
なんもしない (実はRed(D) ⇒ Reg(D)って動作をしている) |
4 |
比較 |
Reg(S)とRed(D)とを比較
Reg(S)の値が大きい場合は'1111' ⇒ Reg(D)
Reg(S)の値が大きくない場合は'0000' ⇒ Flag(D) |
5 |
論理演算(AND) |
Reg(S) AND Reg(D) ⇒ Reg(D) |
6 |
論理演算(OR) |
Reg(S) OR Reg(D) ⇒ Reg(D) |
7 |
論理演算(NOT) |
Reg(S)の値を反転 ⇒ Reg(D) |
あーごめん、一挙公開とか言っても、たったこんだけしか無いwwww
ちなみにIn(S)とかReg(D)とかってのは、「Is3入力で指定した入力ポート」とか「Id3入力で指定するレジスタ」って意味だからね。
定数(S)ってのは、「Is3入力に入力された値をそのまま」って意味だわ。
んで、先に載せたシミュレーション結果は、この命令セットを使って、以下のプログラムを実行させている。
動作概要 |
適当ニモニック表記 |
数値表記 |
入力ポート0をReg0に保存 |
Input In(0)=>Reg0 |
2,0,0 |
入力ポート1をリードし、
Reg0に大きい方の値を保存 |
Input In(1)=>Reg1 |
2,1,1 |
Copy Reg1=>Reg2 |
0,1,2 |
Comp Reg0,Reg2 |
4,0,2 |
And Reg2,Reg0 |
5,2,0 |
Not Reg2=>Reg2 |
7,2,2 |
And Reg2,Reg1 |
5,2,1 |
OR Reg1,Reg0 |
6,1,0 |
入力ポート2をリードし、
Reg0に大きい方の値を保存 |
Input In(2)=>Reg1 |
2,2,1 |
Copy Reg1=>Reg2 |
0,1,2 |
Comp Reg0,Reg2 |
4,0,2 |
And Reg2,Reg0 |
5,2,0 |
Not Reg2=>Reg2 |
7,2,2 |
And Reg2,Reg1 |
5,2,1 |
OR Reg1,Reg0 |
6,1,0 |
入力ポート3をリードし、
Reg0に大きい方の値を保存 |
Input In(3)=>Reg1 |
2,3,1 |
Copy Reg1=>Reg2 |
0,1,2 |
Comp Reg0,Reg2 |
4,0,2 |
And Reg2,Reg0 |
5,2,0 |
Not Reg2=>Reg2 |
7,2,2 |
And Reg2,Reg1 |
5,2,1 |
OR Reg1,Reg0 |
6,1,0 |
シミュレータに入力してあるのは、数値表記欄に記載されている3ヶの数字のセットで、左からIop3、Is3、Id3の値を示している。
この数字が、OPUが実際に認識できるプログラムコード。古い言葉で言えば機械語とかマシン語とかって言い方になる。。えーこれって死語?? んでも、世の中のCPUって、Pentiumだって、もっと命令の種類が多くて個々の命令が高機能で、Iop3+Is3+Id3がゴッチャになって32bit長の値になってるけど、基本的には同じ仕組みだよぉw
しっかし、数字の組み合わせじゃ、何がなんだか判らんでしょ。
ってコトで、もちっと人間に判りやすいように記述したのが、真ん中の列の「ニモニック表記」。
この表記って、数字の組み合わせと1対1対応になってるからね、パソコンのプログラムでニモニック表記を数字の組み合わせに変換するのは、簡単だよね。
んで、こういうニモニック表記で記述したプログラムとか、ニモニック表記を数字の組み合わせに変換するプログラムをアセンブラって呼んでいる。
ちなみに、ニモニック表記でもマダ判り難いって人は、C言語とかの高級言語を使う。
C言語使うと、実現したい機能をもっと簡単に記述できて楽なんだけど、C言語で書いたプログラムだって、結局はCコンパイラ使って数字の組み合わせに変換してからCPUで実行するコトになる。
|