Here's one I cobbled together:
Code: Select all
'reverse the bits in a number, e.g. 0101001 <-> 1001010
function reversebits(byval number as unsigned long, byval bits as long)
if bits<=0 then return 0
asm
mov eax, [number] 'get number
mov ecx, [bits] 'get bits
xor ebx, ebx 'result = 0
label1: 'do
shl ebx, 1 'shift result left
shr eax, 1 'shift number right
setc dl 'dl = [bit shr'ed out of number]
or bl, dl 'add dl to result
loop label1 'bits -= 1: loop while bits
mov [function], ebx 'function = result
end asm
end function
Code: Select all
function reversebits(byval number as unsigned long, byval bits as long)
dim result as unsigned long
if bits <= 0 then return 0
do
result shl=1
result or= number and 1
number shr=1
bits-=1
loop while bits
function = result
end function