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.

Другие вопросы по тегам