0 xor 0 = 0 Верно, самому было лень об этом думать =) в каком случае будет CF=1 Дык когда из нуля единицу вычитаем, нет? флаг же не бывает больше?
> Дык когда из нуля единицу вычитаем, нет? флаг же не бывает больше? Правильно, если приемник < источник'а, то CF=1, это я протупил.
boozook Да, с sub + jc получается красиво. Для наглядности можно заменить эквивалентом: Код (Text): cmp eax,flag jb @@label ;jb = jc, если unsigned ниже
bogrus "Можно ещё добавить sbb flag,0" Не понял, а какой тогда должен быть переход ? (1-0-1=0 и 0-0-0=0 - неоднозначность) PS: Black_mirror "нажал кнопку" раньше.
leo Для наглядности можно заменить эквивалентом Даже нужно, если обнулять флаг при помощи eax Код (Text): and flag,eax ,чтобы избавиться от зависимости
Ну, если flag - переменная локальная, тогда одинаково получиться... если нет, и есть свободный регистр, то короче будет обращаться к ней по указателю.
Asterix, boozook Чего-то я не понял, чем отличаются по размеру and, mov и dec. По крайней мере, если вначале загрузить адрес flag: Код (Text): mov edx, offset flag cmp eax,[edx] jb @@label ... @@label: dec [edx] ;==and [edx],eax == mov [edx],eax здесь любой из 3-х приведенных вариантов будет двухбайтным
leo Просто, если не загружать адреса в edx, а использовать непосредственную адресацию, тогда mov будет 5 байт(т.к. один из операндов аккумулятор), а and и dec по 6...
В случае с косвенной адресацией этого приемущества уже нет, т.к. используется другой опкод для mov'а.