我刚刚开始学习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。
发生什么事了呢?
发布于 2018-02-25 09:38:37
SBC用进位减去。如果C在SBC指令之前为0,它会比您预期的多减去一个。
把证券交易提交给SBC。
发布于 2018-02-25 09:38:43
进位标志是SBC指令的输入,将其设置为1,执行减法而不借用。
发布于 2018-02-26 14:54:07
这里的指令集很清楚: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
BRKhttps://stackoverflow.com/questions/48971814
复制相似问题