Почему флаги V нельзя объединять по OR?
Вид для печати
Лень проверять, но интуитивно мне так кажется)
---------- Post added at 00:07 ---------- Previous post was at 00:06 ----------
Интерпретивная - это обычная эмуляция. В данном случае, она бы торомозила раз... в 4 точно.
Рекомпилируемая - это сначала в полу-автоматическом режиме программа перекомпилируется под PDP11, а потом уже этот нативный код запускается.
Но это только идея.
Полагаю, что это ошибочное ощущение.
Дело в том, что и C, и V - это "циклические" флаги, поэтому механизмы их "наследования" в цепочных операциях не могут быть разными.
Т.е. если "суммарный" признак C двух операций можно и нужно определять по OR - значит и признак V - тоже.
Признак Z двух операций нужно определять по AND, а признак N - по результату последней (вроде так)..
Ну тогда вот вам пример.
В итоге, в обоих двух последних каскадах получили флаги V, хотя финально он должен быть сброшен.Код:Складываем два числа 0x7FFF.FFFF и 0x8001.0001
0x8001.0001 - это -0x7FFEFFFF
Понятно, что в сумме они нам дадут 0x0001.0000
Где флаг V = 0, т.к. арифметического переполнения не было.
Теперь вычисляем каскадно.
ADD L1,L2 L2 = 0xFFFF + 0x0001 = 0x0000
ADC H2 H2 = 0x7FFF + C = 0x8000 (V установлен)
ADD H1,H2 H2 = 0x8000 + 0x8001 = 0x0001 (V установлен)
При эмуляции команды ADD X,Y признак V определяется так:
Код:if( ((X < 0 && Y < 0) || (X >= 0 && Y >= 0)) &&
((Res < 0 && Y >= 0) || (Res >= 0 && Y < 0)) )
{
PSW |= V;
}
---------- Post added at 00:31 ---------- Previous post was at 00:25 ----------
Значит, флаг V цикличен с периодом на один бит меньше, чем флаг C, поэтому за один 16-битный цикл прибавлений единицы - флаг C установится один раз, а флаг V - два раза.
Я правильно понял?
Нет, он цикличен с таким же периодом, но со смещением на пол-периода.
Например, для 8-битных чисел, точка перехода для C - это 0xFF, а точка перехода для V - это 0x7F.
---------- Post added at 00:38 ---------- Previous post was at 00:34 ----------
Кстати, смею предположить, что корректно будет брать флаги V с двух последних каскадов сложенные по xor.