Я думаю, что пришел, чтобы изучить варианты использования, когда установлен флаг переполнения: когда бит со знаком изменяется в арифметике со знаком. Например, следующие три случая:
# For example, with overflow:
mov $0b00100000, %al # 32
add $0b01100000, %al # 96
# ---------------------
# $0b10000000 # Notice how the signed bit is set so the answer is -128, not +128
# And with negative numbers (subtracting two negative numbers) where the sign =-bit is different
# mov $-0b00100000, %al #
mov $0b10000000, %al # -128
add $0b10000001, %al # -127
# ---------------------
# $0b00000001 # +1 -- again the sign bit changes, so we have the overflow on
# Doing the same thing but subtracting a positive number to get the overflow instead
mov $0b10000000, %al # -128
sub $0b00000100, %al # 4
# ---------------------
# $0b01111100 # + 124 -- result is positive, so again we have overflow
Однако в каких приложениях или вариантах использования используется флаг overflow
? В моих минимальных знаниях asm кажется, что флаги Z
ero и S
ign используются все время для сравнения, но в каких случаях используется флаг O
verflow?
JG
проверяетZF == 0 && SF == OF
- person Jester   schedule 27.09.2020SF == OF
? - person carl.hiass   schedule 27.09.2020SF = OF = 0
), либо отрицательный результат с переполнением (SF = OF =1
). - person Jester   schedule 27.09.2020cmp
— это вариант вычитания. Побитовые операции, как правило, безоговорочно очищают его. - person Nate Eldredge   schedule 27.09.2020