Насчет Carry и HalfCarry
они устанавливаются при изменении 8(а не 7-го, те бита за пределами 8 битного регистра) и 4 битов (то есть когда происходит перенос или заем байта или полубайта)
Для примера:
0100'0100+0100'0100=1000'1000 => CF=0,HC=0, но P/O=1
1000'0000+1000'0000=1'0000'0000 => CF=1,HC=0, P/O=1
0000'0000-0000'0001=1'1111'1111 => CF=1, HC=1,P/O=1
HC используется для коррекции после сложения и вычитания двоично-десятичных чисел