为什么 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 有没有人在啊? 别这么认为,按照机器规定的做就行了
页:
[1]