
www.Usenet.com
| <-- __Chronological__ --> | <-- __Thread__ --> |
"Kevin Becker" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Francisco Rodriguez wrote: > > As your numbers are 32-bit wide, and overflow condition is a flag > > about the result of the _whole_ v := v + i operation, it can be determined > > by the MSB bits only (that is, from columns 31 and 30 of the addition). > > Thank you! I think I used the wrong word "underflow". What I mean is: > if "i" is negative, it might be that abs(lo(i)) is greater than lo(v). Yes, underflow is the right word. It isn't used very often, though. > What happens then? An example: > > v = 1234 0100 hex > i = 0000 0101 hex > > The operation for the lo bits will result in FFFF and the carry will > be set. Then when I add the high bits, it will be 1235 when it should > actually be 1233. How do I save that the first operation was not an > overflow but a borrow? (I don't know how to call this. That's what I > mistakenly called underflow). Hmm. X'0100' + X'0101' is X'0201' with no overflow. If you want to add a small twos complement negative number, then that number will have F's in the high bits which will take care of the 1233 part. In that case, borrow means that there is no carry, otherwise there is a carry. Say v=X'12340100' and i is negative 257. Negative 257 is X'FFFFFEFF' X'0100' + X'FEFF' is X'FFFF' with no carry. X'1234'+X'FFFF' is X'1233' with carry. The carry into the high bit is also 1, so that there is no overflow or underflow. > Glen Herrmannsfeld wrote: > > After the high halfword add, you compare the carry out to the carry out of > > the sign bit to the carry in of the sign bit. If they are different then it > > is overflow or underflow. The value of such bit tells you which one. > > So does that mean I have to modify my architecture and set TWO flags? > A carry flag and a negative flag (if sign of last operation was > negative), and then the Add-With-Carry instruction would look at both? No, add with carry doesn't need to know. You only need the two flags at the end if you want to detect overflow and underflow. -- glen
| <-- __Chronological__ --> | <-- __Thread__ --> |