• ベストアンサー

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

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

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

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

Cのソースファイルを対象引数にして、gccやclangを叩くと「Build」が走ります。 「Build」はプリプロセッサ・コンパイラ・アセンブラ・リンカを順次起動して、 ソースを実行可能ファイルに変換します。  ※この実行ファイルを叩くと機械語命令がCPUにロードされます。 普通のプログラマが意識する必要はありません。 貴殿がコンパイラを作ろうと思っているなら、 これらのメカニズムの実質を習得しないといけないでしょう。

okwaveokw
質問者

お礼

ありがとうございます

その他の回答 (2)

回答No.2

ごめん^^間違ってないかも^^ C言語をコンパイルした結果が、アセンブリ言語 って言いたかっただけなんですが。 >C言語からアセンブリ言語にコンパイルして、 これでも、意味としては同じですね^^ ちょっと、グダグダでごめん!

okwaveokw
質問者

お礼

ありがとうございます

回答No.1

ちょっと違います。 >C言語からアセンブリ言語にコンパイルして、 C言語を「コンパイル」して、内部的にアセンブラになりますが。 この工程は意図的にソース出力をしない限りは Object:オブジェクトファイルという中間形式になり、 それをLink:リンクすることで、実行ファイルになります。 通常WindowsやMS-DOSなどでは、COMやEXEファイルという 拡張子のファイル。 C言語で作ったものは、基本的にはOSがないと 読み込めないのですが、読み込んだデータ自体は 確かにC言語を「コンパイルしたプログラムである」 のですが、 C言語のソースをそのままでも、コンパイルしてでも CPUが読んでいるというより、OSによって CPU内のメモリに配置されているというニュアンスの方が 適切かもしれません。 その後、CPUのインストラクションポインター(次に実行する命令の位置)をそこにあわせると実行開始!という感じに。 なぜなら、COMファイルやEXEファイルを読み込んでくれる 母体=OSがないとこれらを読み込むことすらできない為です。 「なんで?」そのファイルは、「ファイル」なので、 CPUではなくDISKにいます。それをDISKからCPUに転送 しているのは、別のプログラム=OSだからです。 ただし、ROM化用コンパイラというものもあり、 通常のコンパイラーと、少しだけ違い、 直接OSや、IPLを経由せずROMに 書いて実行できるケースもあります。 この場合は、ファイルではなく、ROMに直接焼き付ける為 ファイル名がBINなどになるのですが、 一般の人はそこを触ることはほぼないと思います。 一般人が使っているのは、OS内のローダーが COMやEXEファイルを、読み込んでくれて、 実行準備をしてくれた後、実行していた!。 と、思ってよいかと。

okwaveokw
質問者

お礼

ありがとうございます

関連するQ&A

専門家に質問してみよう