35

私はこれにかなり慣れていません。上記の用語の違いを明確に理解しようとしましたが、まだ混乱しています。これが私が見つけたものです:

  • コンピューター アセンブラー (またはアセンブリ) 言語では、ニーモニックは操作の省略形です。各アセンブラ プログラム命令のオペ コード フィールドに入力されます。たとえば、これはで登録AND AC,37することを意味します。so 、およびはニーモニックです。それらはアセンブラによって翻訳されます。ANDAC37ANDSUBMUL

  • 一般に、アセンブリ言語の命令 (ステートメント) は、高級プログラミング言語とは異なり、非常に単純です。一般に、ニーモニックは、単一の実行可能な機械語命令 (オペコード) の記号名であり、各機械語命令に対して少なくとも 1 つのオペコード ニーモニックが定義されています。各命令は通常、オペレーションまたはオペコードとゼロ個以上のオペランドで構成されます。

4

6 に答える 6

48

OPCODE : 実行する操作を表す、マシン (仮想またはシリコン) によって解釈される数値です。

BYTECODE : マシン コードと同じですが、主にソフトウェア ベースのインタープリター (Java や CLR など) によって使用されます。

MNEMONIC : 英単語の MNEMONIC は、「何かを思い出すのに役立つ文字、アイデア、または関連付けのパターンなどのデバイス」を意味します。したがって、通常、アセンブリ言語プログラマーは、「ADD」、「MUL」、「MOV」など、マシンが実行できる「操作」を覚えておくために使用します。これはアセンブラー固有です。

MACHINE CODE : 数値の加算、分岐、乗算などの特定の作業を実行するためにコンピューターのスイッチをオン/オフする一連の数値です。これは純粋にマシン固有のものであり、プロセッサの実装者。

アセンブリ: 2 つの「アセンブリ」があります。1 つのアセンブリ プログラムは、ニーモニックとオペランドを実行可能なマシン コードに「アセンブル」する「アセンブラ」に供給される一連のニーモニックとオペランドです。オプションで、「リンカー」がアセンブリをリンクし、実行可能ファイルを生成します。

「CLR」ベースの言語 (.NET 言語) の 2 番目の「アセンブリ」は、メタデータ情報が注入された一連の CLR コードであり、実行可能なコードのライブラリのようなものですが、直接実行することはできません。

于 2013-07-14T11:21:03.303 に答える
34

アニケットはよくやったけど、私もやってみよう。

まず、最も低いレベルでは、コンピューター プログラムとすべてのデータは単なる数字 (単語と呼ばれることもあります) であり、ある種のメモリ内にあることを理解してください。最も一般的には、これらのワードは 8 ビット (1 と 0) の倍数 (32 と 64 など) ですが、必ずしもそうとは限りません。プロセッサによっては、各ワードがかなり大きくなります。とにかく、一連の 1 と 0、または必要に応じてオンとオフで表されるのは単なる数字です。数字が何を意味するかは、何を/誰が読んでいるか次第であり、プロセッサの場合、一度に1ワードずつメモリを読み取り、見た数字(命令)に基づいて何らかのアクションを実行します。このようなアクションには、メモリから値を読み取る、メモリに値を書き込む、読み取った値を変更する、メモリ内の別の場所にジャンプして命令を読み取るなどがあります。

非常に初期の頃、プログラマーは文字通りスイッチのオンとオフをフリックしてメモリを変更し、ライトをオンまたはオフにして 1 と 0 を読み上げていました。キーボードや画面などはなかったからです。時間が経つにつれて、メモリが大きくなり、プロセッサがより複雑になり、入力用のディスプレイ デバイスとキーボードが考え出され、それによりプログラミングがより簡単になりました。

アニケットの言い換え:

OPCODE は、読み取り、書き込み、ジャンプ、追加など、実行する操作を表すものとしてプロセッサによって解釈される命令語の一部です。多くの命令には、メモリ内のどこから読み取りまたは書き込みを行うか、どこにジャンプするかなど、命令の実行方法に影響を与えるオペランドもあります。たとえば、命令のサイズが 32 ビットの場合、プロセッサはオペコードに 8 ビットを使用し、2 つのオペランドのそれぞれに 12 ビットを使用できます。

スイッチの切り替えから一歩進んで、「モニター」と呼ばれるプログラムを使用してコードがマシンに入力される場合があります。プログラマーは簡単なコマンドを使用して、変更したいメモリを指定し、MACHINE CODE を数値で入力します。たとえば、0 から 9 までと A から F までの 16 進数を使用します。

スイッチを切り替えるよりはましですが、機械語の入力は依然として遅く、エラーが発生しやすくなります。それからのステップ アップは、命令を表す実際の番号の代わりにより簡単に覚えられるニーモニックを使用するアセンブリ コードです。ASSEMBLER の主な仕事は、プログラムのニーモニック形式を対応するマシン コードに変換することです。これにより、特に命令の一部がジャンプ先のメモリアドレスまたはスキップするワード数であるジャンプ命令のプログラミングが容易になります。マシンコードでプログラミングするには、正しい命令を作成するために骨の折れる計算が必要であり、コードが追加または削除された場合、ジャンプ命令を再計算する必要がある場合があります。アセンブラはプログラマに代わってこれを処理します。

これにより、メモリの読み取りや書き込みなどの低レベルの操作や基本的な計算を記述するという点で、マシン コードと基本的に同じである BYTECODE が残ります。バイトコードは通常、PHP や Java などの高水準言語をコンパイルするときに生成されると考えられており、多くのハードウェア ベースのプロセッサのマシン コードとは異なり、高水準言語の特定の機能をサポートする操作を行うことができます。主な違いは、バイトコードのプロセッサは通常プログラムであるということです。プロセッサは、一部のバイトコード仕様を解釈するために作成されています。たとえば、Smalltalk バイトコード用の SOAR (Smalltalk On A RISC) と呼ばれるプロセッサです。通常、ネイティブ マシン コードのバイトコードとは呼びませんが、CISC や EISC などの一部のタイプのプロセッサ (たとえば、レコード プレーヤーを作った人々の Linn Rekursiv) では、

于 2013-07-14T15:31:06.100 に答える
17

次の行は逆アセンブルされた x86 コードです。

68 73 9D 00 01       PUSH 0x01009D73

68オペコードです。以下のバイトでx86アセンブリ言語のPUSH 命令を表しPUSH 命令は、4 バイト (32 ビット) の長さのデータをスタックにプッシュします。PUSH という単語は、オペコード 68 を表す単なるニーモニックです。バイト68 73 9D 00 01のそれぞれはマシンコードです。

マシン コードは実マシン (CPU) 用ですが、バイト コードは仮想マシン用の疑似マシン コードです。

Javaコードを書くとき。Java コンパイラはコードをコンパイルし、バイト コードを生成します。(.class ファイル) であり、変更することなく、どのプラットフォームでも同じコードを実行できます。

                     JAVA CODE
                         |
                         |
                     BYTE CODE
         ________________|_______________
         |               |               |
      x86 JVM        SPARC JVM        ARM JVM
         |               |               |
         |               |               |
        x86            SPARC            ARM
   MACHINE CODE     MACHINE CODE    MACHINE CODE
于 2017-01-01T10:07:04.747 に答える
-3
  • マシンコードはバイナリですが、ニーモニックはアイデア、文字 (MOV、ADD など) です。
  • マシンコードは言語ですが、ニーモニックコードはアセンブリ言語の一部です
于 2015-04-02T12:09:48.133 に答える