アセンブリ言語とマシン言語(同じ基になるシステム用)は本当に同じですか?これら2つの概念に違いはありますか?
アセンブリ言語は、機械語よりも便利なメカニズムです。アセンブリ言語では、数値演算コードの代わりにニーモニックシーケンスを使用し、手動でオフセットを計算する代わりにシンボリックラベルを使用できます。また、不正な形式のプロセッサ命令を入力するなど、本当に愚かなエラーから保護します。
それ以外の場合、アセンブリ言語は機械語と同等です。新しいプロセッサの一部の命令のニーモニックをサポートしない古いアセンブラがある場合があります。その後、プログラムに直接操作コードを挿入できます。
マシン言語は、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.
本当に良い説明を見つけたので、他の人が読めるように、ここに投稿しようと考えました。
マシン言語は、コンピュータのプロセッサを制御するために使用される実際のビットであり、通常は一連の16進数(通常はバイト)として表示されます。プロセッサはこれらのビットをプログラムメモリから読み取り、ビットは次に何をするかに関する「指示」を表します。したがって、機械語は、コンピューターに命令を入力する方法を提供します(スイッチ、パンチテープ、またはバイナリファイルを介して)。
アセンブリ言語は、機械語をより人間が読める形式です。機械語を数字で表す代わりに、命令とレジスタには名前が付けられます(通常、略語、またはニーモニック、たとえばldは「ロード」を意味します)。高水準言語とは異なり、アセンブラーは機械語に非常に近いです。主な抽象化(ニーモニックを除く)は、固定メモリアドレスとコメントの代わりにラベルを使用することです。
アセンブリ言語プログラム(つまり、テキストファイル)は、アセンブラーによって機械語に翻訳されます。逆アセンブラーは逆の機能を実行します(ただし、コメントとラベルの名前はアセンブラープロセスで破棄されます)。
ソース: 機械語とアセンブリ言語の違いは何ですか?
アセンブリでは、命令はCPU命令のわかりやすい表現です。
しかし、アセンブラーは、たとえば、アドレス指定をより簡単にします。
これにより、特にアドレス間の距離が変化する場合に、アセンブリの保守がはるかに簡単になります。
機械語はチップが理解するものですアセンブリはあなたが理解するものです
すべてのアセンブリ命令には、同等の機械言語があります。 x86にはいくつかのシングルバイト命令がありますが、それらは可変長であり、最大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]
アセンブリ言語は、まずアセンブラーによって機械語に変換されます。これは、メモリ(RAM)プロセッサ/カップに格納されてフェッチされ、メモリから格納されて、命令セットを1つずつ登録および追跡します。
マシン言語:
アセンブリ言語:
アセンブルレベル言語は、プログラマがバイナリコード(マシンコード)の代わりにニーモニックを記述できるようにすることで、プログラミングを単純化するための最初の意識的なステップです。