Расчет флагов
Этот документ создан для 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