34

ソース コード、バイトコード、アセンブリ コード、マシン コード、コンパイラ、リンカ、インタプリタ、アセンブラ、その他すべての意味のさまざまな違いを探している間、私はバイトコードとアセンブリ コードの違いについてのみ混乱しました。

特に、CIL を説明するこのウィキペディアの記事の紹介は、両方の用語 (アセンブリ コードとバイトコード) を同じ意味で使用しているように思われるため、私を混乱させました。

4

7 に答える 7

17

アセンブリ コードは通常、機械のネイティブ言語 (いわゆる機械語) の人間が読める形式を意味します。一方、バイトコードは通常、バイトコードインタープリターによって解釈できる言語であるため、プロセッサーのネイティブ言語ではありません。

では、なぜ混乱するのでしょうか?この方法では、アセンブリ言語とバイト コードを比較することはできません。もちろん、バイトコードはアセンブリコードを持つこともできます—人間が読める形式を意味します。なぜなら、「アセンブリ言語」は必ずしもそれが実際のマシン用であることを意味するわけではないからです—しかし、それはネイティブ言語の人間が読める形式です —このネイティブ言語はマシン コードですが、Bytecode のような疑似 (または解釈された) マシンのアセンブリ コードを使用することもできます。

参照: アセンブリ言語

もちろん、ここでのすべての議論でわかるように、IT 担当者 (私も) は言葉遣いが緩い傾向があるため、さらなる苦痛が伴います。「アセンブリ言語」は、マシンコードについて話すときによく使用されます。もちろん、これは完全に正しいわけではありません。アセンブリ言語は、機械のコードを人間が読める形式にすぎないからです。

于 2009-11-23T13:36:19.023 に答える
3

マイクロコントローラーとマイクロプロセッサーが登場して以来、Assembly という言葉は、人間が読める方法でマシンコードを指定するために使用されていたことを覚えています。Microsoft は、同じ "Assembly" という単語を使用して、dotNET Framework コンパイラによって生成される ByteCode の名前を付けることで混乱を招いているように思えます。したがって、この場合、Java ランタイムに対する「バイトコード」の意味は、Microsoft dotNET ランタイム環境に対する「アセンブリ」という言葉の新しい使用法と似ていると言えます。それを仮定するのは間違っていますか?

于 2013-01-13T00:24:28.073 に答える
2

Assembly code通常、 は、いったん にコンパイルされると、仮想マシン内でMachine CodeCPU によって実行できるコードを指すために使用されます。bytecode

CIL に関する混乱の原因はmachine code、CPU X が CPU Y で実行されている仮想マシンによって解釈される可能性があるという事実に関連している可能性があります (たとえば)。

仮想マシンの実装は、任意のマシン コードおよび/またはバイトコードを解釈するように作成できることに注意してください。それは、開発者とその願望 (および開発者の時間) に任されています ;-)

于 2009-11-23T11:08:47.667 に答える
0

アセンブラはマクロ言語です。これは、CPU または他のデバイスに指示するために使用される一連の命令です。これは、CPU によって読み取り可能な命令であるマシン コードに変換されます。

バイト コードは、仮想マシンが解釈される命令であり、実行前にマシン コードに変換する必要があります。

于 2009-11-23T11:10:26.697 に答える
0

アセンブルされたコードは、特定の命令セットを備えた CPU 上で実行できますが、バイトコードは、VM を実行できる任意の CPU 上の仮想マシン (Java ランタイムなど) で実行できます。

于 2009-11-23T13:51:29.633 に答える
-2

アセンブリ コードは、プログラミングしているプロセッサのネイティブ コードです。

バイトコードは、インタープリターまたは仮想マシンによって実行されるようにコンパイルされた「コマンド」のバイナリ バージョンを表す用語です。

本質的に、バイトコードは仮想プロセッサのオペコードを定義し、アセンブリは物理プロセッサのオペコードで構成されます。(今のところ、CPU 内のマイクロコードは無視します :-) )

于 2009-11-23T11:09:45.293 に答える