1

そのため、クラス用の非常に基本的な逆アセンブラーを作成する必要があり、Thumb 命令に追加できる S がどのようにエンコードされるかを理解するのに苦労しています。

たとえば、命令 0x0011 は次のアセンブリ コードに対応します。

movs    r1, r2

なぜ通常の動きにしないのですか?

同様に、0x1889 は以下に対応します。

adds    r1, r1, r2

リファレンスマニュアルを読んでわかる限り、これは S を除いた通常の add 命令と同じエンコーディングです。状態フラグの更新命令はどのように送信されますか?

4

2 に答える 2

0

gnu アセンブラーは非常に煩わしく、命令セットを台無しにしますが、それはまた別の話です。親指モードの場合、文句を言うsを入れないでください。しかし、選択の余地がないので、常にそこにあります。add r1,r2 をアセンブルしてから逆アセンブルするだけで、r1,r2 の追加が表示されます

0x0011 は lsl immed_5, rm, rn なので、lsl r1,r2,#0 は add ではありません。

0x1889 は確かに加算 r1、r1、r2 です。s は、thumb の命令セットには含まれていません。

于 2012-10-19T20:21:40.087 に答える
0

Thumb は各命令に条件フィールドを使用しないため、Sすべての命令は無条件です (条件付き分岐は別として)。32 ビット ARM から 16 ビット Thumb への削減には、ARM の廃止が含まれます。あなたが提供した例はs、私の意見では、そもそも必要ありません (このマニュアルでは使用されません)。

Thumb の条件コードは、ALU 命令 (ARM と同じ) によって暗黙的に設定されますが、それらにアクセスするには、条件分岐を使用する必要があります。

于 2012-10-20T01:33:17.623 に答える