Поместить в регистр (количество крайних нулей)-1 Иначе говоря реализовать функцию (в бинарном представлении) 0x...0 -> 1 1x...0 -> 0 0x...1 -> 0 1x...1 ->-1 Линейно индексное решение не приветсвуется. Лучше решения которые используют один (этот же самый) регистр.
Как я понял, речь идет про биты 31 и 0. Вход - eax, выход - al. sar eax, 1 salc not al js l1 inc al l1: inc al
Решил немного не ту задачу: этот код считает суммарное число нулевых разрядов слева и справа. 103A00F0h -> 3+4-1=6 Код (Text): shr eax,1 .l: adc eax,eax test eax,eax jg .l bsf eax,eax jnz .l1 mov eax,32 .l1: dec eax
BLOb Прийдётся ещё одну инструкцию добавить (типа movxs eax,al) Выход должен быть в тот же регистр. Всем кто отозвался, спасибо. Читаю с интересом ваши идеи.
вот это я обоср#лся. SALC FF возвращает, а не 1. Код (Text): sar eax, 1 salc js $+3 inc al Я выиграл !
The Svin У меня тут вопрос возник: что такое линейно индексное решение? Это случайно не то, что у меня ? =)
Нет Это когда ты находишь формулу которая переводит входные значения в упорядоченные индексы по которым потом происходит look up по таблице. Линейные - потому что адреса в массивах упорядоченных однотипных данных описываются линейными уравнениями типа база+индекс*размер, тоже что и y=a+х*b где b - угловой коэффициент в линейных уравнениях, ну а в адресации это понятно размер элемента.
Ага, это будет так: Код (Text): rol eax, 1 and eax, 3 movsx eax, byte[lockutable+eax] lockutable db 1, 0, 0, -1
The Svin, а когда ты выложишь свои варианты решения этих задачек ? Возможно твои идеи подогреют "большие мозги" для новых решений. Я с большим интересом наблюдаю за происходящим, когда же будут названы победители ? )
Э... Ну это мне меньше всего хочется. Тут такое дело - есть общий алгоритм как задача решается и его машинная "доводка". Вот когда какое нибудь общее решение эффективно на уровне "по башке лопатой НА!.." то даже творчески сильные люди несколько сникают и переключаются на поиск победы "доводкой" а это уже резко менее интересно. Ну я вроде бы где-то выложил решения (не "доведённые") просто чтобы показать новое направление. Чего-то продолжения мысли не увидел, непонятно видимо? Для подсчёта строк из "Кольца и стрелы" можно было применить (один лишь из вариантов) снятие (обнуление) младшей единично (x | (x-1))&((x | (x-1)+1) lea y,[x-1] or x,y lea y,[x+1] and x,y x | (x-1) - распространяет младший единичный вправо (заполнение ПМЕ) x & (x+1) обнуляет ПМН (термины КИС)
The Svin, ты так часто упоминаешь "Кольца и стрелы", что уже стало очень интересно почитать, с целью самообразования ). Если до книги еще далеко, может выложишь хотя бы статейку с имеющимися наработками ?
The Svin, я понял, т.е. ты не хочешь выкладывать свои варинты, чтобы у людей был стимул придумывать что-то новое, свое. И ты надеешся, что существует вероятность того, что кто-то выдвинет неожиданную и очень хорошую идею, которая может превзойти твои варианты ? Так ? ) Просто я говорил про те задачки, обсуждение которых уже вроде бы закончилось. Народ выдвинул много своих вариантов решения, и все, больше новых идей не наблюдается. Темы почти закрыты. Когда я спросил, будешь ли ты выкладывать свои варианты, я имел ввиду, что это может "освежить" обсуждение, подогреть появление новых идей. Вполне логично, ты так не считаешь ?
The Svin, действительно, выложил бы хоть некоторые наброски от "Кольца и стрелы", в образовательных целях для дзенствующих )