ファミコンで使われている6502の減算演算(sbc asm命令)でボロー(キャリーフラグのクリア)が発生した場合は?結果がマイナス(-1~-128)になるたびですか?
どうもありがとう!ありがとうSTeN
ファミコンで使われている6502の減算演算(sbc asm命令)でボロー(キャリーフラグのクリア)が発生した場合は?結果がマイナス(-1~-128)になるたびですか?
どうもありがとう!ありがとうSTeN
いいえ、結果は陽性である可能性もあります。
例:
lda #$10
sec
sbc #$f0
その後、キャリーはクリアされ、アキュムレーターは $20 になります。
減算後の正/負の値をテストするには、ステータス レジスタの N(負) フラグとそれを評価するブランチ (BMI/BPL) を使用します。
トミーの答えは正しいですが、私はそれを見るより簡単な方法を持っています.
6502 の ALU の操作はすべて 8 ビットなので、次のような減算を考えることができます ($65 と $64 の場合)。
01100101
-01100100
========
00000001
私がしているのは、減算がアキュムレータの 9 番目のビットが 1 に設定された 9 ビット (符号なし) 操作であると想像しているため、$65 - $64 は次のようになります。
1 01100101
- 01100100
==========
1 00000001
一方、$64 ~ $65 は次のようになります。
1 01100100
- 01100101
==========
0 11111111
新しいキャリー ビットは、結果の 9 番目の仮想ビットです。
基本的に、キャリーは、符号なし数値として解釈されるオペランドが符号なし数値として解釈されるアキュムレータよりも大きい場合に設定されます。または、衒学的であること
A < operand - 1 + oldcarry