Показать сообщение отдельно

fmem (Fill memory)
  #4  
Старый 13.12.2006, 00:10
hidden
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме:
5887054

Репутация: 1292


По умолчанию fmem (Fill memory)

Алгоритм: fmem (Fill memory)
Синтаксис: fasm
Описание: Заполнение участка памяти байтом, указоным в третьем параметре
Коментарий: В общем, это альтернатива функции zeromem, если в третий параметор поместить 0, работоспособность ничуть не снизится, а даже повысется из-за придельной оптимизации, а так как в этот параметор можно помещять не только 1 байт, можно немного по импровизировать с форматом заполнения. Какие только извращённые алгоритмы я не встречал, для выполнения этой элементарнейшей задачи, бывали даже в пять раз длиннее представленного мной кода, больше вам не придётся извращятся над этим алгоритмом, он оптимизирован до примела. Кстати он не затирает не один регистр, даже eax.
Пример вызова:
Код:
format PE GUI 4.0
entry start

include 'win32a.inc'

start:
        stdcall fmem, buf, 11, 0
        stdcall fmem, buf, 21, 'aaaa' ; Нужно указывать 4 'a' !
        ret

buf     db '2yt2i3uy4t5234t5ywgejhfvjrvbxau4vufv3db4tgvrjwqyt4fvbejsdyqwtfvbeudrweq'
Код:
Код:
proc fmem, mem, len, byte
        xchg    edi, [mem]
        xchg    ecx, [len]
        xchg    eax, [byte]
        shr     ecx, 1
        jnc     @f
        stosb
 @@:    shr     ecx, 1
        jnc     @f
        stosw
 @@:    rep     stosd
        xchg    edi, [mem]
        xchg    ecx, [len]
        xchg    eax, [byte]
        ret
endp

Последний раз редактировалось hidden; 13.12.2006 в 00:15..
 
Ответить с цитированием