|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 10, 2004 22:55:04 Хм... Сначала я написал pxor mm0, mm0 ; 3 bytes movq [esp], mm0 ; 4 bytes Потом подумал что наверное это не хорошо... Что-нибудь по-компактнее предложете? |
|
|
Дата: Июл 10, 2004 23:24:43 diver Если число в eax меньше 80000000h, то можно так: pop edx pop edx cdq push edx push edx |
|
|
Дата: Июл 11, 2004 00:06:02 Можно же и так, 4 байта: push 0 push 0 |
|
|
Дата: Июл 11, 2004 00:33:01 S_T_A_S_ А при этом вершина не сдвинется? |
|
|
Дата: Июл 11, 2004 01:04:00 cresta Конечно, сдвинется. imho такой вопрос сложно рассматривать без контекста. Как правило, стековый фрейм нужно сначала ещё и создать, а потом очищать. Т.е. я предлагаю этими командами не только обнулять байты, но и создавать фрейм :). Корректировка вершины будет как и положено, в конце подпрограммы. Таким образом, возможно получится сэкономить ещё несколько байтов. |
|
|
Дата: Июл 11, 2004 01:21:52 На таких уровнях (4-5-6 байт) вся экономия может быть съедена восстановлением вершины. Хотя, возможно, обнуление 8 байт даёт какой-то ощутимый выигрыш в другом месте... |
|
|
Дата: Июл 11, 2004 01:28:14 Если нужно занулить по адресу [esp] без изменения восемь байт, нужно типа and [esp],0 and [esp+4],0 Это будет 9 байт. можно pusha ми. Но сначала "подняв" esp add esp,8 push 0 push 0 тоже 9 байт но побыстрее. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.063 |