
13.12.2006, 00:10
|
|
Постоянный
Регистрация: 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..
|
|
|