![]() |
23 способа получить в регистре единицу.
23 способа получить в регистре единицу.
От самых простых до самых извратных. Хорошая разминка для мозгов. 1. непохек Код:
2. Код:
sub eax,eax /xor eax,eax (по отдельности не рассматриваю)3. Код:
imul eax,04. Сопроцессор, но тут нужна дополнительная переменная. mem dword ? Код:
finitСначала мы инициализируем сопроцессор (finit), потом загружаем в st0 1, потом отправляем содержимое st0 в mem, mem ложим в eax ) 5. Еще сопроцессор ( mem dword ?) Код:
finit6. А теперь больше тригонометрии Код:
finit7. А еще можно так Код:
sub eax,eax8. Самый мой любимый способ Код:
sub eax,eax9. Код:
lea eax,[1]10. Разновидность 5 метода, но беру модуль Код:
finitКод:
sub eax,eax12. Этот способ я тоже люблю. Делим двоичный логарифм 10 сам на себя.Аналогичный способ с любым др. числом (например с натуральным логарифмом 2 - оба способа рассматриваются) Код:
finitКод:
finitКод:
finitКод:
finitтождества. Код:
finitКод:
stc ; установка флага переноса в 1Код:
sub eax,eaxКод:
sub eax,eaxКод:
sub eax,eaxКод:
sub eax,eaxКод:
Код:
sub eax,eaxКод:
sub eax,eaxКод:
xor eax,eaxКод:
xor eax,eax |
Это все конечно круто, только зачем мне куча каких-то извращенных способов, если обычно используются 3-4 способа из списка? Причем по размеру они выигравают все остальные. Честно говоря, похоже на детское хвастовство, теперь сделай 23 способа как получить -1 в регистре. Без обид, но лучше вкладывать свой потенциал во что-то более серьезное.
|
Ну цель вообще другая была... А именно
Цитата:
Цитата:
ЗЫ Ясное дело, что лучше всего Код:
а это 5 байт=\\\\ Так что материал полезен для общего развития) |
Цитата:
тоже 3 байта (константа до 255 для W32) Код:
push 1Код:
invoke IsWindow,-1Код:
push 1Код:
stc ;<- 1Код:
call @1Код:
movzx ebx,axКод:
call @2 |
вы таки шеллкодесов не писали
тут есть таки разница что использовать |
Цитата:
|
Цитата:
|
ещё так... тока мсысл всего этого? =) нету...
Xor eax,eax Mov Al,1 |
А я наоборот, полностью согласен с nerezus. Скорость, быстродействие - зависит от скила кодера в данный момент времени. А вот понятность кода, возможность его модернизации - это, так сказать, на все времена! Но это отнюдь не означает, что надо писать медленный и алгоритмически неправильный код в ушерб понятности. надо знать меру : ). По теме: асм не знаю, заметил лишь одно: не "ложим", а "кладем" - рус.яз. рулит : )
|
Клево. "Кладем"... Важное замечание такое)))))))))
В чем смысл? Я уже писала в чем смысл.... в далеком октябре. Читаем пост номер 1 вторая строка второе предложение. Читаем пост номер три. ЦЕЛИКОМ. Цитата:
|
| Время: 23:32 |