i think you did subtraction incorrectly. My result is:
8FFE----------> 1000 1111 1111 1110
0FFF----------> 0000 1111 1111 1111
----------------------------------
7FFF----------> 0111 1111 1111 1111
what happened is that operation borrowed from sign bit only. This means OF flag should be set. Read here http://stackoverflow.com/questions/791991/about-assembly-cfcarry-and-ofoverflow-flag, http://en.wikipedia.org/wiki/Carry_flag, http://en.wikipedia.org/wiki/Overflow_flag. It means that is it was signed operation it is incorrect. if it was unsigned then fine.
Andrey
2010-05-24 11:53:47