liuqionline 发表于 2012-03-22 22:09

为什么 x86 和 arm 的带进位减法会有这么大的不同?

在x86计算机里的SBB指令是这样的,sbb dest,src;
dest 减去 src ,还要减去 CF 位,结果送 dest 。
而在 ARM 计算机里,sbc{cond}{s} Rd,Rn,operand2;
Rn 减去 operand2 ,再减去 C 条件标志位的“非”,结果送到 Rd 中。

一个是减去 CF ,一个是减去 CF 的非,

我还不会 ARM 汇编的 debug ,但是猜是这样的:

ARM 计算机里,确实把 减法变成了补码的加,***并以此作为根据来设置标志位***

比如假设是16位的ARM, 3-2 ,变成了补码相加,即 0000 0011h + 1111 1110h ,这样,本来不该出来进(借)位的,确实出现了进(借)位被置 1 ,所以只好减去 CF 的非,

而 X86 计算机里,因为机制不一样,所以不用取非,

是不是这样,求指教! Orz Orz Orz

liuqionline 发表于 2012-03-23 12:13

有没有人在啊?

cjaizss 发表于 2012-03-23 13:12

别这么认为,按照机器规定的做就行了
页: [1]
查看完整版本: 为什么 x86 和 arm 的带进位减法会有这么大的不同?