gas、nasm、yasmなどのさまざまなオープンソースアセンブラがあります。それらは異なる構文pseudo-ops
を持っています。macro
多くのオープンソースプロジェクトでは、定数とプラットフォーム条件を置き換えるためにアセンブラが前処理されています。
変換パフォーマンス(バイナリ時間へのコンパイル/アセンブル)を除い て、現在のすべてとgcc
を使用できると仮定すると、アセンブラを作成する際にどのような制限がありますか?attributes
#pragmas
インラインアセンブリについて話しているのではありません。
#define MOV(RA,RB) (OXFEB10000UL | RA << 16 | RB)
#define ADD(RA,RB) (OXFEB20000UL | RA << 16 | RB)
#define RET (OXFEB7ABCDUL)
unsigned long add4[] __attribute(section(".text")) =
{
ADD(R0,R1),
ADD(R2,R3),
MOV(R1,R2),
ADD(R0,R1),
RET()
};
ポインタ演算を使用すると、.
およびその他のシミュレーションが可能になると思いますlabels
。おそらくこれはXY問題です; なぜアセンブラーが多いのかを理解しようとしています。すべてがプリプロセッサで実行できるようで、アセンブラは実際にはプログラマの好みです。または私が見逃している技術的限界があります。
これは、「シェルコードではできないアセンブラでできること」に関連しているのではないかと思います。
編集:これをCからコンパイラに再タグ付けしました。アセンブラの技術的な詳細に興味があります。それは単に1-1
翻訳と再配置の発行(コンパイラーのように)ですか、それとももっとありますか?上で概説したように、人々がアセンブラーをコーディングするという意味ではありません。私はアセンブラーが何をしているのかを理解しようとしています。アセンブラー向けのドラゴンブックはないと思います。もちろん、プリプロセッサはbinary
それ自体で作成することはできず、追加の機械が必要です。テキストのみを翻訳します。