我不明白 SBC 是怎么回事

I don't understand what's going on with SBC

我刚开始学习 6502,因为我想创建一个 Atari 2600 游戏。

我试过这个代码:

LDA #
STA 
LDX #
TXA
SBC 
BRK

然后我得到值 A=$00,并将标志 Z 和 C 设置为 1。但我认为 A 中的值必须是 $01。

如果我更改值,因为我可能做错了减法:

LDA #
STA 
LDX #
TXA
SBC 
BRK

我得到值 A=$fe,并将标志 N 设置为 1。

发生了什么事?

SBC是进位减法。如果在 SBC 指令之前 C 为 0,它会比您预期的多减 1。

将 SEC 放在 SBC 之前。

进位标志是SBC指令的输入,将其设置为1执行减法而不借位。

这里的指令集很清楚:http://www.obelisk.me.uk/6502/reference.html#SBC。它说:

This instruction subtracts the contents of a memory location to the accumulator together with the not of the carry bit

为避免此问题,请始终在 SBC 之前使用 SEC 指令,如下所示:

LDA #
STA 
LDX #
TXA
SEC        ; for correct next subtraction with SBC
SBC 
BRK