memcpy函数检查要复制的字节是否小于4.如果是,则使用带
的循环move byte ptr ds:[edi], al
复制记忆
但是,如果它不使用以下说明:
neg ecx
and ecx, 3
我知道它正在检查0 - ecx是否可被4整除。但我的问题是:
为什么需要使用ec ecx?
edit:
edx = bytes to copy
ecx = address
test edx, edx
je exit
xor eax, eax
mov al, byte_to_copy
push edi
mov edi, ecx
cmp edx, 4
jb byte_by_byte_copy
neg ecx
and ecx, 3
jnz byte_by_byte_copy
mov ecx, eax
shl eax, 8
add eax, ecx
mov ecx, eax
shl eax, 10
add eax, ecx
mov ecx, edx
and edx, 3
shr ecx, 2
je byte_by_byte_copy
rep stos dword [edi]
test edx, edx
je exit
(byte by byte routine copy here)
答案 0 :(得分:4)
他们所做的实际上是3(x modulo 4)
的廉价计算x 0 1 2 3 4 5 6 7 8 9 ...
result 3 2 1 0 3 2 1 0 3 2 ...
等等。至于为什么他们获得这个价值......现在你已经提供了代码...我相信他们正在做的是在复制之前检查地址的数据对齐,但是我需要深入研究它深深地说服自己。