5

これはばかげた質問かもしれませんが、Intel x86とARMアセンブリ命令のマッピングを提供するWebページ/ドキュメント/ブックはありますか?

これは1対1のマッピングではないことは承知していますが、多くの命令はかなりシームレスにマッピングされると思います(例としてMOV)。

4

2 に答える 2

1

なんで?コードを一方から他方に移植しようとしていますか?一方を知っていて、「チートシート」でもう一方を学習したいですか?私が思いつくことができる最高のものは、ARM / Thumbクイックリファレンスカードです( x86にはおそらくたくさんあります)。

私はそれを見つけることができないようです、そしておそらくマッピングが「シームレス」からほど遠い主な理由です。ARM命令は一般に3-op(abc dst,src1,src2)であり、さらに悪いsrc2ことに、シフト/ローテーションを適用することができます。leax86命令は、3演算の追加として一般的に使用されるような奇妙な点を除いて、通常は2演算です。

私が考えることができる最も近いものは、ARM / x86のチートシートを組み合わせたもので、一般的な命令はカテゴリ(算術、ビット演算、制御フロー、浮動小数点、メモリアクセス)に分けられています。

そして、親指があります...

于 2012-07-20T20:12:01.637 に答える
1

命令セットアーキテクチャには、add、xor、load、store、moveなど、同様のサウンドと機能の命令があり、それらを使用します。

探しているマッピングは、2つの命令セットが何であっても同じ場所にあります。ある命令セットのドキュメントを取得し、別の命令セットのドキュメントを取得して、手順を検索するだけです。x86は、ロードとストアのmov命令をオーバーロードするだけでなく、即時移動とレジスタからレジスタへの移動を好みます。アームの場合、ロードとストアをロードに使用し、ストアと移動をレジスタからレジスタに、即時にレジスタに移動します。

Intelはcisc、armはriscであるため、1対1のマップはありません。非常に少数の命令が見かけ上マッピングされます。rd=rd+ rnおよびその他のレジスタを追加してalu関数を登録します(フラクショナルx86レジスタではなくフルサイズのレジスタの場合)。

見た目が悪く、1対1のマップではない結果として、一方から他方に移動するための複数の有効なソリューションがあるため、単一のマップを見つけることは意味がありません。

探しているのは、静的バイナリ変換または動的バイナリ変換のいずれかです。一度も実行したことがない場合は、静的の方が簡単です。また、あるマシンコードから別のアセンブリまたはマシンコードに変換しないでください。マシンコードからCに変換し、コンパイラーにそれをターゲットにコンパイルさせながら、最適化して、さまざまなターゲットを使用する選択肢を提供します。他の選択肢は、命令セットシミュレータです。

手作業でコードを書き直すだけの場合は、2つの命令セットマニュアルのソースとターゲットを使用してください。マップがあったとしても、そのマップを使用するには、2つの命令セットについて十分な知識が必要です。

于 2012-07-20T20:43:28.600 に答える