проверить условие типа Код (Text): if ((a<0)and(b>0))or((a>0)and(b<0))then можно так Код (Text): if a xor b<0 then то есть Код (Text): xor eax,ebx jnl @false -//- @false:
murder Имхо, не совсем. == if a*b<0 then , что на асме при знаковых a и b можно привести к xor eax,ebx jns @false
_basmp_ я и не говорил, что это одинаковые вещи просто в данном случае если результат отрицательный - это именно -1.
1) результат test ebx,eax и test eax,ebx будет одинаковый [ удалено Mikl___] 3) проверка, что в двух регистрах ноль or eax,edx 4) div/idiv edx, div/idiv dx, div/idiv ah будут давать "деление на ноль" при любых значениях в edx и eax
Mikl___ Для idiv - неверно, edx:eax=FFFFFFFF:FFFFFFFF замечательно знаково делится на edx=FFFFFFFF, выдавая eax=1 и edx=0.
Сколько значений можно поймать одним cmp и несколькими jcc? У меня выходит пять (и два диапазона): Код (Text): cmp al, 2 jz al_02 ; al==2 jc al_be_01 jo al_80_or_81 js al_in_82...FF ; al in [0x82, 0xFF] al_in_03...7F: ; al in [3, 0x7F] ;... al_be_01: jpe al_01 ; al==1 al_00: ; al==0 ;... al_80_or_81: jpe al_80 ; al==0x80 al_81: ; al==0x81
baldr Если регистр можно портить, то как минимум 8: Код (Text): shl al,6 jc switch2 jz case0 jp case3 js case2 case1: switch2: jz case4 jp case7 js case6 case5: Ну а если смотреть по диапазонам и учитывать флаг OF, то при другой инструкции "сравнения"(разрушающей) может быть больше вариантов.
KeSqueer Смущает, процессору одинаково в каком порядке стоят флаги, главное, что те выставлены или сброшены, чего я не учел. Представляю инструкцию JBCZOS .LABEL
Black_mirror, Где cmp? В общем-то верно: из шести арифметических флагов остаются четыре (AF трудно употребить, а OF от длинного сдвига дуреет). Это в идеале даёт 16 вариантов (после shl al, 5), однако загвоздка в том, что PF слишком глобален и путает, скажем, 1 и 2. Но выход есть: так как старший из трёх выживших бит проверен через SF, влияние на чётность оставшихся двух можно легко различить. Табличный переход, естественно, экономнее. В принципе эта эквилибристика полезна скорее реверсеру чтобы понимать, куда ветер сдувает управление. ----8<---- KeSqueer, Флаги неортогональны.