Z3はチューリング完全というものらしいが、チューリングは概念のようで、一定の手順に従えば答えが求められるような計算は理論上すべてチューリングマシンで実行できるとされている。ようするにコンピュータという事だろう。バカなまとめかたしかできないけど、それほど遠からずとも思う。調べてみた感じだと最初のコンピュータってZ3な気がするんだけど、歴史上ではENIACというものらしい。・ジョン・エッカート・ジョン・フォン・ノイマンこのお三方が作った。2進数で、チューリングで、プログラム内蔵方式のこやつが今のコンピュータの原型みたいなもんだろう。設置面積は45.5平方mで7,850kgらしい。!んで、ここでやっとノイマン型が出てくるのだが。ノイマン型CPUプログラムをデータとして記憶装置に格納し、命令列を順番に読み込んで実行するコンピュータ。ただの箱って川柳ができたよってノイマンに聞いたらなんて言うかな。上に出てきたENIACはプログラム内蔵型でなくて、実行する処理の内容で配線をいじって変更する必要があったらしい。EDVACはプログラムを書き換えるときはメモリを変えればOKなので、性能は落ちたけどプログラムの作成が大幅に短くなったという事らしい。性能の違いが、戦力の決定的差ではないということか。長い事かかったけど、ここでEDVACの機械語はどうだったのかというのが今もっとも疑問に思ってることだった。それはEDVACの命令セットアーキテクチャによる(とおもう)。命令セットアーキテクチャは、プロセッサに実装された命令形式を二進数のコードのセットで表現していて、そのオペコードのセットを機械語というのだ。おおおおお、まとまった。おまけ機械語で適当に書いてみるまぁ、適当に書いてみた。10進数で書いてるのは無視してほしい。5ずつ増やして書いたんだけど、なんとなしにこんなもんなんだなぁ程度で。あとはCPUによって命令だったりなんなりの数値が異なるって事だ。x86系のCPUなら今まで書いてたアセンブリでもいいけど、その法則にしたがって数値を書いていけば解釈して実行してくれるということだろう。SJISって事が調査によって分かった。機械語の理解もちょっと進んだかな。バイナリエディタで見えてるのはhexdumpしたものと同じだと思うけど、実行ファイルをobjdumpしたらmovの数値は何だとかは分かるので、それがx86で使える機械語だね。その辺はシェルコードの検証のときにやったから今回はやらないぞ。レジスタの解釈の違いで詰まってた足し算プログラムに進む、いや、戻る結局何で悩んでたかというと、レジスタだけで数値の計算と計算結果を標準出力に表示するということがしたかったんだけどできなかった。./out5C言語でも文字を当てて文字にする手法があったね。バッファの出力はスタックの一番上がespレジスタに入ってるってのを利用して、計算結果をPUSHしておいて、Writeをコールして出すという方法。espレジスタはスタックの一番上を指しているだけであって実体はメモリらしい、残念だ。メモリを指定したらどうなるのかも試したけどセグメントエラーだった(笑)適当にやったらそうなるわな。あとは、PUSHして放置するのはよくないみたいなので、PUSHしたらPOPしよう。PUSHしたらPOPね。Takekenインターネット利用者のITリテラシーを向上しようという目的で生まれた、2次元キャラのたけけんです。サーバー弄りからプログラミングまで幅広く書いています。いっぺん、やってみる?このサイトはさくらのクラウドで動いています。ntopAndroidの開発でC++のコードを使うにはメール送信のリトライ(再送)について考えてみたビール酵母アレルギーだと!?tcpdumpで中身をみてみよう。Comments【Ubuntu】UbuntuServerをコンソールからデスクトップ画面で操作する。さくらの新スタンダードプランのサーバーにRailsを入れて、Redmineをインストールした。