перенос / переполнение и вычитание в x86

Я пытаюсь осознать флаги переполнения и переноса в x86.

] Насколько я понимаю, для добавления дополнительных чисел со знаком 2 флаги могут быть сгенерированы только одним из четырех способов (мои примеры - 4-битные числа):

  1. pos + pos = neg (overflow)
    • 0111 + 0001 = 1000 (7 + 1 = -8)
  2. pos + neg = pos (перенос)
    • 0011 + 1110 = 0001 (3 + -2 = 1)
  3. neg + neg = neg (перенос)
    • 1111 + 1111 = 1110 (-1 + -1 = -2)
  4. neg + neg = pos (переполнение и перенос)
    • 1000 + 1001 = 0001 (-8 + -7 = 1)

Итак, в сборке x86 вычитание B из A генерирует те же флаги, что и добавление A и -B?

13
задан Robz 23 January 2012 в 00:07
поделиться