2

私は 6502 プロセッサのエミュレートを「完了」しており、現在テスト段階にあります。私は初心者なので、この 1 つの問題にすでに数時間悩まされています。基本的には自作のROMと誰かが作成したログであるNESテストに従っています。メモリをステップスルーした後、すべてのレジスタにあるはずの値が示されています。アキュムレータの値が 0x40 で、最初の引数 (メモリ pc + 1) が 0x41 に等しい場合でも、即時の SBC 命令の後にオーバーフロー フラグがクリアされることをログが示している部分に行き詰まっています。つまり、0x40 ~ 0x41 は 0xFF、つまり -1 である必要があり、オーバーフローが発生したということですよね? オーバーフロー フラグに関する記事を読みましたが、また、値が大きすぎたり小さすぎたりして符号付きバイトに保持できない場合にオーバーフローが発生し、反対側にオーバーフローすることを示しています (つまり、2 8 ビットの正が 8 ビットの負になり、その逆も同様です)。だから私は間違った方法を考えていますか?これはログ行です:

CBC6  E9 41     SBC #$41    A:40 X:AA Y:73 P:E5 

その次の行は、P レジスタが 0xA4 になったことを示しています。これは、キャリー フラグとオーバーフロー フラグの両方がクリアされたことを意味します。キャリー部分は取得できますが、オーバーフロー部分は取得できません。これは次の行です。

CBC8  20 62 F9  JSR $F962   A:FF X:AA Y:73 P:A4

ところで; その2行目は私の主張を証明しています.Aレジスタは実際に0xFFになり、符号付きバイトの0xFFは256 - 255 = -1に等しくなります....

4

1 に答える 1

2

あなたが正しく言うように、結果が収まらない場合、オーバーフローは符号付き操作用です。符号付きバイトは -128 ~ +127 の値を保持できるため、-1 はその範囲にうまく収まることに注意してください。0 は表現可能な範囲の中間にあるため、0 を超えたことは符号付きオーバーフローとは関係ありません。署名のないキャリーに対してのみ興味深いものです。オーバーフローの場合、境界は 0x80 (-128) にあり、これは符号なし操作には関係ありません。

于 2013-06-07T14:58:15.663 に答える