NEG инструкция на ассемблере устанавливает флаг переполнения
Я хочу знать о инструкции NEG, это также влияет на флаг переполнения!!!.. я узнал, что это просто отрицание значения переменной, но не мог знать, что это влияет на флаг переполнения
2 ответа
Если вы хотите узнать, что делают инструкции, обратитесь к справочному руководству.
Важная ссылка, а именно руководство по набору инструкций Intel, говорит об инструкции NEG:
Flags Affected
The CF flag set to 0 if the source operand is 0; otherwise it is set to 1.
The OF, SF, ZF, AF, and PF flags are set according to the result.
Таким образом, ясно, что инструкция NEG устанавливает флаг O; поэтому он влияет на флаг O, который является первоначальным вопросом OP. И это происходит каждый раз, когда выполняется. (Люди не должны путать "не изменилось" с "не установлено").
В этом конкретном справочном руководстве не предусмотрен конкретный алгоритм, чтобы указать, когда О установлен на ноль или единицу. Тем не менее, процессоры Intel являются двумя дополнительными машинами. Инструкция вычитания имеет точно такое же слово. NEG X эквивалентен (0 ПОДРЯД X). Поэтому NEG должен установить бит O в соответствии с "переполнением" для (0 SUBTRACT X); это установит O, когда X 0x8000000.
Изучив Руководство по базовой архитектуре Intel, мы обнаружим следующее описание бита OF:
OF (bit 11) Overflow flag
— Set if the integer result is too large a positive number or too small a
negative number (excluding the sign-bit) to fit in the destination operand;
cleared otherwise. This flag indicates an overflow condition for signed-integer
(two’s complement) arithmetic
подтверждая наше понимание.
если ты
neg
Значение
80h
, операнд не изменяется, но флаг переполнения действительно установлен в
1
.