Здравствуйте, CreatorCray, Вы писали:
CC>INC EAX выставит SF при знаковом переполнении, так что CMP там в общем то и не нужен.
Нужен. Если мы сделаем INC на -8 (0xFFFFFFF8), то получится 0xFFFFFFF9, и SF==1.
Прыжки вокруг флагов, инкрементов, и вычитаний нужны только оттого, что компилятор не может статически решить уравнение x+1<x.
То есть для signed типов он решение находит (просто неверное с т.з. человеческой логики), а для unsigned — увы.
Если бы мог, то он бы просто заменил всю арифметику на сравнение с единственным (для каждого типа) верным решением.
Поэтому если двигаться вдоль логики данного кода, то там будет инкремент, сравнение, конверсия флагов в результат.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.