我不明白 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
我刚开始学习 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