Расчет флагов

Материал из Emuverse
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

В данной статье описываютя алгоритмы расчета значений регистра состояния процессора (регистра флагов).

В следующих алгоритмах используются следующие обозначения (предполагается, что вычисления 8-битовые):

  • A: Аккумулятор, первый операнд;
  • d: второй операнд;
  • r8: результат вычислений при использовании 8-разрядной переменной;
  • r16: результат вычислений при использовании 16-разрядной переменной;

Перенос

  • для r8: CY=1 если A>r при сложении, CY=1 если A<r при вычитании;
  • для r16: просто
    • r16>>8&1 (Си)
    • (r16 shr 8) and 1 (Паскаль);


half carry: like you said it's (r^A^d)&0x10

overflow: ((A^r)&(d^r))>>5&4 for add, ((A^d)&(A^r))>>5&4 for sub