2012-02-21 12 views
0

どうすればこの真実を実現できますか?私が何をしたいかアセンブラのパッチ適用の手順とブランチを比較する

CMP    R0, #0 

は、例えばある

CMP R0,R0 or CMP #0, #0 

00 28はオペコードであることを確認してください。私は結果なしで28 28をしようとする! 別の質問 どのようなものがBNE.Wですか?これは最終的なW何ですか? BEでどのように修正できますか?オペコードは40 F0 65 85

注:すべてのオペコードは親指モードです!

* EDIT Mac用のarmv7コンパイラはありますか?

+0

どのようなCPUですか?適切なタグを追加します。 –

+0

アームプロセッサー!申し訳ありません –

+0

命令「CMP R0、R0」または「CMP#0、#0」をアセンブルし、上記のオペコードをこれに置き換えてください。 – AusCBloke

答えて

1

単純にCMP R0, R0またはCMP #0, #0を組み立て、必要なオペコードをそのように抽出することができます。


もう1つの方法は、ARMリファレンスマニュアルを参照して手動でオペコードを構築することです。 Thisは、私がすぐに見つけたARMv5マニュアルであり、7.1.22の下には、2つのレジスタを比較するためのオペコードを構築する詳細のCMP <Rn>, <Rm>があります。詳細は、私がポストしようとする直前に発見されたARMv7マニュアルと同じように見えます。

それは0 1 0 0 0 0 1 0 1 0あるビット15-6を有し、次いで5-3最初のレジスタの数(R0 3ビットで表される数0)、およびビット2-0は、第2のレジスタ(またR0)されているビット。だからあなたのオペコードは現在、次のようになります。

0 1 0 0 0 0 1 0 1 0CMP000R0000R0

100001010000000進にしたがって、リトルエンディアンのために必要な2バイト80 42あり、4280です。

ご覧のとおり、アセンブラがあなたのために働くようにするのはずっと簡単です。

関連する問題