Емееться локальный буфер в функции LOCAL buff[0190h]:BYTE Мне нужно всегда знать конец данных в нём А так как создаёться он в стеке, то весь замусорен, как проще всего и быстрее заполнить его нулями???
rep stosd проще её разбивка на отдельные команды mov + sub + jnz чуть быстрее, но здесь это вряд ли принципиально
devillsd xor eax, eax mov ecx, sizeof BUFFER/4 lea edi, BUFFER rep stosd ЗЫ Правильное название темы: "Как обнулировать локальный буфер?" )))
Еще один.. не обнулировать, а обнулить. А топикстартеру - аннулировать - это немного другое. а вообще размер не обязательно может быть кратен четырем. тогда xor eax,eax mov edx, size mov edi, buffer mov ecx, edx shr ecx, 2 rep stosd mov ecx, edx and ecx, 3 rep stosb
но этой ситуации при выделении локального буфера в стеке лучше старательно избегать, тем более что случай когда 1-3 выравнивающих байта в конце буфера чему-то мешают исключительно редкий И ещё нюанс - если размер локального буфера больше страницы памяти (4кб), то при первом заполнении буфера (в нашем случае обнулении) следует двигаться по ходу роста стека т.е. от конца буфера с уменьшением адреса (для std rep movsd не забыть вернуть флаг направления в растущее - cld). После того как буфер один раз заполнен (нулями или ещё чем-то) обращаться к нему можно в любом порядке. Это связано с тем что страницы памяти выделяются стеку по мере необходимости и при этом винда, обнаружив пропущенную страницу, считает что программа заполняет стек неадекватно и роняет её а заполнение большого буфера требуещего нескольких страниц памяти "от начала к концу" именно так со стороны win и выглядит.
Great Ну не знаю. Мне показалось, что "обнулировать" как-то поприкольнее звучит)). Не так обыденно, скажем.