プロが教える店舗&オフィスのセキュリティ対策術

プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。

■C言語で書いたプログラム

■コンパイラ

■マシン語

■CPU

だと思うのですが中でどのように処理されているかがよく分かりません。

あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。

色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

A 回答 (4件)

> あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。

この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?

前者はマシン語によるプログラミングではなく、アセンブリ言語によるものですね。
基本的にどちらも目的は同じですが、プログラミングに使用する言語が異なります。アセンブリ言語に比べてC言語の方が記述が楽になりますし、異なるCPUへの移植も容易になります。
また、コンパイラによっては、C言語から一旦アセンブリ言語に翻訳し、それからアセンブラを通してマシン語に変換しています。

> 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

本やサイトで勉強するのもよいですが、一番お勧めなのは、実際にアセンブリ言語でプログラミングしてみることです。
PC等ではアセンブリ言語だけでプログラミングするのは至難の業ですし、仮にできたとしても全貌が見える分けではありません。できれば8~16ビット程度のマイコンボードを使った方がよいでしょう。

秋月電子通商(http://akizukidenshi.com/)で数千円~1万円程度でマイコンボードが売られているので、それを使ってみてはいかがでしょうか?
他には、オークス電子(http://www.oaks-ele.com/)でもそれぐらいの金額でマイコンボードを入手できます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>コンパイラによっては、C言語から一旦アセンブリ言語に翻訳し、それからアセンブラを通してマシン語に変換しています。

なるほど、二重の工程を踏んでいるものもあるのですね。よく分かりました。ということはマシン語は全CPU共通なのでしょうか?それともコンパイラが各CPUに会わせてコンパイルしているのでしょうか?windowsならintelやAthlon

マイコンですか、楽しみながら勉強できそうですね。機会があれば買ってみたいと思います。

お礼日時:2005/03/04 03:03

#2です



> ということはマシン語は全CPU共通なのでしょうか?それともコンパイラが各CPUに会わせてコンパイルしているのでしょうか?windowsならintelやAthlon

マシン語はCPUごとに全て異なります(同じシリーズのものであれば、互換性のあるものも存在します)。

AthlonはIntelのx86と互換性があるように設計されていますので、同じコンパイラで、それらに共通であったり、あるいはいずれかに特化したコードを出力できるようになっている場合が多いようです。
ただし、こうした状況は例外的で、普通は別のコンパイラが必要になります。具体的には、x86, PowerPC, 680x0, MIPS, M16C, H8, SuperH, SPARC, ARM, V850等々は全く互換性がありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/05 01:51

「コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~」




「プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識」

おすすめです。

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4822281 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

お礼日時:2005/03/04 03:06

C言語に限らず,どのプログラミング言語(コンパイラ言語)でもだいたい,同じで(簡単に書けば)



■C言語で書いたプログラム

 ←コンパイラ(によるコンパイル)

■マシン語

CPU

です。これに対して,アセンブリ言語はニーモニックコードを用いてプログラムします。

■アセンブリ言語(ニーモニックコード)で書いたプログラム

 ←アセンブラ(によるアセンブル)

■マシン語

CPU

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

参考URL:http://home.netyou.jp/gg/ugpop/index.htm
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/04 02:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!