Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2014, 12:22   #11
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

для integer:
Код:
function log2(const a: dword): dword; assembler;
asm
  bsr     eax, eax
  inc     eax
end;
для int64:
Код:
function log2(const a: int64): dword; assembler;
asm
  mov     eax, dword ptr [a]
  mov     edx, dword ptr [a+4]
  xor     ecx, ecx
  or      edx, edx
  setnz   cl
  shl     ecx, 5
  cmovnz  eax, edx
  bsr     eax, eax
  inc     eax
  add     eax, ecx
end;
в обоих случаях нужно позаботиться о знаке, т.е. x:=log2(abs(x))

Последний раз редактировалось x128; 06.09.2014 в 12:26.
x128 вне форума Ответить с цитированием
Старый 06.09.2014, 13:44   #12
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Долго сидел, вдумывался в фразу - "бинарная длина целого числа"
Чаво?
ЭЭЭЭЭЭЭЭЭ. Мужики, вам чё, бабы не дают?
1, 0 бит = бинарка, или я = тупой ? или нет?

Цитата:
shl ecx, 5
Вы о чём?
Код 5-и, 101.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 06.09.2014 в 13:47.
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.09.2014, 19:23   #13
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от x128 Посмотреть сообщение
для int64:
Для Int64 в несколько раз короче написать можно, но мне лень думать.
Vapaamies вне форума Ответить с цитированием
Старый 06.09.2014, 20:20   #14
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Вы о чём?
Код 5-и, 101.
Там умножение на 32, т.е. 2^5, а вы о чём?

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Для Int64 в несколько раз короче написать можно, но мне лень думать.
И какая польза от этого комментария? Когда будет не лень думать, предлагайте свой вариант. А так, да, можно и короче, а можно использовать вариант для 32-бит и разобрать int64 на делфи
Код:
with Int64Rec(abs(x)) do
  if Hi>0 then x:=Log2(Hi)+32 else x:=Log2(Lo);
но это будет медленней, а ТС упоминал, что скорость важна.

вот еще один вариант для int64:
Код:
function log2(const a: int64): dword; assembler;
asm
  mov     ecx, 32
  mov     eax, dword ptr [a+4]
  or      eax, eax
  jnz     @@skip
  xor     ecx, ecx
  mov     eax, dword ptr [a]
  @@skip:
  bsr     eax, eax
  add     eax, ecx
  inc     eax
end;
x128 вне форума Ответить с цитированием
Старый 06.09.2014, 22:05   #15
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от x128 Посмотреть сообщение
И какая польза от этого комментария?
Такая же, как и от 60-70% всех сообщений на этом форуме. Ответить как-нибудь, лишь бы ответить.
Vapaamies вне форума Ответить с цитированием
Старый 07.09.2014, 08:49   #16
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

несколько способов определения бинарной длины числа Х
Код:
	fld1
	fild x
	fyl2x
	fistp result
;---------------------------
	fild x
	fxtract
	fxch
	fld1
	faddp 
	fistp result
;---------------------------
	bsr eax,x
	inc eax
	mov result,eax
;---------------------------
	push 0
	push x
	fild qword ptr [esp]
	fstp qword ptr [esp]
	mov eax,dword ptr [esp+4]
	shr eax,20
	sub eax,3FEh
	mov result,eax
	add esp,8
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
округление числа до целого johny_03 PHP 1 16.04.2014 08:51
Изъятие из целого числа нулей Sting95 Помощь студентам 2 31.03.2014 10:02
Угадывании целого числа vonavi98 Помощь студентам 0 15.01.2014 19:22
Visual Basic: Описать функцию DigitN (K, N) целого типа, возвращающую N-ю цифру целого положительного числа К Екатерина23 Помощь студентам 1 10.12.2013 09:25
Вывести числа целого неотр. числа Gonzo Помощь студентам 11 04.05.2010 16:55