Ответ 1
Только переполнение, если вы интерпретируете эти значения как числа без знака, - если вы интерпретируете свой 0x84
как подписанный, то определенно переполнение:
- 0x84 интерпретируется как подписанное 8-битное значение -124
- 0x30 интерпретируется как подписанное 8-битное значение 48
- -124 - 48 = -172
-172 находится за пределами диапазона подписанного 8-битного значения (от -128 до +127) и поэтому устанавливается флаг OF
. Вы должны проверить CF
, который указывает на неподписанное переполнение.
Из Руководство разработчика программного обеспечения для разработчиков Intel 64 и IA-32, том 2 для CMP:
Сравнение выполняется путем вычитания второго операнда из первого операнда и затем установки флагов состояния таким же образом, как и инструкция SUB.
и для SUB:
Команда SUB выполняет целочисленное вычитание. Он оценивает результат как для целочисленных операндов с подписью, так и без знака и устанавливает флаги OF и CF для указания переполнения в подписанном или неподписанном результате соответственно. Флаг SF указывает знак подписанного результата.