根据this website,在CLC
的“主要用途”下,它指出:
如果要进行一系列加法(多字节加法),则只有第一个ADC
前面有CLC
,因为进位特征是必需的。
在SBC
的“主要用途”下,它指出:
您总是在SBC
操作之前执行SEC
(设置进位标志),这样您就可以知道是否需要“借用”。
换句话说,对于一系列连续的ADC
操作,您只需要在第一个操作之前有一个CLC
,但是在一系列连续的SBC
操作之前,您应该在每个操作之前都有一个SEC
。这是否正确?
根据this website,在CLC
的“主要用途”下,它指出:
如果要进行一系列加法(多字节加法),则只有第一个ADC
前面有CLC
,因为进位特征是必需的。
在SBC
的“主要用途”下,它指出:
您总是在SBC
操作之前执行SEC
(设置进位标志),这样您就可以知道是否需要“借用”。
换句话说,对于一系列连续的ADC
操作,您只需要在第一个操作之前有一个CLC
,但是在一系列连续的SBC
操作之前,您应该在每个操作之前都有一个SEC
。这是否正确?
2条答案
按热度按时间z9gpfhce1#
如果要进行一系列加法(多字节加法),则只有第一个ADC前面有CLC,因为进位功能是必需的
这是一种误导性的写法。如果您使用一系列ADC * 来实现多精度加法 *,例如,将两个16位或32位数字相加,那么您只需要将
CLC
放在第一个数字之前。但是,如果您有几个连续的ADC要将 * 不相关的 * 8位数字相加,那么您需要在每个ADC之前都有一个CLC。否则,来自一个加法的进位将被传播到不相关的和中。SBC的情况也是类似的。如果你正在做几个不相关的8位减法,你需要在每个减法之前进行SEC。如果你正在使用一系列SBC来实现16位或32位减法等,那么你只需要在第一个减法之前进行SEC。
5q4ezhmt2#
在6502中,加法和减法是没有区别的,所以
CLC
和SBC
的行为是一样的,在下一次运算之前是清除进位标志还是设置进位标志完全由你决定。你还应该明白CLC
可以用于减法,SBC
可以用于加法。例如:在这个例子中,我们把$10的内存地址值加到$40,然后把最后的结果加1。
这将给予相同的结果,而无需额外的
INC
操作。CLC
和SEC
用例非常相似,与您最初的问题没有任何区别。但是您不应该直接将它们与加法和减法联系起来。您应该始终问这样一个问题:“在此阶段我需要哪种进位状态?”如果需要,请相应地使用CLC
和SEC
。