После некоторого прочтения на http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt, я понимаю, что флаг переноса используется для указания некоторой «потери данных» / «за пределами», а флаг переполнения используется для указания «старший значащий бит включен / выключен, тогда как онибыли выключены / включены ранее ".Я также видел другой ответ, который дает подсказку при проверке флагов для чисел со знаком / без знака:
«проверять наличие отрицательных и переполненных флагов при работе со знаковыми числами и переносить флаги с беззнаковыми». (извиняюсь, что не могу найти этот ответ снова для справки)
Я понимаю ассоциации флагов, но, насколько я читал, примеры проверки флагов указывают толькокогда установлены флаги, и Я действительно не понимаю использования флага переноса и флага переполнения за пределами проверки ошибок.
Например, флаги для ja
и jg
, Iпрочитайте ответ, который гласил:
ja прыгает, если CF = 0 и ZF = 0 jg прыгает, если ZF = 0 и SF = OF
( Разница междуJA и JG в сборке )
Я понимаю, для чего используется флаг нуля (чтобы проверить, что они не равны), но не так много для CF и SF / OF.
Ниже приведен мой удар по интерпретации, игнорирующий ZF как предварительное условие
ja (unsigned)
: если CF = 0, «заимствовать» нетиз первого операнда для вычитания.Следовательно, если ZF = 0, сравнение верно.
jg (signed)
: если SF (мы называем это отрицательным флагом, я считаю) и OF (мы называем это флагом oVerflow) оба равны 0, это означает, что оба операндаположительны и результат также положительный, что указывает на lhs> = rhs; не могу обернуться вокруг случаев, когда они оба равны 1 или SF! = OF, так как я не вижу, как это указывает lhs> = rhs и lhs
Редактировать: я продолжал тестировать случаи, когда SF = 1 и OF = 1, но я встречал только случаи, когда они оба равны 0. Поэтому я не понимаю, почему SF = OF работает как сравнение.Например, 1000–1000, 1000–0100. или Я неправильно понимаю намерение этого сравнения, что оно никогда не достигнет SF = 1 и OF = 1, только если они не равны друг другу,результат будет ложным?
Спасибо, что нашли время, чтобы прочитать это и любые указатели относительно того, как флаги используются в этом примере, как флаги используются в общем коде сборки, будет принята с благодарностью.Дайте мне знать, если мне не хватает необходимой информации.