
www.Usenet.com
| <-- __Chronological__ --> | <-- __Thread__ --> |
If I remember right, this is a counter application. Forget the 16-bit ALU and use a 32-bit counter instead, and avoid all this headache. KISS. Peter Alfke ========================== Glen Herrmannsfeldt wrote: > > "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__ --> |