Re[32]: Carbon
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.04.24 06:07
Оценка: 1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>INC EAX выставит SF при знаковом переполнении, так что CMP там в общем то и не нужен.

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