5

私はアセンブリ言語を学んでいます。PC Assembly LanguageNASM(The Netwide Assembler)を使用するPaulA.Carter 'sから始めました。それから途中で切り替えIntroduction to 80×86 Assembly Language and Computer ArchitectureてMASMを使った読み始めました。

NASMでは、バイトを初期化するために書いていました

db 110101b

MASMでは私が使用しています

BYTE 110101b

私は読んでいる最中です。これらはアセンブラディレクティブであるため、アセンブラごとに異なります。右?これらのアセンブラ開発者は、これらのディレクティブの標準に準拠していませんか?なぜなら、彼らはニーモニックがCPU固有であることを知っているからです。だから、アセンブリ言語で学び、コーディングするのはお尻の痛みです。

これで、それらが異なるディレクティブに従う場合、アセンブラーを変更したり、オペレーティングシステムを切り替えたりすると、さらに苦痛になります(MASM開発者がLinuxに移行すると、深刻な問題に直面します)。

私の混乱は、NASMまたはMASMに精通する必要があるかどうかです。私はWindowsのファンですが、(将来的には)Linuxでも作業する必要があるかもしれません。

すべての本には、「__________アセンブラを使用した_________アセンブリ言語」というタイトルを付ける必要があります

4

4 に答える 4

4

残念ながら、アセンブリ言語の標準はありませんでした。アセンブラがサポートするディレクティブを学習する必要があります。幸いなことに、ディレクティブのほとんどは名前は異なりますが、db と BYTE のように意味的には似ています。

ちょっと待って!特に x86 の場合はさらに悪化します。アセンブラーが受け入れることができる (少なくとも) 2 つの形式のコードがあります: Intel 形式と AT&T 形式です。AT&T 形式では、命令に対するほとんどのオペランドの順序が逆になります (またはその逆です ;-)。

NASM は、移植性のためにおそらくより良い選択ですが、GNU アセンブラーも検討できます。

于 2010-01-03T16:51:26.123 に答える
2

Intel 構文 / AT&T 構文

特に x86 では、最初のアセンブラーは Intel から提供され、その後、互換性の高い Microsoft からのアセンブラーが 1 つのブランチを形成しました。

これらのアセンブラーは、ソースとデスティネーションのオペランドを右から左に編成し、8、16、および 32 ビットの ops に単一のニーモニックを使用してから、使用する実際のマシンのオペコードを導出する、異常な (そして、私の目にはちょっと風変わりな) 抽象レイヤーを持っています。オペランドのプロパティに基づきます。特定のサイズを強制する修飾子が (オペランドに) 存在します。

しかし、Unix も重要であり、異なる伝統と慣習を持つ、まったく異なるアセンブラー ラインを持っていました。

オリジナルの Unix ベンダーは、Bell Labs で開発された知的財産を所有する AT&T でした。一連の BSD プロジェクト、そして Linux がこの伝統を引き継いでいます。これらのアセンブラは、歴史的にオペランドを左から右に処理し、速度を最適化する予備の設計を備えており、人間が使用する場合は、アセンブラに並列機能がある場合でも、一般にマクロと条件に cpp を使用します。

最近では、MS では VS を、Linux や Mac では Gnu を使用している可能性がありますが、これが、AT&T と Intel の違いをいまだに言い続けている理由です。GNU アセンブラーには、両方の方法でアセンブルするオプションがありますが、実際にはまだ AT&T 陣営に属しています。

于 2010-01-03T17:49:09.127 に答える
1

プロセッサはすべて、製造元が提供するリファレンス マニュアルに記載されています。これは通常、特定のプラットフォームでのアセンブリ プログラムの規範的な構文 (ベンダーが提供するアセンブラと共に) に発展しました。したがって、1 つのベンダーの多くのプロセッサの構文は類似しています。

状況は、プロセッサの 2 番目の調達と、歴史的な理由から、すべてのプラットフォームでほぼ一貫した構文を使用するマルチターゲット アセンブラの最終的な開発により、より複雑になりました。これは、プラットフォーム間でコードを移植する際にも、議論の余地のあるいくつかの利点を提供します。

最善の選択は次のとおりです: 使い慣れた表記法を選び、異なる構文の本を受け入れる、クロスシステム マクロ ライブラリまたは翻訳ツールを見つけられるかどうかを確認する、または弾丸をかじって複数の方言を学習する。3 番目は通常は許容範囲ですが、プライベート ライブラリの構築は労力を要します。

于 2010-01-03T17:12:48.990 に答える
1

一般的にはい。ただし、ほとんどの機能は互換性があるため、両方を知っていれば、あるアセンブラー構文から別のアセンブラー構文に変換することは通常それほど難しくありません。

于 2010-01-03T16:51:46.083 に答える