33

アセンブリ言語と機械語 (同じ基本システムの場合) は本当に同じですか? これら2つの概念に違いはありますか?

4

9 に答える 9

41

アセンブリ言語は、機械語よりも便利なメカニズムです。アセンブリ言語では、数値オペレーション コードの代わりにニーモニック シーケンスを使用し、手動でオフセットを計算する代わりに記号ラベルを使用できます。また、不正なプロセッサ命令を入力するなど、本当にばかげたエラーからも保護します。

それ以外の場合、アセンブリ言語は機械語と同等です。場合によっては、新しいプロセッサの一部の命令のニーモニックをサポートしない古いアセンブラを使用することがあります。その場合でも、命令コードをプログラムに直接挿入できます。

于 2009-08-10T05:52:03.530 に答える
19

機械語は、CPU のオペコードの「ビット エンコーディング」です。

アセンブリ言語は、CPU のオペコードの「シンボリック エンコーディング」です。

たとえば、象徴的に:

loop:  dec R1    # Decrement register R1
       bnq loop  # Branch if not equal to zero to
                 # address "loop"

ビットエンコーディングになります:

# Mythical CPU Machine code 4 bits operation,
#                           4 bit "option"
       0x41      # 4 is a "dec" and represents r1;
       0x7E      # 7 is bnq and E means PC -2;

通常、これは 1 対 1 の関係ですが、一部のアセンブリ言語には、複数のマシン コード命令にマップするか、別のオペコードを再利用する追加のアセンブリ命令が時折あります。マシンコード「xor R1、R1」を「clr R1」または非常に類似したものとして使用するなど。

さらに、アセンブリ言語は「マクロ プログラミング」をサポートする傾向があり、アセンブリが広く使用されていた 80 年代には、ソース コードがより「高レベル」な外観になりました。一般的な操作を簡略化するために、"plot x,y" や "Hex Val" のようなアセンブリ マクロを個人的に作成しました。

例えば:

# Mythically CPU Macro
.macro spinSleep x,y
            ld #x,y
localLoop:  dec y
            brq localLoop
.endmacro
# Macro invocation
            spinSleep 100,R1
# Macro expantion
            ld #100,R1
localLoopM: dec R1
            brq localLoopM   # localLoopM is "Mangled" for localization.
于 2009-08-10T06:06:05.967 に答える
7

本当に良い説明を見つけたので、他の人が読めるようにここに投稿しようと思いました:

機械語は、コンピューター内のプロセッサを制御するために使用される実際のビットであり、通常は一連の 16 進数 (通常はバイト) として表示されます。プロセッサはこれらのビットをプログラム メモリから読み取ります。これらのビットは、次に何をすべきかについての「命令」を表します。このように、機械語は、コンピュータに命令を入力する方法を提供します (スイッチ、パンチ テープ、またはバイナリ ファイルを介して)。

アセンブリ言語は、人間が読みやすい機械語のビューです。機械語を数字で表す代わりに、命令とレジスタには名前が付けられます (通常は略語またはニーモニックです。たとえば、ld は「ロード」を意味します)。高級言語とは異なり、アセンブラは機械語に非常に近い言語です。主な抽象化 (ニーモニックを除く) は、固定メモリ アドレスとコメントの代わりにラベルを使用することです。

アセンブリ言語プログラム (テキスト ファイル) は、アセンブラによって機械語に変換されます。逆アセンブラは逆の機能を実行します (ただし、コメントとラベルの名前はアセンブラ プロセスで破棄されます)。

出典 :機械語とアセンブリ言語の違いは何ですか?

于 2011-05-14T05:28:09.830 に答える
5

アセンブリでは、命令は CPU 命令のわかりやすい表現です。

しかし、アセンブラは、例えばアドレス指定をより簡単にします:

  • 機械語では、現在の場所とジャンプしたい場所の間の (アドレス空間での) 距離を知る必要があります。
  • アセンブリ言語では、1 つのアドレスを「iWantToJumpHere」と呼び、「ジャンプ iWantToJumpHere」と言うことができます。

これにより、特にアドレス間の距離が変化した場合に、アセンブリの保守がはるかに容易になります。

于 2009-08-10T05:59:41.063 に答える
1

機械語はチップが理解するもの アセンブリはあなたが理解するもの

すべてのアセンブリ命令には、同等の機械語があります。x86 には 1 バイトの命令がいくつかありますが、それらは可変長であり、最大 15 バイトの長さにすることができます (オプションのプレフィックスを含む)。

 machine code bytes |   x86 assembly language
8D B0 00 36 65 C4    lea    esi, [eax - 1000000000]     
BB 00 FC FF FF       mov    ebx, -1024
43                   inc    ebx
41                   inc    eax
3B CA                cmp    ecx,edx
C3                   ret

C5 F5 72 D2 01       vpsrld ymm1,ymm2,0x1        ; AVX2
C5 F5 D4 6D 88       vpaddq ymm5,ymm1,YMMWORD PTR [ebp-0x78]
C5 CD D4 AD 68 ff ff ff vpaddq ymm5,ymm6,YMMWORD PTR [ebp-0x98]
于 2013-04-30T01:36:02.267 に答える
0

アセンブルレベルの言語は、プログラマーがバイナリコード(機械語)の代わりにニーモニックを記述できるようにすることで、プログラミングを単純化するための最初の意識的なステップです。

于 2009-08-10T06:24:46.380 に答える
0

アセンブリ言語は、まずアセンブラによって機械語に変換されます。これはメモリ(RAM)プロセッサ/カップに格納され、それをフェッチしてメモリからレジスタに格納し、命令セットを1つずつ追跡します。

于 2018-08-05T11:19:08.193 に答える