Я узнал, если я складываю два числа в сборке и их сумма равна 0, CF устанавливается равным единице. В других случаях нет. Не понимаю почему. Есть идеи, пожалуйста? Пример:
__asm {
mov eax, 0
mov ebx, 5
mov edx, -5
add ebx, edx
adc eax, 0
}
результат 1
Я думаю, он отвечает сам по себе, просто дополнение до двух ... Флаг переноса делает больше, чем просто сообщает вам, есть ли у вас переполнение без знака.
00000101
+11111011
===========
111111110
00000101
+11111011
===========
00000000
вычитание дает те же 5 - 5:
111111111
00000101
+11111010
===========
00000000
вы можете видеть, что в обоих случаях нет подписанного переполнения
Математика UNSIGNED, хотя это 0xFB + 0x05 = 0x100, что является беззнаковым переполнением, следовательно, флаг.
Я случайно использовал 8 бит, просто хотел, чтобы их было как минимум 4 или больше. 800 бит или 8, или 80, или 32, все работает так же, как вы видите ...