2017-01-28 2 views
0

Поскольку я готовлюсь к экзамену на сборку/процессорную архитектуру для школы на следующей неделе, я столкнулся с чем-то довольно запутанным.Является ли флаг отрицательного состояния N также установленным с переполнением?

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

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

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

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

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

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

Рассмотрим этот 4-разрядное дополнение в дополнение по 6 + 7 в качестве примера:

0110 
0111+ 
----- 
1101 = result 

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

+1

Да, он установлен. Флаг N - это просто копия самого значащего бита. Конечно, он может быть установлен без переполнения. – Jester

ответ

2

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

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

1

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

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

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

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

не отрицательным, но oveflowed.

Это означает, что отрицательный флаг не относится непосредственно к факту переполнения.

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

S = N xor V 

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

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

Смежные вопросы