Расчет флагов: различия между версиями
Panther (обсуждение | вклад) (Новая: {{Emuverse}} for 8-bit add/adc, sub/sbc (it's similar with 16-bit opcodes) A=accumulator d=data to be added/subtracted, excluding carry flag r=result after calculation carry: simply ...) |
Panther (обсуждение | вклад) (перенос) |
||
Строка 1: | Строка 1: | ||
{{Emuverse}} | {{Emuverse}} | ||
В данной статье описываютя алгоритмы расчета значений регистра состояния процессора (регистра флагов). | |||
В следующих алгоритмах используются следующие обозначения (предполагается, что вычисления 8-битовые): | |||
A | * '''A''': Аккумулятор, первый операнд; | ||
d | * '''d''': второй операнд; | ||
* '''r8''': результат вычислений при использовании 8-разрядной переменной; | |||
* '''r16''': результат вычислений при использовании 16-разрядной переменной; | |||
== Перенос == | |||
* для '''r8''': <TT>CY=1</TT> если <tt>A>r</tt> при сложении, <TT>CY=1</TT> если <tt>A<r</tt> при вычитании; | |||
* для '''r16''': просто | |||
** '''<tt>r16>>8&1</tt>''' (Си) | |||
** '''<tt>(r16 shr 8) and 1</tt>''' (Паскаль); | |||
half carry: like you said it's (r^A^d)&0x10 | 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 | overflow: ((A^r)&(d^r))>>5&4 for add, ((A^d)&(A^r))>>5&4 for sub | ||
[[Категория:Приёмы программирования]] |
Версия от 10:22, 20 февраля 2008
Этот документ создан для 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