|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 15, 2004 23:35:44 PUSH 37 PUSH 0 PUSH 0 PUSH 0 PUSH 0 PUSH 0 PUSH hEdit CALL SetWindowPos Это можна оптимизировать или это уже оптимизировано ? |
|
|
Дата: Мар 15, 2004 23:40:35 А как насчет xor eax, eax push eax push eax ... Пните, если не прав, но, кажется, регистр будет быстрее, чем константа... |
|
|
Дата: Мар 16, 2004 00:14:45 · Поправил: Asterix |
|
|
Дата: Мар 16, 2004 00:15:53 Ага , и плюс 3 байта экономятся . 6A00 - PUSH 0 50 - PUSH EAX |
|
|
Дата: Мар 16, 2004 00:32:17 Ещё возможен вариант из статьи по ссылке push 5 pop ecx @@: push 0 loop @B |
|
|
Дата: Мар 16, 2004 00:33:22 Asterix Да, ты прав. Но цикл использовать - это извращение. Поэтому xor eax,eax вполне хватит. |
|
|
Дата: Мар 16, 2004 04:37:46 · Поправил: Black_mirror bogrus Если ранее была директива .radix 16, то можно так: PUSH 37h SUB ESP,20d PUSH hEdit CALL SetWindowPos |
|
|
Дата: Мар 16, 2004 08:31:11 SUB ESP,20 Вот так лучше не делать никогда.. Откуда в стеке нули сами по себе возьмутся? |
|
|
Дата: Мар 16, 2004 11:52:46 Помнится достаточно оригинальный и быстрый способ заполнения памяти был такой (z80) : ld r1,src ld r2,src+1 ld r3,length ldir операция производит move одного куска памяти в другой. Но из-за того, что куски памяти пересекаются, происходит эффект, когда первый байт расползается по всей области. p.s. имена регистров не помню. |
|
|
Дата: Мар 16, 2004 12:39:25 bogrus Первая команда это PUSH 37h или PUSH 37d? S_T_A_S_ Если первая команда PUSH 37h, то это такой набор флагов: SWP_NOSIZE 0x0001 SWP_NOMOVE 0x0002 SWP_NOZORDER 0x0004 SWP_NOACTIVATE 0x0010 SWP_FRAMECHANGED 0x0020 /* The frame changed: send WM_NCCALCSIZE */ Поэтому все эти пять нулей функцией игнорируются. |
|
|
Дата: Мар 16, 2004 13:11:26 xor eax, eax push eax ... Пните, если не прав, но, кажется, регистр будет быстрее, чем константа... Мне почему-то кажется что reg и imm оба будут по одному такту, так что на xor reg, reg пойдет лишний такт. |
|
|
Дата: Мар 16, 2004 13:45:50 rst Помнится достаточно оригинальный и быстрый способ заполнения памяти был такой (z80) : ld hl,src ld de,src+1 ld bc,length-1 mov [hl],0 ldirНо это мадленный был способ.. Самый быстрый - как раз серия push в развернутом цикле (штук по 200 доходило подряд) Black_mirror Теперь понял. Без бутылки т.е. контекста тут не разобрать :) Dr.Golova Мне почему-то кажется что reg и imm оба будут по одному такту, так что на xor reg, reg пойдет лишний такт. А есть смысл здесь такты считать? Там следом API Call. Да и push - довольно медленная операция IMHO - единственно смысл здесь уменьшать размер |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.059 |