assembly 6502装配问题:当一串计算中有多个SBC时,我是否应该为每个SBC创建一个SEC示例?

cqoc49vn  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(161)

根据this website,在CLC的“主要用途”下,它指出:
如果要进行一系列加法(多字节加法),则只有第一个ADC前面有CLC,因为进位特征是必需的。
SBC的“主要用途”下,它指出:
您总是在SBC操作之前执行SEC(设置进位标志),这样您就可以知道是否需要“借用”。
换句话说,对于一系列连续的ADC操作,您只需要在第一个操作之前有一个CLC,但是在一系列连续的SBC操作之前,您应该在每个操作之前都有一个SEC。这是否正确?

z9gpfhce

z9gpfhce1#

如果要进行一系列加法(多字节加法),则只有第一个ADC前面有CLC,因为进位功能是必需的
这是一种误导性的写法。如果您使用一系列ADC * 来实现多精度加法 *,例如,将两个16位或32位数字相加,那么您只需要将CLC放在第一个数字之前。但是,如果您有几个连续的ADC要将 * 不相关的 * 8位数字相加,那么您需要在每个ADC之前都有一个CLC。否则,来自一个加法的进位将被传播到不相关的和中。
SBC的情况也是类似的。如果你正在做几个不相关的8位减法,你需要在每个减法之前进行SEC。如果你正在使用一系列SBC来实现16位或32位减法等,那么你只需要在第一个减法之前进行SEC。

5q4ezhmt

5q4ezhmt2#

在6502中,加法和减法是没有区别的,所以CLCSBC的行为是一样的,在下一次运算之前是清除进位标志还是设置进位标志完全由你决定。你还应该明白CLC可以用于减法,SBC可以用于加法。例如:

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

在这个例子中,我们把$10的内存地址值加到$40,然后把最后的结果加1。

lda #$40
sec
adc $10
sta $1000

这将给予相同的结果,而无需额外的INC操作。
CLCSEC用例非常相似,与您最初的问题没有任何区别。但是您不应该直接将它们与加法和减法联系起来。您应该始终问这样一个问题:“在此阶段我需要哪种进位状态?”如果需要,请相应地使用CLCSEC

相关问题