• ベストアンサー

cpu 機械語

Raiderlandの回答

  • ベストアンサー
回答No.7

> CPUは機械語を理解してコンピュータを動かすと聞いています。cpuはなぜ機械語を理解できるのでしょうか? 多分「機械語」という言葉から間違ったイメージを持たれていると思います。機械語というのは人間が便宜上そう呼んでいるだけで別に言葉ではありません。 コンピュータの世界では2進法が使われていることはご存知ですよね。0と1を使って数字を表す訳ですが、この0と1の組み合わせは数字だけでなくコンピュータに対する命令を記述するのにも使われます。この場合先の回答にあるように0をOFF、1をONと考えると単なるスイッチの集合体と見なすことが出来ます。「010101・・・」という命令なら1番目のスイッチをOFF、2番目をON、・・・と設定した組み合わせをコンピュータに入力する訳です。それが終われば次の命令、つまり別のスイッチの組み合わせを入力し、これが延々と続きます。 コンピュータはこうしたスイッチの切替えで動くように設計された機械なのです。そういう設計になっているからにはこの機械語を無くすことは出来ません。C言語などのプログラム言語は人間が理解できる言葉からこのスイッチのパターンを作り出すための工夫です。 これも先の回答にありますが、Basicなどのようにプログラム言語で入力すれば動くようにすることも可能です。が、その場合実行するプログラムとは別に機械語への翻訳ソフトも動いているので動作が遅くなります。 > 人間が分かりやすいC言語などを直接理解できるように開発すればいいのではないでしょうか? ハードウェアレベルでプログラム言語を使えるようにするのは不可能でしょう。少なくとも私にはどうすればよいのか見当が付きません。仮に巨額の開発費と長い時間を費やして開発できたとしてもC言語用に開発されたものはC言語しか理解できません。従い他のプログラム言語用の翻訳ソフト(コンパイラー)を新たに開発する必要が出てきます。つまり基本的な仕組みは今と変わりません。

gklkjoo
質問者

お礼

みなさま本当にありがとうございました。非常に興味深く読ませていただきました。

関連するQ&A

  • CPUによって機械語だかアセンブリ言語が違うという

    CPUによって機械語だかアセンブリ言語が違うという解説をしている記事があったんですが CPUによってというのは、 intel sandylakeとAMD ryzen 3700x と使い分けろ という意味ではなく 32bit対応CPUintel pentiumと64bit対応CPUintel sandylake とで使い分けろという意味ですか?

  • ポケコンの機械語(マシン語)

    1986年に工学社より「シャープポケットコンピューター機械語活用マニュアル」という本が出ておりますが、シャープのポケコンのどの機種の機械語について書かれているか、また内容・項目はどんな感じなのかをご存知の方はお教えください。 以上、よろしくお願いいたします。

  • コンパイルしたらマシン語になる?

    基本的な質問かもしれないのですが: ●プログラミング言語をコンパイルしたらマシン語になるのでしょうか? ●マシン語になるとしたら、なぜ、Windowsのgccでコンパイルした実行ファイルはUnix上で動かないのでしょうか? C言語などのプログラミング言語は人間が理解できる言葉で書かれていて、これをマシン(例えばIntelのCPU)が理解できる言葉に変換するのが「コンパイル」だと今まで私は理解していました。だから、IntelのCPU上でコンパイルした場合、他のCPUでは動かないのだと納得していました。 しかし、IntelのCPUが理解する言葉になるのであれば、WindowsでコンパイルしてもUnixでコンパイルしても IntelのCPUの言葉になっている点で変わりがないような気がします。しかし、Windowsでコンパイルした実行ファイルはUnixでは動かないですよね。私は根本的な勘違いをしていると思うのですが、それが何かを教えて頂けると幸いです。

  • コンピュータの発展について

    特にパソコンについて。 新しいCPUやOSが開発されるたびに思うのですが、過去のソフトウェア財産が足かせになって、斬新で高性能なCPUやその他のハードウェアの開発の進展が遅れていると思うのですが、実際はどうなのでしょうか。 私はコンピュータの技術者ではありません。 8086時代のアセンブラや、昔のC言語、8ビットのZ80の機械語しか知らない過去の人間です。今風のコンピュータ関連で理解できるのはPICマイコンくらいです。 しかし、現在のWindowsXPや、おそらくVistaの次のOSでも、昔作成したプログラムがエミュレータなしで動作すると思われます。ある意味驚きです。 このような遺産の引継ぎは新しい技術の開発にどのように影響しているのでしょうか?大変興味あります。

  • C言語をCPUに読み込ませるためには、 C言語か

    C言語をCPUに読み込ませるためには、 C言語からアセンブリ言語にコンパイルして、 アセンブリ言語からアセンブルして機械語2進数にしてCPUに読み込ませるという 2段階をしないといけないんですか? 下記の画像のように説明している動画がありました

  • CPUの構造を理解する意味は?

    CPUの構造を理解する意味は? よくプログラムの勉強をするときにCPUの内部構造である制御装置、演算装置、レジスタなどの解説があって、さらにそれらがどういう繋がりがあって、どうお互いを利用しているか、ということを説明する本に出会います。 しかし実際アセンブリ言語で開発しようという人間以外に、誰がこの知識を必要とするのか全くわかりません。 C言語以上の高級言語を使用するのであればこれらの知識は不要ですよね?? ※C言語の勉強でメモリーの構造を理解する必要があるのはわかります。

  • 機械の開発を思いついたけど今後どうしたらいいかわかりません

    機械の開発を思いついたけど今後どうしたらいいかわかりません ある簡単な機械を思いつきました。こういうモノが世の中にあったらいいなーみたいな感じのものです。それを作りたいんですが、工学部をでているわけではないので、機械の組み付けなど全くわかりません。どこかに依頼したいのですが、どうやって機械を組み付けてくれる会社を探したらいいんでしょうか?

  • 機械語に直すことについて。

    (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret これのintと movとxor の機械語が分かりません。後、retの機械語が、farなのかnearなのかも分かりません。教えていただけないでしょうか?すみません。

  • 最初のアセンブラ

    人間がハンドアセンブル際にアセンブリ言語と機械語の対応表を見比べて翻訳する作業を、コンピュータの黎明期に機械語で最初に作られたアセンブラはどのように行っていたのかということを教えて下さい。 プログラミング言語の歴史を考えてみると、(フォン・ノイマン型)コンピュータの黎明期では全てのプログラムは最初人間が直接真空管やディップスイッチのオン/オフを切り替えることで、機械語でプログラムを入力していたと思います。その後アセンブラが開発されたことで、人間はパンチカードやカセットテープなどを通してアセンブリ言語でプログラミングを行えるようになったと聞きました。 アセンブリ言語は機械語と1対1で結びついたもので、アセンブラはアセンブリ言語を機械語に翻訳するのだと言うことは分かります。しかし、パンチカードやカセットテープで入力したアセンブリ言語も、コンピュータにとっては根本的には0/1(スイッチのオン/オフ)という点では変わりはなく、最初のアセンブラはその0/1をどのようにして正しい機械語の0/1に変換することが出来たのでしょうか? 少し質問の意味が分かりにくいかもしれませんが、例えば MOV B, A //Bレジスタの内容をAレジスタに送る といったアセンブリ言語は、機械語では 01000000 に相当するかもしれません。しかしコンピュータがパンチカードを読み込んだ時点では 01010100 といった信号として入力されるとしたら、機械語で最初にアセンブラを作成した人はどのようにしてそれを適切な機械語(ここでは01000000)に翻訳出来たのでしょうか? 想像では最初に機械語で非常に超簡単なアセンブラの原型とも言えるプログラムを作って、それを元にした簡単なアセンブリ言語(の原型)でより高度なアセンブラを作る、といったことを繰り返していまのアセンブラが開発されていったと思いますが、では最初のアセンブラの原型とはメモリ上ではどのように実現されていたのか、ということが気になったので質問させていただきました。アセンブリ言語で実際にプログラムのイメージはこんな感じでは?ということを書いて下さっても構いません。 よろしくお願い致します。

  • 半導体が機械語を出力する仕組みを教えて下さい。

    半導体の元となるシリコンやゲルマニウムが電流が流れることによって、パソコンなど人間が理解できる言語に到達するまでの過程がよくわかっておりません。 機械語→アセンブリ言語(低級言語)→プログラミング言語(高級言語) という簡単な流れは知っているのですが、機械語より前の過程がわかりません。 学生時代電波について軽く習ったときに、電波は波を流した瞬間と流していない瞬間?で0と1を区分すると聞いた覚えがあります。 半導体でも同様に電流を制御することによっても同じことをしているのでしょうか。 仮に電流の放出の状態によって0と1を区分しているとして、そこから 人間が理解できる文字、少なくとも0や1を表示するためにはメモリに0と1を覚えさせなければいけないと思うのですが、ただの物体にどうやって文字を覚え込ませるのでしょうか。 おそらく所々歯抜けのような状態で質問しているものと思いますが、初学者向けに関連書籍やWebページなどあればご教授願いたいです。