我不明白SBC会发生什么

时间:2018-02-25 08:49:49

标签: assembly 6502

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

我试过这段代码:

LDA #$01
STA $01
LDX #$02
TXA
SBC $01
BRK

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

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

LDA #$02
STA $01
LDX #$01
TXA
SBC $01
BRK

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

发生了什么?

3 个答案:

答案 0 :(得分:4)

SBC减去携带。如果在SBC指令之前C为0,则它​​会比您预期的减去一个。

将SEC放在SBC之前。

答案 1 :(得分:2)

进位标志是SELECT master_beli.id_supplier,master_beli.id_karyawan FROM master_beli join supplier on supplier.id_supplier = master_beli.id_supplier join karyawan on karyawan.id_karyawan = master_beli.id_karyawan; 指令的输入,将其设置为1执行减法而不借用。

答案 2 :(得分:2)

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

  

该指令将内存位置的内容减去   累加器而不是进位位

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

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