基本的には、オペレーティングシステムの違いにもかかわらず、x86プロセッサを搭載したコンピュータで動作するプログラムを書くために機械語またはアセンブリ言語を使用できるかどうかを知りたいと思っています。たとえば、プログラムを実行していて、どのコンピュータであっても、「Hello、World!」と表示されます。 これらの言語のどちらかを知りたいと思うのはちょっと夢中ですが、私は学ぶのは信じられないことだと思っています。一般的にはアセンブリ言語または機械語で書くと、プログラムは互換プロセッサを搭載したコンピュータで動作しますか?
答えて
、第
別のOSのAPI関数ごとに異なるサポートを持っており、異なるアドレスで異なるハードウェアをサポートします。
プラットフォームの最大量をカバーしたい場合は、Javaがおそらく行く方法です。
要するに、
オペレーティングシステムは、通常、バイナリプログラムの最初のバイトの実行を開始しません。代わりに、アプリケーションのアドレス空間を設定します。これには、呼び出しスタックの大きさ、定数にあらかじめ割り当てたい値、バイナリファイルのどの部分を実行可能ファイルとしてロードするかなどが含まれますコードではなく、書き込み可能なデータです。
バイナリプログラムがオペレーティングシステムにどのようにアドレス空間を設定したいかを指示する方法は、オペレーティングシステムによって異なります。
はい、いいえあなたの答えです。あなたは、x86アセンブリを書くことができ、それはLinux、Mac OS X、およびMS Windowsでも同じことをするでしょう...しかし、同じことをすれば、文字通り、同じ場所からデータを取り込み、同じことを実行しますそれをメモリのどこかに戻して保存します。
このようにして、すべてのプラットフォームで同じように高速の3D演算や何かを実行できますが、アセンブリルーチンにデータを出し入れする方法と、それを使用する方法はすべて異なりますプラットフォーム。どのOSでもhello worldを "表示"することはできませんが、 "hello world"(または変換された頂点のセット)をどこかのメモリに入れておけば、OS特有のコードで引き抜くことができます。あなたは、その後、答えはノー実際のスタンドアローン実行可能なバイナリである場合
は
「それは依存します」。しかし、アセンブリのスニペットを書こうと思っている場合は、それを大きな実行可能ファイルに埋め込みます。答えは「はい」です。しかし、アセンブリコードのそのブロブ内のOS固有の機能を呼び出すことは許されません。ですから、おそらく、複数のオペレーティングシステムで "Hello world"をプリントアウトする1つのアセンブリプログラムを作成するというこの夢を実現することはできません。
いいえ、プログラムはオペレーティングシステムによって大きく異なります。 「Hello、world!」などの出力を書き込むには、プログラムは一般にオペレーティングシステムに要求を出します。通常、プログラムは、要求の引数をオペレーティングシステム(例えば、$ eaxレジスタ)によって指定された場所に置き、オペレーティングシステムからサービスを要求する命令を実行する。
オペレーティングシステムの要求は、通常、番号または同様の方式でコード化されます。したがって、出力ストリームに文字を書くことを要求するには、$ eaxに1つの数値を入れます。ファイルを開くには、別の番号などを使用します。明らかに、コードはオペレーティングシステムによって異なります。 (これらの要求は、通常、ライブラリ呼び出しでラップされます。ライブラリを "write"のように呼び出すと、上で説明したのと同様のことを行うための指示が含まれます。)
「自分でやって」ハードウェアを操作して画面に書きたい場合でも、いくつかの問題があります。 1つは、オペレーティングシステムがハードウェアにアクセスできるようにすることです。最近のシステムのほとんどは、ユーザーモードプログラムがハードウェアに直接アクセスするのを防ぎます。 2つ目は、特定のハードウェア用にプログラムを設計する必要があることです。たぶん、文字を送ることができる古いスタイルのBIOSがあります。あるいは、おそらくシステムに最新のファームウェアがあります。異なるファームウェアまたはCPU外のさまざまなコンポーネントを操作するには、さまざまな方法が必要です。
つまり、いくつかの異なるオペレーティングシステムで動作するアセンブリ言語プログラムを書くことは不可能ではないかもしれません。 FORTRANとCの両方のように、複数の高水準言語で同時に書かれたプログラムがいくつかあります。例えば、プログラムはFORTRANのコメントであることを示す列の "C"で始まりますが、最初の行は有効ですCコード。そして、そのCコードはコメントを開始することができます。後続の行は、FORTRANコードとCコメントまたはFORTRANコメントとCコードのいずれかになるように配置されます。 2つの異なるオペレーティングシステムが実行可能ファイルとしてそれを受け入れ、 "Hello、world!"という文字を出力するように、実行可能ファイルと同様のことを行うことは可能かもしれません。それぞれの上に(または、より良いことに、それぞれ別の何かをする)。
生のバイナリファイルであるため、DOS .COM形式はこれに適しています。別のシステム用の実行可能ファイルの最初の数バイトがジャンプ命令を表すバイトであれば、.COMファイルはファイル内の他の場所にジャンプする可能性があります。そこでは、好きなバイトそれ以外のファイルは他のシステムの実行可能ファイルです。
これはもちろん、実行可能ファイルを設計する意図された方法ではなく、簡単な作業ではありません。
バロニー。 x86コンピュータのMACHINE LANGUAGEはマシン間で変更されません。彼らがやっていることは、プログラムが「hello world」よりも何か関与していることを望むなら、命令を追加することです。例えば、h/wがページングをどのように処理するかによって少し違うでしょう。ラムの中で飛び回らなかった小さなプログラムは、それぞれほぼ同じであろう。
- 1. プログラミング言語コンパイラは、最初にアセンブリに変換するか、直接機械語に変換しますか?
- 2. 互換性:Android 2.2を搭載したアプリケーションは、Android 2.0または2.1を搭載した携帯電話で動作しますか?
- 3. 8086アセンブリ言語は最新のCPUで動作しますか?
- 4. 言語の厳密なスーパーセットで書かれたプログラムは多言語としてカウントされますか?
- 5. buffer [100] = {0、}を使用した初期化はどのようにC言語で動作しますか? C言語で書かれたプログラムのロードデータ部に
- 6. さまざまな言語で書かれたプログラム間のデータ交換
- 7. Jarは作成したコンピュータではなく、別のコンピュータで動作します
- 8. PyBluezはAndroid搭載端末で動作しますか?
- 9. アセンブリ言語を使用した128ビットシフト?
- 10. C言語の単純なプログラムは動作しません。
- 11. Windows 10を搭載したラズベリーパイは、Visual Basicプログラムを実行できますか?
- 12. 「オートメーション互換言語」とは何ですか?
- 13. メリット、デメリット、そして難しい言語を書くために言語を書くこと。
- 14. NSLocalizedString()Swiftは指定された言語でしか動作しません
- 15. Duffのデバイスは他の言語でも動作しますか?
- 16. アセンブリ言語は危険ですか?
- 17. asp.netの言語互換性
- 18. クロスコンパイラC言語でのバイナリ互換性
- 19. free()はC言語では動作しません
- 20. else文はC言語で動作します
- 21. プログラミング言語でコンパイラを作成するために必要な言語機能は何ですか?
- 22. 共通言語ランタイムはDynatraceで無効なプログラムを検出しました
- 23. MIPSを第2のアセンブリ言語として学びますか?
- 24. x64プロセッサを搭載したLinuxでShellCodeを実行する方法。
- 25. LC3アセンブリ言語
- 26. アセンブリ言語
- 27. アセンブリ言語イントロ
- 28. アセンブリ言語コプロセッサ
- 29. PHPで書かれた言語パーサーライブラリ
- 30. Monoと互換性のある機能言語
私の主要なプログラミング言語はjavaです。私はそれを楽しむためにアセンブリを学んでいます。 – user663425