質問: こんにちは。 アセンブラについて調べていたら、機械語はどのようなCPUを使っているか等に強く依存するので互換性が低いということを知ったのですがそれについて疑問な点があったので質問させてください。 ### 疑問点 1 **コンパイルされ機械語になった時点でほかのCPUとの互換性が無くなるのか?** コンパイルされたC言語などの実行ファイルは機械語で出来ておりCPU等に依存するかと思いきや、EXEファイルであればどのCPUを積んだWindwosでも動くので互換性が無くなっているように感じないのですが、最初に書いたように機械語に互換性が無いのであれば動くはずがないということになります。 この質問の答えが「無くなる」だった場合次の質問にお答えください。 ### 疑問点 2 **コンパイルされた"機械語"であれば、なぜEXE等の機械語で配布して動かすことができるんでしょうか?** たとえばSkypeの配布サイトではOSごとにリンクがあるのみで"Intel86はこちら"などのリンクがないのはなぜでしょうか? ある程度の互換性の無さを超える方法があるのでしょうか? まだよく機械語についてよくわかっておりませんのでわかりにくい文章になってしまい申し訳ありません。 ご回答お待ちしております。 皆さんとてもわかりやすいご回答ありがとうございました。 ベストアンサーを一人しか決められないのはとても心苦しいのですが、ベストアンサーを決めさせていただきました。
回答: こんにちは。 > > コンパイルされたC言語などの実行ファイルは機械語で出来ておりCPU等に依存するかと思いきや、EXEファイルであればどのCPUを積んだWindwosでも動くので互換性が無くなっているように感じないのですが > > > おお、面白い着眼点ですね。 異なるCPUでもソフトウェア的に互換性のあるCPUも存在します。 それは、既存のソフトウェア資産を有効活用することが目的です。 Intelはそれを昔からずっと守り続けることでメジャーの座を維持することに成功したとも言えます。 AMDはインテル互換CPUで、Intelの牙城を一部乗っ取ることに成功しました。 しかし、IBM-PC互換機(今の一般的なPC)のCPUで走るコンパイル済のソフトは、AndroidやiPhoneのCPUでは走りません。そして、スマホは大抵ARM CPUなので、実は出荷数量で考えるとインテル非互換なCPUが大半です。 (スマホの方がPCの出荷台数よりはるかに多いですから。) > > たとえばSkypeの配布サイトではOSごとにリンクがあるのみで"Intel86はこちら"などのリンクがないのはなぜでしょうか? > > > Windowsは事実上Intel86とその互換CPUでしか走ってないからと思います。なのでWindows 10等の表示で十分かと。 また、マシン語にコンパイルされるようなソフトは、一般にOSのAPIと密接に絡むのでOSの指定は必須です。 Androidは様々なCPU上で走っていますので、単にAndroidと言うだけではマシン語へコンパイルされたソフトは走りません。でも、マシン語までコンパイルされていなければ良いわけです。Android用は多くの部分をJavaで書いているだろうと思いますのでマシン語ではないです。マシン語のパワーが必要な部分はAndroidが提供している標準機能を使っているだろうと思います。(他の方法もありますが、そちらは詳しくないので割愛)