x86 アーキテクチャには、1、2、および 3 バイトのオペコードがあります。アームはどうですか?たとえば、バイナリを逆アセンブルするとき、常に最初のバイトをオペコードとして使用できますか?
2 に答える
いいえ。現在、いくつかのアーム命令セットがあります。プライマリアーム命令セット。すべての命令は32ビットであり、命令のデコードは命令内の1つのフィールドに分離されていません。サム命令セットは16ビット命令に基づいていますが、同じ答えですが、命令に応じてデコードはさまざまな場所で行われます。次に、thumb命令セットにthumb2拡張機能があり、同じ答えです。thumb2命令は、thumbからの未定義の命令の1つであり、どの命令を区別するためにさらにビットを追加します。
infocenter.arm.comからARMアーキテクチャリファレンスマニュアルの1つを入手して、これらすべてを確認してください。これがどのように機能するかを示すいくつかの優れた図があります。msbitsを使用して命令をさまざまなタイプに分割し、タイプに応じて残りのビットをデコードします。
x86は、デザインがより一般的に使用される命令に1つのメモリ位置(/ access)(当時はバイト)を使用し、いくつかのオペコードを2番目のバイトに多重化する傾向があった8ビットの世界に由来します。また、イミディエート全体が追加されました。当時は大丈夫でしたが、今日は非効率的です。x86は、優れた命令セットを代表するものではなく、学習する最後の命令セットである必要があります。先に進むには、多くのことを学習しない必要があります。
ウィキペディアには、ウィキページ自体にいくつかの命令セットがありますが、他の多くの場合、直接リンクがあります。armやmipsなどのIPベンダーだけでなく、多くのチップベンダーも、自分のサイトに直接アクセスしてドキュメントを入手できます。
ARM 命令には、実際には「オペコード」の概念がありません。x86命令セットについてはよくわかりませんが、あなたの説明は6502マシンコードのように聞こえます。一部のバイトは実行する命令を識別し、他のバイトは命令が使用するデータを指定します。
Thumbを無視すると、すべての ARM 命令は 4 バイト長です。命令で使用されるオペランドは、これらの 4 バイト内に含まれています。