bsr ecx,eax - сканирует eax начиная со старшего бита и сохраняет в ecx (если eax != 0) номер первого найденного еденичного бита, считая от нуля - это из Зубкова. Т.е. если eax равен 2, то в ecx должно быть 30. Я запускаю под Олей и bsr пишет в ecx 1! Как 1? 1 должен давать bsf, он это и дает. с ним проблем нет, но почему bsr тоже дает 1?
В двоичном представлении числа 2 всего один единичный бит под номером 1, поэтому bsf и bsr и выдают одно и тоже значение 1. Если возьмешь число 3, то bsf выдаст 1 (младший ед.бит), а bsr - 2 (старший ед.бит)
BSR поступает правильно. И документация тоже говорит правильные вещи: отсчёт идёт ОТ НУЛЯ, а не наоборот, чтобы от 31. Чёрт, не успел Просто БСР сканирует число с "конца", а БСФ - с "начала".
тогда вопрос: ax=2, что будет в cx после bsr cx,ax? 1? если да, то почему в Зубкове написано 14, как будто бы мы считаем биты с конца (всмысле 31-й -- 0, 30 - 1, ...)
у мя зубков 1999года бумажный. стр. 55, "...ного 1. Команда BSR сканирует источник, начиная с самого старшего бита, и возвращает номер первого встретившегося ненулевого бита, считая от нуля, то есть, если источник равен 0100 0000 0000 0010b, то BSF возвратит 1, а BSR - 14." источник нимного другой....
блин, лишний 0-лик и меня сложилось неправильное представление о bsr... странно,потому что у меня 2000. спасибо всем за ответы,разобрался