6502组装问题:当一系列计算中有多个SBC时,我是否应该为每个SBC提供一个SEC实例



根据本网站;主要用途";对于CLC,它表示:

如果要进行一系列加法(多字节加法(,则只有第一个ADC前面是CLC,因为进位功能是必要的。

;主要用途";对于SBC,它表示:

您总是在SBC操作之前SEC(设置进位标志(,这样您就可以判断是否需要一个";借用";。

换句话说,对于一系列连续的ADC操作,您只需要在第一个操作之前有一个CLC,但在一系列连续SBC操作之前,每个操作之前都应该有一个SEC。这是正确的吗?

如果要进行一系列加法(多字节加法(,则只有第一个ADC前面有CLC,因为进位功能是必需的

这篇文章写得有点误导。如果您使用一系列ADC来实现多精度加法,例如添加两个16位或32位数字,那么您只需要在第一个数字之前添加CLC。但是,如果您有几个连续的ADC正在添加不相关的8位数字,那么您希望在每个数字之前都有一个CLC。否则,一个加法的进位将传播到一个不相关的和中。

那么SBC的情况完全类似。如果你正在做几个不相关的8位减法,你想在每个减法之前进行SEC。如果你使用一系列SBC来实现16位或32位减法等,那么你只需要在第一个之前使用SEC。

6502中的数字加法和减法没有区别。因此,CLCSBC表现相同。在下一次操作之前清除或设置进位标志完全由您决定。您还应该了解CLC可以与substraction一起使用,SBC可以与addition一起使用。例如

lda #$40
clc
adc $10
sta $1000
inc $1000

在本例中,我们将$10内存地址值添加到$40,然后将最终结果增加一。相反,我们可以这样做。

lda #$40
sec
adc $10
sta $1000

这将在没有额外INC操作的情况下为您提供相同的结果。

CLCSEC用例非常相似,与您最初的问题没有区别。但您不应该将它们直接与加法和减法联系起来。你应该经常问这样一个问题:;在这个阶段我需要哪个进位状态"并且如果需要则相应地使用CLCSEC

最新更新