与进位(SBC
,RSC
)解释进位标志(C)作为ARM减法操作的指令:ARM中进位标志的使用错误是否会减少指令?
- 0手段借
- 1意味着无借
为什么进位标志C
被反转做算术?
SBC R0, R1, R2 @ R0 = R1 - R2 - !C
与进位(SBC
,RSC
)解释进位标志(C)作为ARM减法操作的指令:ARM中进位标志的使用错误是否会减少指令?
为什么进位标志C
被反转做算术?
SBC R0, R1, R2 @ R0 = R1 - R2 - !C
我们从小学知道
a = b - c = b + (-c)
,并从基本编程类,否定三三两两的一些补充,我们颠倒了许多,并添加一个,这样
a = b + (~c) + 1
这完美的工作,因为当我们喂养加法器逻辑我们的价值观,我们反转第二个操作数,并反转进位。(没有减法逻辑你使用加法器做减法)
所以一些处理器实现选择反转进行。你已经在反转东西做减法,原始执行正常减法(无需借用)的msbit是1,当存在借位时,进位是0,因此反转执行把它称为“借”而不是进位(或者代替借位或借位或借位n)
哪种方法可以做到这一点,如果你有一个借位减去,那么你需要反转或不反转根据您的设计选择进行减法运算(正常无需借用)。
所以减法
a = b + (~c) + 1
当你级联减法(SBC),那么如果没有借那么
a = b + (~c) + 1
但是,如果有借那么下一阶段需要有一个1被移除,因此该sbc变成
a = b + (~c)
在这种情况下,进位是零。所以从加法器逻辑的角度来看,当你做一次借用减法操作时,你自然必须倒置第二个操作数,但如果你不得不借用并且携带1,那么它将携带0。
在SBC臂文档说
路=路 - RM - NOT(C标志)
因此,如果我们需要一个离开由于之前借那么C需要成为0否则C是1进去。
的增减基本上都在说
C标志= NOT BorrowFrom(操作)
因此,如果我们需要借用然后借用为true,所以C标志是不正确的或0。如果我们不需要借用,那么借用是假的0,而不是借用是1。因此,所有匹配,如果我们需要借入然后进入SBC C需要为0.
所以基本上ARM似乎没有修改加法器的执行。所以它不需要在SBC上反转进位。