· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.A&O —› Микроупражнение: степень двойки

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Апр 16, 2004 11:34:12 · Поправил: RobinFood

Держите первый вариант решения второй задачи.
xor         ecx,ecx
inc         ecx
_loop1:
cmp         eax,ecx
je          _yes
lea         ecx,[ecx+ecx*2]
cmp         ecx,6F7C52B3 ; =3^21-2^33 (3^20<2^32)
jnz          _loop1
_no:


Дата: Апр 16, 2004 11:37:42

RobinFood
[ его вариант почему-то уверен, что 0 - это степень двойки... ]

В условии задачи написано натуральное число.


Дата: Апр 16, 2004 11:45:51

Тогда зачем там уточнение, что оно беззнаковое?


Дата: Апр 16, 2004 13:11:49

RobinFood
Очевидно, для того, что в случае равенства старшего бита единице число все равно остается натуральным 8-)


Дата: Апр 16, 2004 19:29:50

Угу, решил... и его вариант почему-то уверен, что 0 - это степень двойки...

Тю, а что тебе мешает добавить еще и проверку на ноль?


Дата: Апр 17, 2004 02:18:49

@@:  mov edx, AAAAAAABh
     mul edx
     or  eax, eax
     js  .no
     shr edx, 1
     mov eax, edx
     jc  .no
     jnz @@
.yes:


Дата: Апр 17, 2004 03:03:57

[ captain cobalt : Эх... быстро всё разломали... ]

Поиск по форуму рулит!
проверка 2^n


Дата: Апр 17, 2004 06:40:39 · Поправил: S_T_A_S_

Так по-меньше:
@@:	mov edx, AAAAAAABh
	mul edx
	sbb edx, eax
	jz  .yes
	test edx, eax
	jz  @@
.no:


Дата: Апр 17, 2004 14:50:10

Извиняюсь, но что если просто развернуть цикл? Каков выигрыш в скорости получим тогда? И сделать вообще без каких-либо JMP...
Только не бейте меня по голове! :)


Дата: Апр 18, 2004 03:47:10

ни хера себе


Дата: Апр 18, 2004 14:25:33 · Поправил: S_T_A_S_

[ Eduard_x : что если просто развернуть цикл? Каков выигрыш в скорости получим тогда? ]

66% возможных EAX отбрасываются сразу же, т.е. jz @@ не выполняется.
На 2м проходе - еще 66% и т.д.

Принцип простой - делим на 3, если без остатка, то повторяем - а это не так часто будет.
Макс. кол-во проходов цикла - при 320

Как сделать без каких-либо JMP я не знаю :(
Надо ждать людей понимающих в математике..


ЗЫ
Чтобы с степеню тоже работал алгоритм, надо добавить jnc .yes после mul edx


ЗЫЫ
sla, я подумал некоторое время, но ничего не понял =)


Дата: Апр 19, 2004 07:47:59

Гы.
cmp eax,80000000h
jz yes
cmp eax,40000000h
jz yes
...
cmp eax,1
jz yes
jmp no
:)))


Дата: Апр 19, 2004 11:10:46 · Поправил: Asterix

.


Дата: Апр 19, 2004 12:21:53 · Поправил: Eduard_x

Sharp
это неоригинально. я ж накалякал - без JMP. К тому же ты подгружаешь каждый раз число вместо простого сдвига.

Думал про bsf / bsr, но действительно, Володин вариант наибыстрый.
:)


Дата: Апр 19, 2004 12:34:53

Sharp & Eduard_x

Вы топик с начала читали? Степень двойки уже нашли. Причем более эффективным способом, чем предложенные вами.
Теперь ищем степень тройки

ЗЫ
bsf / bsr очень медленные инструкции.

<< . 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.076