|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 14, 2004 16:51:51 Цитата из раздела "Using and Preserving Registers in Inline Assembly" в MSDN: "If your inline assembly code changes the direction flag using the STD or CLD instructions, you must restore the flag to its original value." Все API полагаются на то, что флаг направления всегда сброшен. Это из той же оперы, что и не восстанавливать esi, edi ebp. Просто не каждый об этом знает. |
|
|
Дата: Апр 14, 2004 20:27:14 Four-F Спасибо! Теперь буду знать это правло и иметь подтверждение. |
|
|
Дата: Апр 15, 2004 02:04:11 q_q Почему ты используешь mov edx,1 L10: imul edx,10 loop L10 mul edx а не L10: imul eax,10 loop short L10 xor edx,edx ? А слабо самому догадаться какие недостатки у предложенного тобой способа? |
|
|
Дата: Апр 15, 2004 04:04:10 Asterix Думаю меньше минуты ;-) Хитрый, да? Imho задача состоит не в том, чтобы найти инструкцию, зависящую от std/cld, а разобраться, почему не работает программа, которая экспортирует три функции. _G3 Недостатки познаются в сравнении. По сравнению с чьим? И разве я просил помочь мне найти недостатки в предложенном мною способе? |
|
|
Дата: Апр 15, 2004 09:36:58 q_q Недостатки познаются в сравнении. По сравнению с чьим? По сравнению с моим. Так как 1990 отдал мой алгоритм на растерзание. разве я просил помочь мне найти недостатки в предложенном мною способе? Не просил, но ты предложил оптимизацию приводящую к ошибке. Запусти свой вариант при invoke Divide, 34534, 1024, 6, addr Number и все поймешь. |
|
|
Дата: Апр 15, 2004 10:05:23 _G3 ты предложил оптимизацию приводящую к ошибке Вообще-то я не настаивал, а предложил как возможный вариант. Ошибка в моем варианте та же, что и у masquer и происходит она от незнания контекста вызова подпрограммы Divide. Или ты хочешь сказать, что твой алгоритм не завалят ни какие параметры, например, 9 в качестве Precision? |
|
|
Дата: Апр 15, 2004 22:32:54 q_q Все правильно. Только masquer тут не причем. Он только предлогал ускорить умножение на константу. |
|
|
Дата: Апр 16, 2004 03:49:05 _G3 Как это ни причем, в твоем варианте используется imul, а при помощи lea+shl этот самый i теряется. Его вариант исходит из того, что параметры положительные, т.е. зависит от контекста. |
|
|
Дата: Апр 16, 2004 09:09:15 q_q Так вроде выбор mul или imul в данном случае ни на что не влияет. imul выбрал только потому, что не надо дополнительных регистров использовать. |
|
|
Дата: Апр 16, 2004 10:57:40 · Поправил: q_q _G3 выбор mul или imul в данном случае ни на что не влияет Если данный случай - это 34534, 1024, 3, то да. Но для этого случая и мой и masquer'а вариант подходит. Зачем использовать знаковое умножение, а если у Dividend будет установлен старший бит? Я веду к тому, что, либо алгоритм универсальный, либо надо прямо сказать об области его применения. надо дополнительных регистров использовать Какие дополнительные ресурсы используют мой и masquer'а варианты? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.095 |