• ベストアンサー

プログラミングを突き詰めて考えると難しい

プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。 ■C言語で書いたプログラム ↓ ■コンパイラ ↓ ■マシン語 ↓ ■CPU だと思うのですが中でどのように処理されているかがよく分かりません。 あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか? 前者はマシン語によるプログラミングではなく、アセンブリ言語によるものですね。 基本的にどちらも目的は同じですが、プログラミングに使用する言語が異なります。アセンブリ言語に比べてC言語の方が記述が楽になりますし、異なるCPUへの移植も容易になります。 また、コンパイラによっては、C言語から一旦アセンブリ言語に翻訳し、それからアセンブラを通してマシン語に変換しています。 > 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか 本やサイトで勉強するのもよいですが、一番お勧めなのは、実際にアセンブリ言語でプログラミングしてみることです。 PC等ではアセンブリ言語だけでプログラミングするのは至難の業ですし、仮にできたとしても全貌が見える分けではありません。できれば8~16ビット程度のマイコンボードを使った方がよいでしょう。 秋月電子通商(http://akizukidenshi.com/)で数千円~1万円程度でマイコンボードが売られているので、それを使ってみてはいかがでしょうか? 他には、オークス電子(http://www.oaks-ele.com/)でもそれぐらいの金額でマイコンボードを入手できます。

standalone
質問者

お礼

回答ありがとうございました。 >コンパイラによっては、C言語から一旦アセンブリ言語に翻訳し、それからアセンブラを通してマシン語に変換しています。 なるほど、二重の工程を踏んでいるものもあるのですね。よく分かりました。ということはマシン語は全CPU共通なのでしょうか?それともコンパイラが各CPUに会わせてコンパイルしているのでしょうか?windowsならintelやAthlon マイコンですか、楽しみながら勉強できそうですね。機会があれば買ってみたいと思います。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

#2です > ということはマシン語は全CPU共通なのでしょうか?それともコンパイラが各CPUに会わせてコンパイルしているのでしょうか?windowsならintelやAthlon マシン語はCPUごとに全て異なります(同じシリーズのものであれば、互換性のあるものも存在します)。 AthlonはIntelのx86と互換性があるように設計されていますので、同じコンパイラで、それらに共通であったり、あるいはいずれかに特化したコードを出力できるようになっている場合が多いようです。 ただし、こうした状況は例外的で、普通は別のコンパイラが必要になります。具体的には、x86, PowerPC, 680x0, MIPS, M16C, H8, SuperH, SPARC, ARM, V850等々は全く互換性がありません。

standalone
質問者

お礼

なるほど、それぞれにコンパイラが必要なのですね。 ありがとうございました

  • keikan
  • ベストアンサー率42% (75/176)
回答No.3

「コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~」 と 「プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識」 おすすめです。

参考URL:
http://www.amazon.co.jp/exec/obidos/ASIN/4822281655/qid=1109862699/ref=sr_8_xs_ap_i1_xgl/250-9969086-9317803
standalone
質問者

お礼

回答ありがとうございます。 本屋で探してみたいと思います。本の評価を見ると初心者にもプロにもとても役にたつ本のようですね。

回答No.1

C言語に限らず,どのプログラミング言語(コンパイラ言語)でもだいたい,同じで(簡単に書けば) ■C言語で書いたプログラム ↓  ←コンパイラ(によるコンパイル) ↓ ■マシン語 ↓ CPU です。これに対して,アセンブリ言語はニーモニックコードを用いてプログラムします。 ■アセンブリ言語(ニーモニックコード)で書いたプログラム ↓  ←アセンブラ(によるアセンブル) ↓ ■マシン語 ↓ CPU ですから,形の上ではそっくり同じです。  C言語など一般のプログラミング言語では,(あえていえば)どのCPUを用いるかはプログラミングの時点では考慮する必要がありませんが,アセンブリ言語(アセンブラ言語ともいう)ではどのCPU用の(専用の)ニーモニックコードを用いるかを最初から考えなければなりません。  下記サイト「分かりやす~いコンピュータ技術情報」の「簡単なアセンブラ言語(全19回)」が参考になるでしょう。  書店でも入門用のテキストが何種類も見つかると思いますが・・・

参考URL:
http://home.netyou.jp/gg/ugpop/index.htm
standalone
質問者

お礼

返答ありがとうございます。このサイトは非常に分かりやすく説明されていました。 「ベテラン・プログラマやデータベースの専門家が,現在の複雑になったコンピュータ・システムの全体的な構造や技術を理解し,高い問題解決能力を発揮できるのはなぜだろうか。小さいシンプルなもので学び始め,コンピュータ技術の進歩とともに,これまでの経験で体得したレイヤー構造に当てはめながら,その技術の位置づけや概念を理解してこれらからではないだろうか」という文を読んで、勉強するにあたって上位構造だけではなく下位構造もしりたいと思いました。文系の私がIntelのデベロッパー向け資料を読んでみることになるとは夢にも思っていませんでした(汗

関連するQ&A