Я пытаюсь осознать флаги переполнения и переноса в x86.
Насколько я понимаю, для добавления дополнительных чисел со знаком 2 флаги могут быть сгенерированы только одним из четырех способов (мои примеры - 4-битные числа):
- pos+pos = neg (overflow)
- 0111 + 0001 = 1000 (7 + 1 = -8)
- pos+neg = pos (carry)
- 0011 + 1110 = 0001 (3 + -2 = 1)
- neg+neg = neg (carry)
- 1111 + 1111 = 1110 (-1 + -1 = -2)
- neg+neg = pos (overflow & carry)
- 1000 + 1001 = 0001 (-8 + -7 = 1)
Итак, в сборке x86 вычитание B из A генерирует те же флаги, что и добавление A и -B?