什么是无符号下溢以及subtraction produced a borrow
的关系是什么?这是ARM体系结构参考手册的摘录。
对于减法,包括比较指令CMP,设置C. 如果减法产生借位(即无符号,则为0) 下溢),否则为1。
从https://cwe.mitre.org/data/definitions/191.html开始,整数下溢意味着从负有符号值中减去一个值以获得正值(例如,使用2位系统,b10 [-2] - b01 [1] = b10 + b10 + 1 = b01 = +1)。我使用的事实是,在2的补码系统中,减法是位加法+ 1的加法。
无符号undeflow应该与整数下溢不同,因为相同的操作会产生正确的下限(例如b10 [2] - b01 [1] = b10 + b10 + 1 = b01 = +1)。但我不确定是什么原因导致无符号下溢情况。我也无法看到这与subtraction produced a borrow
时的情况有什么关系。
我有点明白,当b00 [0] - b01 [1] = b00 + b10 + 1 = b11 = 3时会发生无符号下溢。但由于它的无符号下溢而无法理解,因此会让人感到困惑。似乎产生了借款(没有产生进位) - 来自John Bollinger的回答A "borrow" is the subtraction analogue of a "carry".
然后,借用是一个携带的对立面?
答案 0 :(得分:2)
二进制减法是用加法完成的,它是二重补的美。从小学我们知道a - b = a +( - b)和二重补充告诉我们-b = ~b + 1(反转并加一)。所以a - b = a +(〜b)+ 1,你可以通过反转b并设置进位而不是清除它来做。 (反转b并反转进位)。
所以5 - 4
1111
101
+ 011
=====
001
这是用小学数学完成的,不会有借用。
和4 - 5
0001
100
+ 010
=====
111
如果这已经完成了小学数学,那将会借用。
并且您可以对其他位模式重复此操作,您将看到借用导致无执行且没有借位导致执行。
我们知道,当它是加法时,进位位是无符号溢出,有些处理器在减法时反转进位(就像反转进位和第二操作数一样),有些不,不得不看看武器细节在这个,但该位一般在进位标志中结束(如果处理器甚至有标志)。因此,基于文档或有时您必须通过这种方式破解(做实验)但没有执行反转是借用和进位相反。
我认为无符号下溢与借用相同,4 - 5表示您下溢。如上所述,未加固的4 - 5 = 7。但是签名4 - 5 = -1,对于加法/减法,处理器不知道从无符号签名那些是与程序员和/或更高级语言相关的概念。再两次补充美丽。
答案 1 :(得分:1)