根据本网站的说法,在CLC的“主要用途”项下,它指出:
如果要添加一系列内容(多字节加法),则只有第一个
ADC前面有CLC,因为进位特性是必要的。
在SBC的“主要用途”中,它指出:
您总是在
SEC操作之前设置SBC(设置进位标志),以便判断是否需要“借入”。
换句话说,对于一系列连续的ADC操作,在第一个操作之前只需要一个CLC,但是在一系列连续的SBC操作之前,应该在每个操作之前都有一个SEC。这是正确的吗?
发布于 2022-10-17 14:00:32
如果要添加一系列内容(多字节加法),则只有第一个ADC位于CLC之前,因为进位特性是必需的。
这写起来有点误导人。如果您正在使用一系列的ADC来实现多精度加法,例如添加两个16位或32位数字,那么您确实希望在第一个数字之前使用CLC。但是,如果您有几个连续的ADC正在添加不相关的8位数字,那么您希望在每个数字之前都有一个CLC。否则,一个加法的进位将被传播到一个不相关的和。
那么,SBC的情况完全类似。如果你正在做几个不相关的8位减法,你想要在每一个之前进行SEC。如果您正在使用一系列SBC来实现16位或32位减法等,那么您只需要在第一位之前使用SEC。
发布于 2022-10-24 09:22:15
6502中的加法和减号没有区别。因此,CLC和SBC的行为是一样的。在下一次操作之前清除或设置进位标志完全由您决定。您还应该理解CLC可以与子字符串一起使用,SBC可以与加法一起使用。例如;
lda #$40
clc
adc $10
sta $1000
inc $1000在本例中,我们将$10内存地址值添加到$40,然后将结束结果增加一个。相反,我们可以这样做。
lda #$40
sec
adc $10
sta $1000这将给出相同的结果,而不需要额外的INC操作。
CLC和SEC用例非常相似,与您最初的问题没有什么区别。但是,您不应该直接将它们与加法和减法相关联。你应该经常问一个问题:“在这个阶段,我需要哪种状态?”如果需要,请相应地使用CLC和SEC。
https://stackoverflow.com/questions/74098124
复制相似问题