マシンはバイナリコードをどのように解釈するのですか?私は理解していただきたいのは、あなたのコードが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. ジュリアは10:1をどのように解釈しますか?
- 2. shootout.alioth.debian.orgの結果をどのように解釈しますか?
- 3. どのようにAndroidのANRレポートを解釈しますか
- 4. アンサンブルツリーモデルをどのように解釈しますか?
- 5. drupal URLをどのように解釈しますか?
- 6. IO BusyをSybaseでどのように解釈しますか
- 7. Bourne Shellで$ {VAR#*:*:*}をどのように解釈しますか
- 8. パイロットヒストグラムビンはどのように解釈されますか?
- 9. JavaScriptはどのように解釈されますか?
- 10. 難解なAndroidのクラッシュレポートをどのように解釈しますか?
- 11. このマクロをどのように解釈できますか?
- 12. プロパティベースのテストコードをどのように解釈できますか?
- 13. JVMはメモリ引数をどのように解釈しますか?
- 14. ブラウザはCSSをどのように解釈し、どのように処理されますか?
- 15. xmlの空ノードタグはどのように解釈され、ノードの存在は解釈されませんか?
- 16. どのように各ループを解釈するのですか?
- 17. IB APIのreqPositions()レスポンスをどのように解釈しますか?
- 18. Azureのレート表APIでincludedQuantityをどのように解釈しますか?
- 19. これらの手順をどのように解釈しますか?
- 20. 3進C演算子は空の第1ブランチをどのように解釈しますか?どうして?
- 21. ImageMagickの "S字状のコントラスト"はどのように解釈できますか?
- 22. fio iopsのログファイルはどのように解釈されますか?
- 23. QPainterPath :: arcToの角度はどのように解釈されますか?
- 24. PHPマクロ定義はどのように解釈されますか?
- 25. これはどのように解釈されますか?obj1.getPrev()。setNext(obj2);
- 26. jqueryセレクタ、 "a + b + c + d"はどのように解釈されますか
- 27. 平方根プログラムはどのように解釈されますか
- 28. 小数はバイナリでどのように機能しますか?
- 29. 仮想マシンはどのように機能しますか?
- 30. python minimalmdobusどのようにレジスタを正しく解釈するのですか?