Выиграл один такт и потерял регистры.
Вот ещё про ebp тема была http://www.wasm.ru/forum/viewtopic.php?id=10363
Добавил в цикл перед call mov eax,ecx стало выдавать одинаковое время.
Замерил так @1:call numlen loop @1 Мой табличный вариант из поста #6 - 15 тактов Вариант Black_Mirror из поста #13 - 12 тактов P.S. Проц - Athlon II
Сейчас ещё раз посмотрел на вариант с cmp/sbb и кажется он быстрее табличного. Буду сравнивать.
Ну в общем-то эта тема из разряда "Мелкие задачки для крупных мозгов" и изначально не предполагает какой-либо практической ценности.
PowerASM Но ведь в этом и заключается дзен.
Black_mirror На данный момент твой код лучший из не табличных. Вот моя реализация Уоренновского алгоса function numlen(x: dword):...
persicum Ну да - там плюс минус 1. http://www.wasm.ru/forum/viewtopic.php?pid=372436#p372436
persicum Результат получается приближённый. Black_mirror Код в студию
PowerASM Ну вот приблизительная таблица инструкция такты finit ~100 fldcw ~10 fyl2x ~100 fdivp ~20 В Optimization Guide for...
Black_mirror Я тоже так подумал function numlen(x: dword): dword;register;assembler; const declen: array[0..31] of byte =(1,1,1,1,1,2, 2, 2, 3,...
S_Alex Это совсем не оптимально
В eax содержится число без знака [0..232). Необходимо подсчитать количество разрядов этого числа в десятичном представлении. Например для числа...
Нашёл глюк в комментариях преобразования числа в строку. Там вместо странных цифр 261, 228, 230 должно быть 261, 228, 230.
http://support.microsoft.com/kb/306126/ru
У меня его нету. Вот что нашёл http://www.koders.com/c/fid920594DE5A955BCDF23AC6D9B3B278D895D082EF.aspx?s=suck А диск видимо здесь...
Похоже на сайте нету старых документов http://developer.amd.com/documentation/guides/Pages/default.aspx В оригинале про диск написано следующее
Код там был не на фасме - это я переделал:) Инклюды должны идти на диске к книге. Надо посмотреть на сайте amd. Сейчас быстренько пробежался по...
Rockphorr У тебя получается 0000 8000 4000 С000 6000 А надо 0000 8000 4000 C000 2000
Имена участников (разделяйте запятой).