- ベストアンサー
cpu 機械語
cpu 機械語 私は工学部の出身ではないのですが、CPUは機械語を理解してコンピュータを動かすと聞いています。cpuはなぜ機械語を理解できるのでしょうか? 人間の脳とはちがうものだとは思うのですが・・・?CPUは人間が作り出したものであるなら、人間が分かりやすいC言語などを直接理解できるように開発すればいいのではないでしょうか? 根本的な質問かと思います。長くなってもかまいませんのでご意見お聞かせ下さい。 お願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
> CPUは機械語を理解してコンピュータを動かすと聞いています。cpuはなぜ機械語を理解できるのでしょうか? 多分「機械語」という言葉から間違ったイメージを持たれていると思います。機械語というのは人間が便宜上そう呼んでいるだけで別に言葉ではありません。 コンピュータの世界では2進法が使われていることはご存知ですよね。0と1を使って数字を表す訳ですが、この0と1の組み合わせは数字だけでなくコンピュータに対する命令を記述するのにも使われます。この場合先の回答にあるように0をOFF、1をONと考えると単なるスイッチの集合体と見なすことが出来ます。「010101・・・」という命令なら1番目のスイッチをOFF、2番目をON、・・・と設定した組み合わせをコンピュータに入力する訳です。それが終われば次の命令、つまり別のスイッチの組み合わせを入力し、これが延々と続きます。 コンピュータはこうしたスイッチの切替えで動くように設計された機械なのです。そういう設計になっているからにはこの機械語を無くすことは出来ません。C言語などのプログラム言語は人間が理解できる言葉からこのスイッチのパターンを作り出すための工夫です。 これも先の回答にありますが、Basicなどのようにプログラム言語で入力すれば動くようにすることも可能です。が、その場合実行するプログラムとは別に機械語への翻訳ソフトも動いているので動作が遅くなります。 > 人間が分かりやすいC言語などを直接理解できるように開発すればいいのではないでしょうか? ハードウェアレベルでプログラム言語を使えるようにするのは不可能でしょう。少なくとも私にはどうすればよいのか見当が付きません。仮に巨額の開発費と長い時間を費やして開発できたとしてもC言語用に開発されたものはC言語しか理解できません。従い他のプログラム言語用の翻訳ソフト(コンパイラー)を新たに開発する必要が出てきます。つまり基本的な仕組みは今と変わりません。
その他の回答 (8)
- Microstar
- ベストアンサー率21% (289/1367)
ある大手電機メーカーでマイクロコンピュータのパターン設計をしたことがあります。 CPUはその中にあるイントラクションデコーダーが2進数のコードを読取って、あてはまる信号を出力して、動かすようになっています。 機械語というのは、多数の2進数のコードは読みづらいので、16進数に直したものです。 C言語は人間がプログラムしやすようにした言語ですので、実際はC言語、BASICは機械語へコンパイルして、メモリに登録して動かします。 もしC言語から機械語まで細かく人間が手作業で変換するとなると大変ですので、あるプログラムを使って、コンパイルしているのです。 人間の脳が処理できる理由はわからないので、その辺は他の回答に任せます。
- u-bot
- ベストアンサー率58% (1736/2988)
まず質問内容からすると人間の脳は言語をそのまま理解していると考えているようにみえます。 私はその仮定がまずおかしいと思います。 脳は神経ネットワークで構成されています。 神経から別の神経への情報伝達はシナプスから出た化学物質を受容体で受け取ることで行われています。 シナプスの分泌度量や神経の接続構造が個人によって異なるため思考の違いに現われます。 この内容を読んで人間は言語をそのまま理解していると思いますか? 受容体の働きは単純で化学物質に反応するかしないかなので、デジタルの0と1に似ています。 実際は受容体の個数が多いためアナログ的な反応になりますけど。 つまり極論を言えば人間の脳もCPUと同じ機械語レベル程度の簡単な処理で動いているのです。 しかし人間は自分の脳の中で起きている反応をそこまで分解して認知できないので一見言葉をそのまま理解しているように思えるのです。 では何故コンピュータが人間の脳のような動作ができないのか? それにはいくつか理由があります。 ・演算処理の速度と正確さを重視している ・命令通りに動作することを重視している ・脳を似せるだけの情報ネットワークを作り上げるのが現状は困難 ・効果的な学習機能(フィードバック制御)の論理が確立していない 人間の脳の構造に似せたニューロンネットワークによる人工知能の研究が一昔前に盛んでした。 しかし学習が安定しない、つまり学習を積み重ねても精度が向上せず逆に間違いが多くなるという問題を解決できず、今はあまり話題になりません。 まあ将来に期待というところです。 シナプスの解説 http://www.brain.riken.jp/jp/aware/synapses.html
- ちあき(@Chiaki-F)
- ベストアンサー率49% (576/1153)
考え方を変えてみて下さい 人間の脳だって直接C言語を理解出来るわけじゃありません 言語を見てそれを動作に置き換えて理解しているだけです もしかしたら脳の内部では機械語みたいなものに置き換えて 動作しているかもしれませんよ コンピューターだってC言語のソースを入れると自分の動作に 変換して実行しています 人間の脳だって電気信号ですので基本は同じですよ 人間の脳だって元は何も理解していません 学習という名前の記憶をすることで言葉や動作を覚えて それを元に動いているだけですね コンピューターだって記憶している内容によって動きます コンピューターがマシン語を理解できるのは 最初からそのように回路を作っているし 内部に最初から小さなプログラムも入っています 言語なんて多種多様ありますので どれかに特化したCPUを作っても不便なだけです それよりもマシン語を理解出来るようにして 多種多様な言語はコンパイルって方式を採用する方が 汎用性がありますね
- unipoco
- ベストアンサー率56% (58/103)
CPUが理解できるのは電気信号Hi/Lowの2個です。機械語と呼ばれているものも人間が電気信号を読めないので2進数でHi/Lowを表したものや、2進数を4個セットにして16進数表記にしたものです。ってことで、CPUが機械語を理解できているわけではなく、信号のHi/Lowを読み込んでいるだけなんです。読み込んだ信号によって決められた動作をします。動作の内容は命令セットによって決められています。 もっと人間が理解しやすい言語を直接読めるようにするには如何すればいいのか…そもそも、Hi/Lowしか解らないから駄目なんだと思う。文字数の少なそうなやつ、アルファベット26文字、数字0-9まで10文字、これを理解するのには36種類の電気信号を読み取れないと駄目ですね。んー… 多分無理。
- ymmasayan
- ベストアンサー率30% (2593/8599)
極く簡単に言うとCPUと機械語は同時に設計されます。 と言うことでCPUと機械語は分離不可能な関係です。 これがCPUを最も効率よく働かせる方法です。 実はBASICのようにインタープリターと言って 人間の書いた言語をそのままコンパイル無しに 実行する方法もあるのですが話しにならない位 遅いのです。 例えれば通訳を何人も介して会話をするようなものですね。 人間にわかりやすい言語と機械にわかりやすい言語の間に 大きな隔たりがあるので この溝を埋めるのにコンパイルと言う方式をとって 両方幸せにしているのです。 余談ですが、コンピュータの黎明期にはプログラムや データはスイッチでコンピュータに入力していました。 機械語でプログラムを組んでそれを入力すると言う 気の遠くなるような仕事でした。 当時はそれが当たり前と思って仕事してましたが。 恐らく信じてもらえないでしょうね。
- Caryo_t
- ベストアンサー率45% (112/246)
例え話となり、失礼かもしれませんが、コンピュータをオルゴール考えれば理解していただきやすいかと思います。 CPUをオルゴールの鍵盤とするなら、電気信号は、オルゴールのトゲトゲした回転体です。ただし、この回転体はとても簡単なつくりをしていて、トゲが数本しか生えていません。 そんな回転体でも、ぐるっと回せばオルゴールは鳴ります。もちろん、回転体を取り替えれば別の音が鳴ります。さらに、音を繋ぎ合わせれば曲だって奏でられます。でも、これはオルゴールが曲を「理解している」わけではありません。 さて、このオルゴールですが、曲を奏でるたびに回転体を取り替えるのは大変です。そこで、回転体を予め沢山用意しておき、これを「自動取替え装置」が入れ替えてくれるようにしたとしましょう。これで随分楽になります。 ただ、自動取替え装置に入れるための回転体は、前もって自分で並べておかなければいけません。たとえば「エリーゼのために」を奏でたければ、その音符の数だけ並べます。この作業は、まさに職人技です。だって、どの回転体が、どの音に対応しているのか理解していなければいけないからです。ともあれ、こうやって並べられた多くの回転体の集まりが、機械語です。そして、自動取替え装置がソフトウェアというわけです。 さて、こうして少しは便利になったオルゴールですが、残念ながらオルゴールごとに、それぞれオリジナルの自動取替え装置(ソフトウェア)が必要だというネックがあります。だって、大きなオルゴールと小さなオルゴールでは、鍵盤の大きさも回転体の大きさもバラバラなんですから(コンピュータで言うならば、CPUの能力が違えば、行なえる処理が違ってくるということです)。 そこで、楽譜を書いてやれば、あとはそれを元にして、オルゴール&自動取替え装置にピッタリ合った回転体を自動的にセットしてくれる「全自動楽譜解釈装置」が開発されるわけです。この装置、漢字で書くと長いので、解釈するという意味の英語を使って「インタプリタ」と呼ばれています。 こうすると、人間が解りやすく書いた楽譜を、インタプリタが回転体のセットとして組み立ててくれて、それを自動取替え装置がオルゴールの鍵盤に送るという流れが完成するわけです。 以上が、プログラムで処理を行なう(楽譜で曲を鳴らす)ということです。 楽譜をオルゴールの鍵盤に押し付けても、曲は鳴りません …などと最後に付け加えるのは蛇足というものですね。 もちろん、本物のオルゴールであれば、楽譜っぽいものが読めるものもあります。しかし、その場合には、そのオルゴール専用の楽譜が必要になります。つまり、また職人技が必要なのです。こういった悪循環を避けるために、人間は楽譜を描くことに専念し、あとはインタプリタが機械語に翻訳する仕組みを採用しているのです。 オルゴールの鍵盤は、
cpuはなぜ機械語を理解できるのでしょうか? >>機械語の命令を実行するように作ってあるのがCPUです。 人間の脳とはちがうものだとは思うのですが・・・? >>人間の脳のように知能は持ちません。命令を実行するだけです。 OSがコンピュータへの入出力やデータの保存やプログラムの実行を管理しています。 言語は、OS上で動作するように作られたものです。 人間が分かりやすいC言語などを直接理解できるように開発すればいいのではないでしょうか? >>C言語は、機械語を人間が理解しやすいようにするための言語のうちの一つです。 なお、プログラミング言語はたくさん有ります。 C言語で書いたソースプログラムは、一端機械語変換(コンパイル)して、 OSの機能やライブラリなどとリンクさせることにより、初めて、 一つの実行できるプログラムになります。 C言語を直接実行するようなシステムを作成しても何の意味も有りません。 時間の無駄遣いをするだけですね。
- heyboy
- ベストアンサー率21% (1852/8731)
考え方がそもそも間違っていますよ CPUはどのアドレスの数値を足したり引いたりアドレスの数値を 交換などの作業をしているに過ぎません それをOSやプログラミング言語で人間にわかりやすくしているだけです。
お礼
みなさま本当にありがとうございました。非常に興味深く読ませていただきました。