Given Byte1 and Byte2 in binary. How to determine whether Byte1 - Byte2 results in a borrow or not?
I've seen 10 different ways:
- Iterate over the bits in
Byte1andByte2in parallel, if we ever come across a bit inByte2that is greater than its equivalent bit inByte1, we have a borrow. - If 'Byte1 < Byte2` we have a borrow
I'm asking because I'm writing a CHIP-8 interpreter. One of the opcodes is 8XY5: Register Y is subtracted from Register X. Register F is set to 0 when there's a borrow, and 1 when there isn't
I've seen implementations that did the second approach:
if(Register[X] < Register[Y])
Register[0xF] = 0; // there is a borrow
else
Register[0xF] = 1;
Register[X] -= Register[Y];
That doesn't really make sense to me. Take 5 and 3 in binary for example:
0101 -
0011
----
0010
According to their approach, there is no borrow, but we can clearly see that there's a borrow happening in the second bit (0 - 1)
I'm confused. Any help would be appreciated!
This is definitely confusing language. What they intend to mean is whether there is ultimately a borrow from beyond the highest-order bit. The point is to tell whether the difference of two positive numbers is negative, and then paired with the skip instruction you can do conditional jumps ("if x < y { ... }"). One way to think about it is extend the first number with an initial zero bit:
That first 1 reflects the "borrow."