2014-12-06 35 views

回答

4

我们从小学知道

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上反转进位。