3

マニュアルでCCR命令からMOVEを見つけました... http://www.freescale.com/files/archives/doc/ref_manual/M68000PRM.pdf

しかし、「無効なアドレッシング モード」エラーが発生し続けます。さまざまな形式の構文を試しましたが、とにかく、CCR 全体ではなく、キャリー ビットのみを格納したいと考えています。これらはすべて、私が試した構文です。サイズは単語でなければならないことを非常に明確に示しています。

MOVE.W CCR,D6
MOVE.W CCR,CARRY
MOVE   CCR,D6
MOVE   CCR,CARRY
MOVE.B CCR,D6
MOVE.B CCR,CARRY

なだ。私は何を間違っていますか?具体的に実行ビット (C) を格納するより良い方法はありますか?

4

1 に答える 1

4

SR/CCR に直接アクセスして、単一のフラグの状態を取得しないでください。

68K ファミリには、非常に便利な S(cc) 命令 (条件付きで設定) があり、(cc) の条件付き述語を取り、条件を反映するバイトを生成します。例:

SEQ D0

ゼロ フラグがクリアされると、D0.b​​ は 0x00 になり、それ以外の場合は 0xFF になります。この命令では、キャリー ベースのテスト (SCS、SCC) を含むすべての条件述語が有効です。

CCR に関する問題は、何よりもまず MC68000では許可されていないことです (単に存在しないため、MC68010 で導入された拡張機能です)。CCR から MOVE を実行すると IllegalInstruction がトリガーされるのか、それとも SR から MOVE にサイレントに変換されるのかはわかりません (エンコーディングはほぼ同じで、MOVE SR のみがワード サイズで、MOVE CCR はバイト サイズです)。

また、代わりに SR からの MOVE を使用しないでください。これは、x > 0 のすべての MC680x0 で失敗します。これらのプロセッサでは命令がスーパーバイザーのみ (特権) であるためです。

SR へのアクセスには、家族内でのこのような違いがあるため、細心の注意が必要です。

于 2014-06-04T14:05:52.707 に答える