マシンはバイナリコードをどのように解釈するのですか?私は理解していただきたいのは、あなたのコードが1と0に変わったからです。マシンはそれらを理解することができますが、どうやってそれをしますか?バイナリの翻訳には普通のテキストですか?マシンはバイナリをどのように解釈しますか?
答えて
最初に、「バイナリ」とはあなたが何を意味するかを意味するものではありません(テキストを含むコンピュータ上のすべてのデータは、すでにバイナリで表示され、処理する方法が異なります)。
第2に、コンパイルは面白いキャラクターへの単純な変換ではありません(そうであれば、言語ごとに異なるコンパイラーは必要ありません)。マシンコードを実際に理解するには、対象とするアーキテクチャを理解する必要があります。多くのコンピュータアーキテクチャがありますが、あなたのPCはその一つに過ぎません。非常に幅広いテーマであり、把握するためのコンピュータアーキテクチャの理解が必要です。
MIPS命令の例を示します。あなたが興味を持っているなら、読んで、実際の知識を得ることができます。私の記事の最後にあるリンクを試してみてください。
MIPSは、その命令フォーマットがより消化可能なものの1つであるため、人気のある導入対象です。 MIPS命令は32ビット幅です。 MIPSには、 "R"、 "I"、 "J"の3種類の命令があります。私は "私"の指示を見ていきます。
プロセッサが命令(32ビットのデータ)を取得すると、プロセッサは命令を読み込み、それをどのように処理するかを決定します。 「私は」命令は次のようになります。
|------|-----|-----|----------------|
opcode rs rt immediate
6 5 5 16 (the numbers show how wide are each part)
これらの意味:
- オペコードすることは、これは(:加算、減算、乗算および他の多く例えば)で、命令の種類を伝えます。すべての命令( "R"と "J"タイプを含む)は6ビットのオペコードで始まり、どのような種類のプロセッサであるかがわかります。
- rsおよびrtは、32ビット値を保持できるプロセッサのストレージの一種です。 MIPSはこれらのうち32個を有し、その数によって識別される。これはメモリと同じではなく、CPU自体の内部にあります。
- 即時は数字です。これは、その数がレジスタやメモリではなく、命令の中に「正しく」あるために呼び出されます。
レジスタに格納された番号に即時を追加の具体例:この例では
001000 00001 00010 0000000000000011
、Iは、上記のように部品に命令を破りました。
- オペコード:
001000
はaddi
を意味または「即時追加」の値の意味は以下の通りです。 - RS:
00001
小数で1
ので、命令のこの部分は、我々は1 としてRSを登録使用するプロセッサに指示します。 - rd:
00010
は、rsと同じ考え方の10進数で2
です。 - 即時:
0000000000000011
は、10進数で3
です。
addi
命令は、このように動作します:それは、RSで見つかった値を取り、それに即時値を追加します。その後、結果はrdになります。したがって、命令が完了すると、rdには3 + 2 = 5が含まれます。
コンパイラは、テキストを解析して、プログラムで実行したのと同じことを行うターゲットプロセッサの命令を生成します。ご覧のとおり、プログラマーが記述するプログラムのテキスト表現と実行可能なマシンコードとの間には大きな違いがあります。
MIPSおよびコンピュータ・アーキテクチャには、いくつかの便利なリソース:
あなたが求めているのは大きなテーマです。コンピュータとコンパイラの原則構築方法の概要については、優れた本The elements of computing systemsをお勧めします。それは非常に簡単に従うことができ、演習は楽しいです。そのほとんどは、提供されたリンクでオンラインで入手できます。
This questionにもリンクがあります。
考えるを再生することができますこちらです。各スイッチには、オフ(0)またはオン(1)のいずれかの8つの電源スイッチがあります。コンピュータには8つのスイッチすべてが1として表示されます。これはコンビネーションロックのようなものです。あなたのキーボード上の各シンボルは組み合わせています。
- 1. shootout.alioth.debian.orgの結果をどのように解釈しますか?
- 2. どのようにAndroidのANRレポートを解釈しますか
- 3. drupal URLをどのように解釈しますか?
- 4. パイロットヒストグラムビンはどのように解釈されますか?
- 5. JavaScriptはどのように解釈されますか?
- 6. 難解なAndroidのクラッシュレポートをどのように解釈しますか?
- 7. ブラウザはCSSをどのように解釈し、どのように処理されますか?
- 8. xmlの空ノードタグはどのように解釈され、ノードの存在は解釈されませんか?
- 9. これらの手順をどのように解釈しますか?
- 10. 3進C演算子は空の第1ブランチをどのように解釈しますか?どうして?
- 11. jqueryセレクタ、 "a + b + c + d"はどのように解釈されますか
- 12. PHPマクロ定義はどのように解釈されますか?
- 13. 仮想マシンはどのように機能しますか?
- 14. glewinfoの出力をどのように解釈すればよいですか?
- 15. sparsennの出力をどのように解釈すればよいですか?
- 16. vimまたはviがファイルをどのように解釈するかを変更します。
- 17. どのように解釈する:: Scalaの
- 18. このx86_64アセンブリのオペコードをどのように解釈するのですか?
- 19. ブラウザは "http:/"で始まる階層をどのように解釈しますか?
- 20. FullCalendarは定期的な予定をGoogleカレンダーからどのように解釈しますか?
- 21. ncvalの出力をどのように解釈するのですか?
- 22. `nodetool status`の出力をどのように解釈するのですか?
- 23. "Leaks" XCodeパフォーマンスツールの出力をどのように解釈するのですか?
- 24. iOS Instrumentsのデータをどのように解釈するのですか?
- 25. このRailsエラーをどのように解釈するのですか?
- 26. PyBrainどのようにnet.activateの結果を解釈するのですか?
- 27. Tomcat6、サービス停止イベントをどのように解釈するのですか?
- 28. バイナリをビルドし、それをUnixのいくつかのマシンで使うには?
- 29. リンクタイトル内の改行。検索エンジンはそれをどのように解釈しますか?
- 30. ファイルの特殊文字をどのように解釈するか?