Столкнулся с очень интересной ситуацией. Суть в следующем. Вот код на ассемблере: Код (Text): mov al,81h ; = +-129 mov bl,80h ; = +-128 cmp al,bl ja _ja ; если al > bl... al и bl берутся как безнаковые (1) jg _jg ; если al > bl... al и bl берутся как ЗНАКОВЫЕ! jmp quit _ja: ; выполняется код здесь, так как 129 > 128 jmp quit _jg: ; выполняется код здесь, так как OF = SF и ZF = 0, НО... -129 < -128 !!!!! quit: Так вот. В данном коде выполнится условный переход по метке _ja (так как 129 > 128 (по состояниям флагов тоже все верно: CF = 0, ZF = 0, SF = 0 OF = 0)). Но, если закоментить строку (1), то переход выполнится и по метке _jg, хотя казалось бы, числа берутся как знаковые: -129 < -128, то есть перехода быть не должно, однако изходя из состояния флагов все верно: SF = OF и ZF = 0 Если просчитать все на листочке, то все вроде бы ок. Но где же здравый смысл ? Ведь -129 < -128 Мозги кипят уже. В чем дело то ? Или я что то упустил ?
Напиши простенькую прогу выводящую на экран рядом знаковое и беззнаковое представление числа - сразу увидишь что 81h это ни разу не -129