我刚刚开始学习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.
发生了什么?
答案 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