2

私はmsp430命令セットのシミュレーターに取り組んでいます。gnuアセンブラを使用すると、次のような命令をエンコードできます。

fc0a: 12 10 00 02 rrc &0x0200       
fc0e: 22 11       rra #4        
fc10: 23 52       add #4,#2

私の推測では、rrc&0x0200はアドレス0x0200からフェッチしてローテーションを実行し、答えをアドレス0x0200に書き戻します。しかし、rra#4は何をしますか?ソースはすぐに4になると思いますが、操作後の宛先はありますか?add#4、#2はあなたが期待するものにアセンブルされ(2b10、source = r2、ad = 1b0、dest = r3として)、binutils逆アセンブラーはその命令をどうするかを知りませんでした。

これらの有効な指示はありますか?

4

3 に答える 3

5

この効果についての明確なオンライン参照はないようですが、データシートで定義された形式に準拠していても、示されている2つの手順(および他のいくつかの手順)は無効である可能性が高いというOPに同意する傾向があります。 。

言い換えれば、命令ワードを構成するさまざまな部分のすべての可能な組み合わせが有効であるとは限りません。特に、即時アドレッシングモードを使用する多くのシングルオペランド命令、および宛先にイミディエートアドレッシングモードを持つ多くのダブルオペランド命令は、おそらく意味的に実行可能ではありません。

ドキュメントには、この効果に関するヒントがいくつかあります。たとえば、ユーザーズガイドのセクション3.3.7(即時アドレッシングモード)では、コメントに「ソースオペランドに対してのみ有効」と示されています(そして、ところで、これは、R2またはR3の定数生成トリックで許可されている簡単なケースだけでなく、即時アドレッシングモードのすべてのケースに当てはまります。)

逆アセンブラがそのようなコードをどう処理するかを知らないという事実もまた別のヒントです(ただし...一部の逆アセンブラは簡単にトリップします...)。

ドキュメントのために、MSP430のいくつかの有用なリファレンスを以下にまとめました。

于 2009-09-16T02:20:32.750 に答える
2

現在のユーザーガイドのセクション3.4.4.2では、コマンドRRAの宛先フィールドにイミディエイトモード(#N)を使用しないことをお勧めします。これは、「予期しないプログラム操作」を引き起こすためです。

于 2011-08-06T00:00:57.267 に答える
1

可能性があります。ウィキペディアの命令セットを見ると、オペコードはレジスタとさまざまなオプションをエンコードしています。したがって、これは単純なマッピングではありません。取得した出力はリトルエンディアンのように見えるため、次のようになります。

fc0a: 12 10 00 02 rrc &0x0200  

命令1012に対応します。これは、バイナリでは0001 000000010010です。

これは次のように分類されます。

6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0    - instruction (RRC)
1 bit : 0       - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01      - addressing mode (01 = indexed;)
4 bits: 0010    - register

したがって、この場合、アドレス&0200からのレジスタ2のオフセットの値で右回転が発生しています。

完全に理解するには、同様の方法で他の手順を分解する必要があります。ADD命令の場合、送信元と宛先の両方のレジスタ/アドレスが5223命令でエンコードされます。

于 2009-09-18T11:21:37.817 に答える