Есть массив битов. Нужно установить по индексу один из них. Интересует оптимизация по скорости или по количеству команд (размер не важен) Можно ли опримизировать это? mov ecx, 555 ; индекс бита mov eax, ecx sar eax, 3 ; приращение в dword'ах and ecx, 31 ; индекс бита в пределах dword'а mov ebx, 1 ; да, 5 байт, но вроде быстрее xor inc sal ebx, cl ; подготовить бит lea eax, Mass[eax] or [eax], ebx ; установить бит Есть идеи?
Нда, намудрил я со сдвигами ) Ну, на две команды меньше. Спасибо Код (Text): mov ecx, индекс sar eax, 3 and ecx, 31 lea eax, Mass[eax] bts [eax], ecx
По количеству команд во всяком случае. Хотя затрудняюсь сказать, что быстрее. bts или mov reg,immed + sal reg,cl + or mem, reg По идее - bts
Spectrum Повторяю Код (Text): mov eax,[bitindex] bts [Mass],eax Индекс может быть больше 31! Ограничение существует только для непосредственного операнда. На атлонах bts не спаривается и занимает 9 тактов. Вполне возможно, что твой код будет быстрее. Измерь производительность.
Извиняюсь, уже понял. Я и не знал, что процы такие умные бывают, думал, они только на деревьях кричать умеют )
Это что, в SSE4.2 уже есть CRC32 и инструкции для работы со строками, а в AVX будет вообще AES шифрование.