Флаг отрицательного условия N также установлен с переполнением?

Готовясь к экзамену по сборке / архитектуре процессора в школе на следующей неделе, я натолкнулся на что-то довольно запутанное.

При выполнении двоичного сложения мы узнали о 4 флагах условий:

N = результат отрицательный

Z = результат равен нулю

C = операция произвела перенос

V = операция произвела переполнение

Но я не совсем понимаю, нужно ли устанавливать N-флаг при переполнении.

Давайте рассмотрим это 4-битное дополнение в дополнении 2 к 6+7 в качестве примера:

0110
0111+
-----
1101  =  result

Теперь при вычислении в 4-х битах с двумя числами дополнения это, очевидно, приводит к переполнению. Это должно привести к 13 (01101 в 5 битах), но приводит к -3, потому что это может быть отображено только в 4 битах. Итак, мой вопрос, установлен ли в этом случае и отрицательный флаг N? Потому что результатом является отрицательное число.

2 ответа

Решение

Я не могу ответить на этот вопрос наверняка, не зная точно, какой процессор вы используете, но обычно N устанавливается равным старшему (знаковому) биту результата, независимо от всех других флагов. Итак, в вашем примере будут установлены как N, так и V.

(N, Z и C - почти всегда простые функции битов, выходящих из ALU - C - вынос от сумматора, N - старший бит результата, а Z - просто НЕ (ИЛИ (все биты в регистре)). Это V, чье определение, скорее всего, будет варьироваться от процессора к процессору.)

В вашем случае с 4-битным примером рассмотрим следующие примеры:

  • 0001 + 1110 == 1111 (десятичное число: 1 + (-2) == -1)

Отрицательный, но без переполнения.

  • 1100 + 1001 == 0101 (десятичное число: (-4) + (-7) == 5; -11 будет без переполнения)

Не отрицательно, но переполнено.

Это показало бы, что отрицательный флаг не имеет прямого отношения к факту переполнения.

Но: вещь, которая обычно не объясняется: как только флаг переполнения означает, что знак неправильный, можно определить истинный знак результата как XOR отрицательного флага и флага переполнения:

S = N xor V

где S - флаг истинного знака (отсутствует непосредственно в схеме NZVC). Этот флаг фактически используется в операциях ветвления: когда, например, условие для BGT ((N xor V) or Z) == 0это действительно означает S or Z == 0или, другими словами, S == 0 and Z == 0,

Некоторые архитектуры набора команд, например AVR, иметь истинный флаг вместо отрицательного флага.

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