Хотелось бы услышать какой способ обращения к конкретному биту в числе самый быстрый. Например у меня есть число 4784 надо обратиться скажем к 3 биту этого числа. Нам в политехе такое задали.. все бы ничего, но там надо обращаться в цикле, так что хотелось бы посмотреть на быстрый способ.
самый быстрый: test eax,100b ;jz\jnz не самый быстрый: shr eax,3 ;jc\jnc самый не быстрый: bt eax,3-1 ;jc\jnc
универсальный Код (Text): mov cl, num_bit mov eax, Number xor ebx[b], [b]ebx[/b] inc ebx shl ebx, cl test eax, ebx ;jz ;jnz Косяк. Виноват. Провтыкал.
q_q +1 S_Alex бред. универсальный Код (Text): mov ebx, number mov ecx, num_bit bt ebx, ecx ;jc ;jnc MEPOX а так же посмотри команды and, bsf, bsr, btc, btr, bts, not, or, rcl, rcr, rol, ror, sal, sar, shl, shr, shld, shrd, setcc, test и ... а хватит пожалуй. mmx перечислять не буду
MEPOX Кстати bt r,r\i сильно тормозит только на P4. Возможно к тому времени, как ты освоишь асм и закончишь политех , эти монстры издохнут окончательно и bt выйдет в лидеры по универсальности & скорости
bt гораздо поудобнее, особенно если число не в регистре, а в памяти и надо обратиться к какому-нибудь 129 биту
mov ebx, long_bit_vector_ptr mov ecx, bit_number mov eax,ecx shr eax,3 mov al,[ebx+eax] and cl,7 shr al,cl jc ...
_basmp_ IMHO это изврат лучше уж Код (Text): mov ebx, long_bit_vector_ptr mov ecx, bit_number bt [ebx],ecx
t00x извиняйте но не верю, что dword'ов а вот на счет памяти я конечно подозревал проверку битов с номерами больше 31 (в памяти), но никогда не пробовал (не требовалось). но за науку спс. Код (Text): mov eax, number bt [dta], eax ;jc or jnc ... dta dd X1, X2, ... Xn на фасме можно и так - проверил. или так Код (Text): bt [eax], eax ;jc or jnc ;это не опечатка ;)